01. DADOS GERAIS

Linha de Produto:Microsiga Protheus®
Segmento:Serviços
Módulo:Fiscal


02. DESCRIÇÃO

Este ponto de entrada permite alternar a unidade de medida e respetiva quantidade do item no documento.

Por padrão é assumida sempre a primeira unidade de medida e a primeira quantidade (cadastradas na tabela SB1). No entanto, alguns registros do SPED FISCAL permitem a apresentação utilizando uma unidade de medida diferente daquela definida como unidade de estoque. Para utilizar a segunda unidade de medida e a segunda quantidade, é preciso realizar o tratamento utilizando este ponto de entrada.

Os seguintes registros/campos possuem suporte para a utilização do ponto de entrada SPDFIS02:

03. ESPECIFICAÇÃO

Parâmetros do ponto de entrada:


NomeTipoDescrição
PARAMIXBArray of Record


Array com dados de processamento com 3 elementos

[1] = Alias da tabela;

[2] = Tipo Movimento - Que pode ser E de Entrada ou S de Saída;

[3] = Registro em que ocorre a alteração;


É possível fazer um tratamento específico ao posicionar o produto, ou simplesmente retornar a segunda unidade de medida e a segunda quantidade deste documento (D1_SEGUM ou D2_SEGUM). 

Na chamada do SPDFIS02 para alguns registros K200, H010(SPED Fiscal) não ocorrerá tratamento para o Tipo Movimento, pois estes registros não são gerados com base na movimentação das notas do período e sim com base na produção(K200) e no inventário(H010) do período respectivamente. 

Retorno:

NomeTipoDescrição

Array of Record

Retorna Array com conversão da unidade de medida.

Importante:


  • aRet[1] => Unidade de Medida do item do documento (string)
  • aRet[2] => Quantidade do item do documento (numérico)
  • aRet[3] => Fator de Conversão (numérico)
  • aRet[4] => Tipo de Conversão M=Multiplicação/D=Divisão (string)
  • aRet[5] => Código de Barras (numérico)


A terceira posição do array é o Fator de Conversão, essa posição do array é opcional.
A quarta posição do array é o Tipo de Conversão , essa posição do array é opcional.
A quinta posição do array é o Código de Barras, essa posição do array é opcional.


O retorno em formato array, deve ser realizado conforme o tipo de dado em sua posição.
A personalização dos P.E., devem ser adequadas a regra de negócio de cada cliente, sendo de sua responsabilidade a utilização.

Caso o cliente possua o parâmetro MV_CSDXML (vínculo com o XML do fornecedor) ativado (.T.), algumas informações do ponto de entrada não serão considerados, priorizando os dados do XML de entrada.

Entradas e Saídas esperadas por registro:



Ao utilizar este ponto de entrada é importante se atentar para o tipo de dado retornado. Como este PE permite a utilização de tipos de retornos diferentes, array ou string, é aconselhável que utilizem este ponto de entrada com cautela pois ele é chamado em diversos registros.


Também é fundamental que seja informado uma Unidade de Medida válida existente na tabela SAH, pois caso a mesma seja inexistente ou não informada, pode impactar na geração dos registros, especialmente para os casos em que é utilizada a opção 2 de retorno em formato string.

04. EXEMPLO DE UTILIZAÇÃO


#include "rwmake.ch"
#include "Topconn.ch"
#include "protheus.ch"
 
User Function SPDFIS02()

Local aAliasIT  := ParamIXB[1]													// Recebe o Alias principal
Local cTipoMov  := ParamIXB[2]													// Recebe o tipo de movimento - E = ENTRADA / S = SAIDA, para registros gerados a partir de notas fiscais. Para registros não originados de notas esta posição terá conteúdo Nil.
Local cRegSped  := Iif  (Len(ParamIXB)  >  2,ParamIXB[3],"")					// Recebe o  nome do registro, quando passado(1105, G140, H010, K200).
Local aRet  	:= Array(4)														// Array para armazenar dados do retorno da função
Local cPrefix	:= Iif (ValType(cTipoMov)=='C',Iif (cTipoMov$"E","D1","D2"),"")	// Prefixo da tabela - D1_ / D2_
Local aAreaAnt  := GetArea() 

If !Empty(cPrefix)

    aRet[1]  := "MM"  
    aRet[2]  :=  0
    aRet[3]  :=  4     //Fator
    aRet[4]  := "M"    //Tipo de Conversão

Else
   If cRegSped  ==  "K200"

      If ("SB1")->(dbSeek(xFilial("SB1")+(aAliasIT)->COD_ITEM))

         aRet[1]  :=  ("SB1")->B1_SEGUM  
         aRet[2]  :=  (aAliasIT)->&("QTD")
         aRet[3]  :=  ("SB1")->B1_CONV           //Fator
         aRet[4]  :=  ("SB1")->B1_TIPCONV        //Tipo de Conversão

      Else

         aRet[1]  :=  "MM"  
         aRet[2]  :=  0
         aRet[3]  :=  4     //Fator
         aRet[4]  :=  "M"   //Tipo de Conversão

      Endif

   Endif

Endif
	
If cRegSped == "0220"
   Aadd(aRet,"8888888888888")  // Posição 05 código de barras
EndIf

RestArea(aAreaAnt)

Return aRet 


05. DEMAIS INFORMAÇÕES

Foram disponibilizados exemplos de utilização deste ponto de entrada na pagina de suporte ao cliente em RDMAKES de livros fiscais.