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

...

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

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.

...

A rotina possui duas formas de tratamento dos valores de impostos:


0201. Automática

A , 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.


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

...

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 moldes do MATA103, porém ela tem outra estrutura de código fonte.

Podemos verificar no exemplo que os array devem ser definidos com a mesma estrutura de dicionário do SX3, tanto para a capa (SF2) quanto para os itens (SD2), e para isso utiliza-se o retorno do dbStruct().

Após se obter esta estrutura, cria-se outro array somente com as informações de conteúdo, e é este array que é passado na rotina automática.

A regra dos impostos continua com a mesma regra de automático ou manual conforme comentado no item 1, porém o que mudou foi a forma de se passar os valores deles.

...


03. OUTRAS INFORMAÇÕES

Quando se passam os valores dos impostos fixos, os valores são respeitados sempre, porém o TES deve estar pelo menos condizente com a operação, ou seja, se estou forçando os valores de ICMS e IPI, o TES deve pelo menos estar como Calcula ICMS e Calcula IPI igual a SIM. Os cálculos não são refeitos, mas as regras de escrituração são respeitadas para gerar os Livros Fiscais.

Para que os valores dos impostos sejam respeitados na gravação das tabelas, os referidos campos devem estar em uso no sistema, senão a rotina automática não os considera e não os leva corretamente para a tabela.

A Totvs recomenda a utilização da rotina automática MATA103 para os documentos de ENTRADA e a MANFS2NFS para os documentos de SAÍDA, pois atende todos os cálculos e todas as integrações de forma completa.

A rotina automática MATA920 também atende a maioria dos casos, porém ela tem algumas limitações em cálculos, onde algumas situações NÃO são previstas.