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:
- 0190
- 0220
- C170
- C425
- G140
- H010
- K200
03. ESPECIFICAÇÃO
Parâmetros do ponto de entrada:
Nome | Tipo | Descrição |
---|---|---|
PARAMIXB | Array 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; Observaçã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). Importante 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:
Nome | Tipo | Descrição |
---|---|---|
Array of Record | Retorna Array com conversão da unidade de medida. Importante:
Importante O retorno em formato array, deve ser realizado conforme o tipo de dado em sua posição. |
Importante
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:
Nome Tipo Descrição PARAMIXB Array of Record Array com dados de processamento com 3 elementos
[1] = SB1;
[2] = " ";
[3] = "0220";
O retorno abaixo esperado:
Nome Tipo Descriçã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:
Nome Tipo Descrição PARAMIXB Array 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:
Nome Tipo Descrição Opção 1 Array 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 2 String - cRet => Unidade de Medida do item do documento (string)
Observaçã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:
Nome Tipo Descrição PARAMIXB Array 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:
Nome Tipo Descrição Opção 1 Array 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 2 String - cRet => Unidade de Medida do item do documento (string)
Observaçã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:
Nome Tipo Descrição PARAMIXB Array of Record Array com dados de processamento com 3 elementos
[1] = SFT;
[2] = "E" ou "S";
[3] = "G140";
O retorno abaixo esperado:
Nome Tipo Descrição Opção 1 Array 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 2 String - cRet => Unidade de Medida do item do documento (string)
Observaçã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:
Nome Tipo Descrição PARAMIXB Array 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:
Nome Tipo Descrição Opção 1 Array 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 2 String - cRet => Unidade de Medida do item do documento (string)
Observaçã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:
Nome Tipo Descrição PARAMIXB Array 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:
Nome Tipo Descrição Opção 1 Array 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 2 String - cRet => Unidade de Medida do item do documento (string)
Observação
Este registro verifica se é um array para utilizar as 4 posições ou se é uma string para utilizar somente a unidade de medida.
Importante
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
Dica
Foram disponibilizados exemplos de utilização deste ponto de entrada na pagina de suporte ao cliente em RDMAKES de livros fiscais.