Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

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


02. DESCRIÇÃO

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

Por padrão é assumida sempre a primeira unidade de medida e a primeira quantidade (para gerar o registro 0190 e campo 06 do registro C170). Para 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:

  • 0190
  • 0220
  • C170
  • C425
  • G140
  • H010
  • K200

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;


Dica
titleObservaçã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). 

Aviso
titleImportante

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

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.


Aviso
titleImportante

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.

Aviso
titleImportante

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:


  • 0190
    • Não temos parâmetros e retorno para este registro, ele será um reflexo da unidade de medida informada para os demais.


  • 0220
    • Na chamada deste registo serão passados os parâmetros abaixo:

      NomeTipoDescrição
      PARAMIXBArray of Record

      Array com dados de processamento com 3 elementos

      [1] = SB1;

      [2] = " ";

      [3] = "0220";

    • O retorno abaixo esperado:

      NomeTipoDescrição

      Array of Record

      Neste registro é utilizado somente a 5 posição do array, caso exista e esteja preenchido será utilizado.

      Exemplificação:

      • aRet[1] => ""
      • aRet[2] => ""
      • aRet[3] => ""
      • aRet[4] => ""
      • aRet[5] => Código de Barras (string)



  • C170
    • Na chamada deste registo serão passados os parâmetros abaixo:

      NomeTipoDescrição
      PARAMIXBArray of Record

      Array com dados de processamento com 3 elementos

      [1] = cAliasSFT; (Alias da query principal posicionada na SFT e demais tabelas envolvidas na geração do arquivo)

      [2] = "E" ou "S";

      [3] = "C170";

    • O retorno abaixo esperado:

      NomeTipoDescrição
      Opção 1Array of Record

      Neste registro é esperado um array com 4 posições.

      Exemplificação:

      • 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)
      Opção 2String
      • cRet => Unidade de Medida do item do documento (string)

      Informações
      titleObservação

      Este registro verifica se é um array para utilizar as 4 posições ou se é uma string para utilizar somente a unidade de medida.

  • C425
    • Na chamada deste registo serão passados os parâmetros abaixo:

      NomeTipoDescrição
      PARAMIXBArray of Record

      Array com dados de processamento com 2 elementos

      [1] = cQryAlias; (Query posicionado nas tabelas, SFT, SD2, SB1, SLG, SFI)

      [2] = "S";

    • O retorno abaixo esperado:

      NomeTipoDescrição
      Opção 1Array of Record

      Neste registro é esperado um array com 2 posições.

      Exemplificação:

      • aRet[1] => Unidade de Medida do item do documento (string)
      • aRet[2] => Quantidade do item do documento (numérico)
      Opção 2String
      • cRet => Unidade de Medida do item do documento (string)
      Informações
      titleObservação

      Este registro verifica se é um array para utilizar as 2 posições ou se é uma string para utilizar somente a unidade de medida.

  • G140
    • Na chamada deste registo serão passados os parâmetros abaixo:

      NomeTipoDescrição
      PARAMIXBArray of Record

      Array com dados de processamento com 3 elementos

      [1] = SFT;

      [2] = "E" ou "S";

      [3] = "G140";

    • O retorno abaixo esperado:

      NomeTipoDescrição
      Opção 1Array of Record

      Neste registro é esperado um array com 2 posições.

      Exemplificação:

      • aRet[1] => Unidade de Medida do item do documento (string)
      • aRet[2] => Quantidade do item do documento (numérico)
      Opção 2String
      • cRet => Unidade de Medida do item do documento (string)
      Informações
      titleObservação

      Este registro verifica se é um array para utilizar as 2 posições ou se é uma string para utilizar somente a unidade de medida.

  • H010
    • Na chamada deste registo serão passados os parâmetros abaixo:

      NomeTipoDescrição
      PARAMIXBArray of Record

      Array com dados de processamento com 3 elementos

      [1] = cAliBLH; (Tabela temporária, dependendo do motivo do inventário trará dados baseados nas tabelas CIL, F0M, SB1, SBZ)

      [2] = Nil;

      [3] = "H010";

    • O retorno abaixo esperado:

      NomeTipoDescrição
      Opção 1Array of Record

      Neste registro é esperado um array com 2 posições.

      Exemplificação:

      • 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)
      Opção 2String
      • cRet => Unidade de Medida do item do documento (string)
      Informações
      titleObservação

      Este registro verifica se é um array para utilizar as 4 posições ou se é uma string para utilizar somente a unidade de medida.

  • K200
    • Na chamada deste registo serão passados os parâmetros abaixo:

      NomeTipoDescrição
      PARAMIXBArray of Record

      Array com dados de processamento com 3 elementos

      [1] = cAliK200; (Tabela temporária baseada em dados da SB9, D3E)

      [2] = Nil;

      [3] = "K200";

    • O retorno abaixo esperado:

      NomeTipoDescrição
      Opção 1Array of Record

      Neste registro é esperado um array com 2 posições.

      Exemplificação:

      • 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)
      Opção 2String
      • cRet => Unidade de Medida do item do documento (string)
      Informações
      titleObservação

      Este registro verifica se é um array para utilizar as 4 posições ou se é uma string para utilizar somente a unidade de medida.


Aviso
titleImportante

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

...

Bloco de código
languagejava
themeMidnight
titleSPED1300
#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)

   If (aAliasIT)->&(cPrefix+"_DOC")  ==  "000000813" 

      aRet[1]  :=  (aAliasIT)->&(cPrefix+"_SEGUM")  
      aRet[2]  :=  (aAliasIT)->&(cPrefix+"_QTSEGUM")
      aRet[3]  :=  6     //Fator
      aRet[4]  :=  "M"   //Tipo de Conversão

   Else

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

   EndIf

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

Para o exemplo de utilização demonstrado no código acima foi criada a tabela SPED1300C.DBF para alimentar os registros 1300, 1310 e 1320.

...

Dica
titleDica

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

...