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] = cAliasSFT

[2] = cRegsped

[3] = cUnid

NomeTipoDescrição
cAliasSFTCaracterAlias da tabela SFT filtrada
cRegspedCaracterNome do registro
cUnidCaracterCampo Unidade de Medida do produto

Retorno:

NomeTipoDescrição
aProdArrayArray com as informações do produto

Ao utilizar este ponto de entrada todas as posições do array aProd devem ser preenchidas, mesmo com informações em branco.

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