Árvore de páginas

 

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.


Importante

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)

Importante

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). 

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.

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:

Exemplo
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:

SPEDPROD
#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á.