Histórico da Página
Í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 no exemplo 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 forma mais aconselhada pela Totvs para a maioria dos casos.
Para utilizar os cálculos automatizados de impostos do sistema, basta NÃO utilizar NENHUMA referência de impostos nos arrays (capa e itens) criados na rotina; além também de informar, no último nível do array do item, na última posição, o respectivo TES da operação.
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#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.
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 | ||
---|---|---|
| ||
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
#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. |
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.