Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...


Linha de Produto:

Microsiga Protheus

Segmento:

Serviços

Módulo:

SIGAFIS - Livros Fiscais

País(es):

Brasil

Banco(s) de Dados:

Todos

Sistema(s) Operacional(is):

Todos

Versões/Release:

P11 e P12


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.


Neste ponto é passado como parâmetro as variáveis cAliasSFT,cRegspd e cUni:

  • O alias contém o filtro efetuado no SFT de onde são lidas as informações do documento fiscal.
  • A variável cRegspd contém o nome do registro.
  • A variável cUnid contém o campo unidade de medida do produto. 

Com isso é possível identificar o produto e retornar o array com as seguintes informações:


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 genero é 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) 
	Obs. CEST - Exclusivo para SPEDFISCAL - Campo 13 do registro 0200.


Warning
titleAtenção

Ao utilizar este ponto de entrada todas as posições devem ser preenchidas.

Programa Fonte

  • SPEDFISCAL.PRW
  • SPEDXFUN.PRW
  • FISA008.PRW


Sintaxe

SPEDPROD - Retorna Array de Informações ( [ cAliasSFT ], [ cRegsped ], [ cUnid ] ) --> array

Parâmetros


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


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:


Code Block
linenumberstrue
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:


Code Block
linenumberstrue
#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, "teste00001")  //  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)