Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Índice


01. Visão Geral

As rotinas automáticas de documentos fiscais visam atender o mesmo critério de uma inclusão manual pelo sistema, porém de uma forma transparente e sem intervenção.

Temos pelo menos 3 funcionalidades básicas para atender esta demanda, todas elas utilizam dois arrays, um contendo as informações da capa e outro dos itens do documento, além de algum outro parâmetro específico de cada uma.

Podemos ver nos exemplos a seguir, que esses arrays utilizam como referência campos das próprias tabelas, portanto qualquer campo criado pode ser alimentado por meio desta funcionalidade, basta referencia-lo nos arrays.

02. Exemplo de Utilização

0201. Rotina automática de documentos de entrada via MATA103

Para utilização desta rotina, necessitamos somente dos arrays de capa e item, conforme descrito anteriormente.
Porém vale uma observação importante para eles sobre os valores dos impostos.

...

Automática, a forma mais aconselhada pela Totvs para a maioria dos casos.

...

Bloco de código
languagephp
themeRDark
titleMA103AUT - Impostos automáticos
#INCLUDE "TBICONN.CH"

USER Function MA103AUT()	

Local	aCabs	:=	{}	
Local	aItens	:=	{}	
Local   cDoc    := "000007"	

PRIVATE lMsErroAuto := .F.	

PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "XIFIS26" MODULO "COM" TABLES "SF1","SD1","SA1","SA2","SB1","SB2","SF4","SED","SE2"    

//Montagem da capa do documento fiscal		
aAdd(aCabs, {'F1_TIPO   ', 'N'				,})	
aAdd(aCabs, {'F1_FORMUL ', 'N'				,})	
aAdd(aCabs, {'F1_DOC    ', cDoc				,})	
aAdd(aCabs, {'F1_SERIE  ', 'AUT'			,})	
aAdd(aCabs, {'F1_EMISSAO', dDataBase		,})	
aAdd(aCabs, {'F1_FORNECE', '000001'			,})	
aAdd(aCabs, {'F1_LOJA   ', '01'    			,})	
aAdd(aCabs, {'F1_ESPECIE', 'NF'    			,})	
aAdd(aCabs, {'F1_COND   ', '001'			,})		
aadd(aCabs, {'E2_NATUREZ',"TUDO"			,})			

//Montagem dos itens do documento fiscal (1. item)			
aAdd(aItens, {})	
aAdd(aItens[Len(aItens)], {'D1_TES    ',	"021"	,})	
aAdd(aItens[Len(aItens)], {'D1_COD    ', 	'PA0000000000000000000000000001',})	
aAdd(aItens[Len(aItens)], {'D1_QUANT  ', 	1		,})	
aAdd(aItens[Len(aItens)], {'D1_VUNIT  ', 	100		,})	
aAdd(aItens[Len(aItens)], {'D1_TOTAL  ', 	100		,})	
aAdd(aItens[Len(aItens)], {'D1_CF     ', 	'1101'  ,})	
aAdd(aItens[Len(aItens)], {'D1_LOCAL  ', 	'01'	,})		

//Montagem dos itens do documento fiscal (2. item)			
aAdd(aItens, {})	
aAdd(aItens[Len(aItens)], {'D1_TES    ',	"021"	,})	
aAdd(aItens[Len(aItens)], {'D1_COD    ', 	'PA0000000000000000000000000002',})	
aAdd(aItens[Len(aItens)], {'D1_QUANT  ', 	1		,})	
aAdd(aItens[Len(aItens)], {'D1_VUNIT  ', 	100		,})	
aAdd(aItens[Len(aItens)], {'D1_TOTAL  ', 	100		,})	
aAdd(aItens[Len(aItens)], {'D1_CF     ', 	'1101'  ,})	
aAdd(aItens[Len(aItens)], {'D1_LOCAL  ', 	'01'	,})		

//Chamada da rotina automatica	
MSExecAuto ({|x,y,z| MATA103 (x,y,z)}, aCabs, aItens, 3)		

//Tratamento de erro	
If !lMsErroAuto		
	ConOut(OemToAnsi("Documento "+cDoc+"/AUT gerado com sucesso!"))	
Else		
	ConOut(OemToAnsi("Erro na inclusão"))		
	MostraErro()	
EndIf		

RESET ENVIRONMENT	

Return .T.

Manual. Esta forma é muito utilizada nas integrações com outros sistemas onde os cálculos dos tributos já foram efetuados na origem, e na importação para o Protheus eles não devem ser recalculados e alterados.

Para que esses valores sejam respeitados na importação, basta fazer o procedimento contrário ao item comentado anteriormente Automático, ou seja, informar as referência dos impostos e enviar, na primeira posição do array do item a referência do TES do respectivo item.

Informações
titleObservação!

Quando se utilizam as referências de impostos, para que os valores sejam respeitados, é muito importante que uma ordem de estruturação do array seja seguida, tanto para o array de capa quanto para o de itens.

Primeiramente, devem ser declarados todos os valores de alíquotas, depois os valores de base e por último os valores dos tributos, uma exceção é o array de capa, que não pode conter nenhuma referência de alíquota, somente os de base e valor do tributo.

Bloco de código
languagephp
themeRDark
titleMA103AUT - Impostos Manuais
#INCLUDE "TBICONN.CH"

USER Function MA103AUT()	

Local	aCabs	:=	{}	
Local	aItens	:=	{}	
Local   cDoc    := "000007"	

PRIVATE lMsErroAuto := .F.	

PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "XIFIS26" MODULO "COM" TABLES "SF1","SD1","SA1","SA2","SB1","SB2","SF4","SED","SE2"    

//Montagem da capa do documento fiscal		
aAdd(aCabs, {'F1_TIPO   ', 'N'				,})	
aAdd(aCabs, {'F1_FORMUL ', 'N'				,})	
aAdd(aCabs, {'F1_DOC    ', cDoc				,})	
aAdd(aCabs, {'F1_SERIE  ', 'AUT'			,})	
aAdd(aCabs, {'F1_EMISSAO', dDataBase		,})	
aAdd(aCabs, {'F1_FORNECE', 'SP0001'			,})	
aAdd(aCabs, {'F1_LOJA   ', '01'    			,})	
aAdd(aCabs, {'F1_ESPECIE', 'NF'    			,})	
aAdd(aCabs, {'F1_COND   ', '001'			,})		
aadd(aCabs, {'E2_NATUREZ',""			    ,})			

//Os valores de impostos somente devem ser informados caso NAO deva ser efetuado o calculo 	
//	automático pelas rotinas fiscais do sistema.	
//Normalmente as referencias de impostos são passadas quando a importação automática vem	
//	de uma integração com outro sistema, onde todos os valores jah foram calculados e 	
//	NAO podem ser alterados.	

aAdd(aCabs, {'F1_BASEICM',	100				,})	
//Base	

aAdd(aCabs, {'F1_BASEIPI',	40				,})	
//Base	

aAdd(aCabs, {'F1_VALICM ',	10				,})	
//Valor imposto	

aAdd(aCabs, {'F1_VALIPI ',	4				,})	
//Valor imposto	

//Montagem dos itens do documento fiscal (1. item)			
aAdd(aItens, {})	
aAdd(aItens[Len(aItens)], {'D1_TES    ',	"021"	,})	
aAdd(aItens[Len(aItens)], {'D1_COD    ', 	'PA0000000000000000000000000001',})	
aAdd(aItens[Len(aItens)], {'D1_QUANT  ', 	1		,})	
aAdd(aItens[Len(aItens)], {'D1_VUNIT  ', 	100		,})	
aAdd(aItens[Len(aItens)], {'D1_TOTAL  ', 	100		,})	
aAdd(aItens[Len(aItens)], {'D1_CF     ', 	'1101'  ,})	
aAdd(aItens[Len(aItens)], {'D1_LOCAL  ', 	'01'	,})		

//O mesmo tratamento para os impostos comentados acima, vale para os itens tambem. Portanto soh 	
//	deve ser utilizado quando NAO houver necessidade que o sistema calcule automaticamente.	

aAdd(aItens[Len(aItens)], {'D1_PICM   ',	18		,})	
//Aliquota	

aAdd(aItens[Len(aItens)], {'D1_IPI    ',	18		,})	
//Aliquota	

aAdd(aItens[Len(aItens)], {'D1_BASEICM',	50		,})	
//Base	

aAdd(aItens[Len(aItens)], {'D1_BASEIPI',	20		,})	
//Base	

aAdd(aItens[Len(aItens)], {'D1_VALICM ',	5		,})	
//Valor imposto	

aAdd(aItens[Len(aItens)], {'D1_VALIPI ',	2		,})	
//Valor imposto	

//Montagem dos itens do documento fiscal (2. item)			
aAdd(aItens, {})	
aAdd(aItens[Len(aItens)], {'D1_TES    ',	"021"	,})	
aAdd(aItens[Len(aItens)], {'D1_COD    ', 	'PA0000000000000000000000000002',})	
aAdd(aItens[Len(aItens)], {'D1_QUANT  ', 	1		,})	
aAdd(aItens[Len(aItens)], {'D1_VUNIT  ', 	100		,})	
aAdd(aItens[Len(aItens)], {'D1_TOTAL  ', 	100		,})	
aAdd(aItens[Len(aItens)], {'D1_CF     ', 	'1101'  ,})	
aAdd(aItens[Len(aItens)], {'D1_LOCAL  ', 	'01'	,})	

//O mesmo tratamento para os impostos comentados acima, vale para os itens tambem. Portanto soh 	
//	deve ser utilizado quando NAO houver necessidade que o sistema calcule automaticamente.	
aAdd(aItens[Len(aItens)], {'D1_PICM   ',	18		,})	
//Aliquota	

aAdd(aItens[Len(aItens)], {'D1_IPI    ',	18		,})	
//Aliquota	

aAdd(aItens[Len(aItens)], {'D1_BASEICM',	50		,})	
//Base	

aAdd(aItens[Len(aItens)], {'D1_BASEIPI',	20		,})	
//Base	

aAdd(aItens[Len(aItens)], {'D1_VALICM ',	5		,})	
//Valor imposto	

aAdd(aItens[Len(aItens)], {'D1_VALIPI ',	2		,})	
//Valor imposto    	

//Chamada da rotina automatica	
MSExecAuto ({|x,y,z| MATA103 (x,y,z)}, aCabs, aItens, 3)		

//Tratamento de erro	
If !lMsErroAuto		
	ConOut(OemToAnsi("Documento "+cDoc+"/AUT gerado com sucesso!"))	
Else		
	ConOut(OemToAnsi("Erro na inclusão"))		
	MostraErro()	
EndIf		

RESET ENVIRONMENT	

Return .T.

0202. Rotina automática de documentos de saída via MATA461

Esta rotina foi construída nos mesmos rotina foi construída nos mesmo moldes do MATA103, porém ela tem outra estrutura de código fonte.

...

Podemos ver no exemplo que é utilizado o codeblock com uma função fiscal MAFISALT que força para chamar o tratamento fiscal, assim irá forçar alterar os valores dos impostos, ela altera os cálculos padrões feitos pelo sistema e os grava nas tabelas dos documentos fiscais.

Podemos consultar o exemplo NFS2NFS.PRW.

02. Exemplo de Utilização

Na documentação abaixo, serão encontrados os exemplos de como gerar um documento de saída através de um documento de origem, e/ou através dos itens do pedido de Venda

Documento fiscal de origem

MANFS2NFS - Geração automática de Documento Fiscal de Saída

Itens do pedido de Vendas

MAPVLNFS - Geração de Documento de Saída a partir de itens do Pedido de Venda