01. DADOS GERAIS

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

02. DESCRIÇÃO

Este ponto 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] = Alias da tabela SFT filtrada

[2] = Nome do registro

[3] = Campo Unidade de Medida do produto

Retorno:

NomeTipoDescrição
aProdArray

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