01. DADOS GERAIS

Linha de Produto:Microsiga Protheus®
Segmento:Serviços
Módulo:Livros Fiscais - SIGAFIS

02. DESCRIÇÃO

Este ponto de entrada tem como finalidade retornar um Array com as informações do produto para os clientes que possuem uma forma diferente do padrão de compor o código do produto.

03. ESPECIFICAÇÃO

Parâmetros do ponto de entrada:

NomeTipoDescrição
PARAMIXBArray

Array com dados:

[1] = cAliasSFT

[2] = cRegsped

[3] = cUnid



NomeTipoDescrição
cAliasSFTCaracterAlias da tabela SFT filtrada onde são lidas as  informações do documento fiscal
cRegspedCaracterNome do registro
cUnidCaracterCampo Unidade de Medida do produto

Retorno:

NomeTipoDescrição
aProdArray

Array com as informações do produto:

aProd[1] - Código do Produto (campo padrão B1_COD)

aProd[2] - Descrição do produto (campo padrão B1_DESC)

aProd[3] - Código de barras (campo padrão B1_CODBAR)

aProd[4] - Código Anterior (campo padrão B1_CODANT)

aProd[5] - Unidade de medida (campo padrão B1_UM)

aProd[6] - Tipo do Item

aProd[7] - Código de NCM (campo padrão B1_POSIPI)

aProd[8] - Exceção da NCM (campo padrão B1_EX_NCM)

aProd[9] - Código do gênero do item (2 primeiros caracteres do NCM obs.: (se for um item de serviço o código do gênero é 00)) (campo padrão B1_POSIPI)

aProd[10] - Código de ISS (campo padrão B1_CODISS)

aProd[11] - Alíquota de ICMS (campo padrão B1_PICM)

aProd[12] - CEST - Código Especificador da Substituição Tributária (campo padrão B1_CEST)

Observação.:  CEST - Exclusivo para SPEDFISCAL - Campo 13 do registro 0200.


Ao utilizar o ponto de entrada é necessário que para o preenchimento da posição aProd[6], seja retornado conforme correspondência aos códigos abaixo, que são relacionados ao tipo do Item. Maiores informações podem ser obtidas no Guia Prático.

Registro 0200: Tabela de Identificação do Item (Produtos e Serviços)

Ao utilizar este ponto de entrada, todas as posições do array aProd devem ser preenchidas, mesmo com informações em branco. Para os casos em que exista relacionamento com outras tabelas, é imprescindível que o conteúdo exista também na tabela relacionada (Ex. Unidade de Medida deve existir na tabela SAH). 

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.

04. EXEMPLO DE UTILIZAÇÃO

Como este ponto de entrada é chamado para diversos registros, tanto no SPED Fiscal quanto na EFD Contribuições, em algumas situações o alias passado para o parâmetro não será necessariamente o alias da tabela SFT.

Para simplificar e não ocasionar erro neste ponto de entrada, sugerimos que realizem a seguinte verificação abaixo:

Do Case
     //Verifica se o campo FT_PRODUTO existe no alias
     Case ( paramixb[1])->(FieldPos('FT_PRODUTO')) > 0
          lFTProduto := .T.
     //Verifica se o campo B1_COD existe no alias
     Case ( paramixb[1])->(FieldPos('B1_COD')) > 0
          lB1Cod := .T.
     //Verifica se o campo COD_ITEM existe no alias
     Case ( paramixb[1])->(FieldPos('COD_ITEM')) > 0
          lCodItem := .T.
     //Verifica se o campo D2_COD existe no alias
     Case ( paramixb[1])->(FieldPos('D2_COD')) > 0
          lD2Cod := .T.
     //Verifica se o campo CF8_ITEM existe no alias
     Case ( paramixb[1])->(FieldPos('CF8_ITEM')) > 0
          lCF8Item := .T.
EndCase

Desta forma sabemos realmente se o campo FT_PRODUTO ou COD_ITEM realmente existe no alias passado, e assim podemos tomar devida ação ou processamento dentro deste ponto, evitando erro. Abaixo exemplo completo:

#include "Rwmake.ch"

User Function SPEDPROD()
	Local cAlias 	 := Iif(Len(paramixb) >= 1, paramixb[1], '')
	Local cRegspd 	 := Iif(Len(paramixb) >= 2, paramixb[2], '')
	Local cUnid 	 := Iif(Len(paramixb) >= 3, paramixb[3], '')
	Local aProd 	 := {}
	Local lFTProduto := .F.
	Local lB1Cod 	 := .F.
	Local lCodItem 	 := .F.
	Local lD2Cod 	 := .F.
	Local lCF8Item 	 := .F.
	
    Do Case
		//Verifica se o campo FT_PRODUTO existe no alias
	Case (cAlias)->(FieldPos('FT_PRODUTO')) > 0
		lFTProduto := .T.
		//Verifica se o campo B1_COD existe no alias
	Case (cAlias)->(FieldPos('B1_COD')) > 0
		lB1Cod := .T.
		//Verifica se o campo COD_ITEM existe no alias
	Case (cAlias)->(FieldPos('COD_ITEM')) > 0
		lCodItem := .T.
		//Verifica se o campo D2_COD existe no alias
	Case (cAlias)->(FieldPos('D2_COD')) > 0
		lD2Cod := .T.
		//Verifica se o campo CF8_ITEM existe no alias
	Case (cAlias)->(FieldPos('CF8_ITEM')) > 0
		lCF8Item := .T.
	EndCase

	aAdd(aProd, "00001")     // aProd[1] - Código do Produto(campo padrão B1_COD )
	aAdd(aProd, "Teste")     // aProd[2] - Descrição do produto(campo padrão B1_DESC)
	aAdd(aProd, "")          // aProd[3] - Código de barras(campo padrão B1_CODBAR)
	aAdd(aProd, "")          // aProd[4] - Código Anterior(campo padrão B1_CODANT)
	aAdd(aProd, "UN")        // aProd[5] - Unidade de medida(campo padrão B1_UM)
	aAdd(aProd, "04")        // aProd[6] - Tipo do Item
	aAdd(aProd, "33074900")  // aProd[7] - Código de NCM(campo padrão B1_POSIPI)
	aAdd(aProd, "")          // aProd[8] - Exceção da NCM(campo padrão B1_EX_NCM)
	aAdd(aProd, "33")        // aProd[9] - Código do gênero do item (2 primeiros caracteres do NCM obs.:
                             //            (se for um item de serviço o código do genero é 00))(campo padrão B1_POSIPI)
	aAdd(aProd, "")          // aProd[10] - Código de ISS(campo padrão B1_CODISS)
	aAdd(aProd, 18)          // aProd[11] - Alíquota de ICMS(campo padrão B1_PICM)
	aAdd(aProd, "")          // aProd[12] - CEST - Código Especificador da Substituição Tributária(campo padrão B1_CEST)

Return (aProd)

05. DEMAIS INFORMAÇÕES

Não há.