01. Visão Geral
Esta rotina foi construída nos mesmo moldes do MATA103. Portanto todas as observações também valem para este item também.
Podemos consultar o exemplo MA920AUT.PRW.
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.
#INCLUDE "TBICONN.CH" USER Function MA920AUT() Local aCabec := {} Local aItens := {} Local aLinha := {} Local cDoc := "000058" PRIVATE lMsErroAuto := .F. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //| Abertura do ambiente | //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "XIFIS26" MODULO "FIS" TABLES "SF2","SD2","SA1","SA2","SB1","SB2","SF4","SED","SE1" //Montagem da capa do documento fiscal aadd(aCabec,{"F2_TIPO" ,"N"}) aadd(aCabec,{"F2_FORMUL" ,"S"}) aadd(aCabec,{"F2_DOC" ,cDoc}) aadd(aCabec,{"F2_SERIE" ,"AUT"}) aadd(aCabec,{"F2_EMISSAO",dDataBase}) aadd(aCabec,{"F2_CLIENTE","SP0001"}) aadd(aCabec,{"F2_LOJA" ,"01"}) aadd(aCabec,{"F2_ESPECIE","NF"}) aadd(aCabec,{"F2_COND","001"}) aadd(aCabec,{"F2_DESCONT",0}) aadd(aCabec,{"F2_FRETE",0}) aadd(aCabec,{"F2_SEGURO",0}) aadd(aCabec,{"F2_DESPESA",0}) //Montagem dos itens do documento fiscal aLinha := {} aadd(aLinha,{"D2_COD" ,"PA0000000000000000000000000001",Nil}) aadd(aLinha,{"D2_QUANT",1,Nil}) aadd(aLinha,{"D2_PRCVEN",100,Nil}) aadd(aLinha,{"D2_TOTAL",100,Nil}) aadd(aLinha,{"D2_TES","515",Nil}) aadd(aItens,aLinha) //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //| Teste de Inclusao | //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ MSExecAuto ({|x,y| MATA920(aCabec,aItens)}, aCabec, aItens, 3) If !lMsErroAuto ConOut("Incluido com sucesso! "+cDoc) Else ConOut("Erro na inclusao!") EndIf ConOut("Fim : "+Time()) 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.
#INCLUDE "TBICONN.CH" USER Function MA920AUT() Local aCabec := {} Local aItens := {} Local aLinha := {} Local cDoc := "000059" PRIVATE lMsErroAuto := .F. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //| Abertura do ambiente | //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "XIFIS26" MODULO "FIS" TABLES "SF2","SD2","SA1","SA2","SB1","SB2","SF4","SED","SE1" //Montagem da capa do documento fiscal aadd(aCabec,{"F2_TIPO" ,"N"}) aadd(aCabec,{"F2_FORMUL" ,"S"}) aadd(aCabec,{"F2_DOC" ,cDoc}) aadd(aCabec,{"F2_SERIE" ,"AUT"}) aadd(aCabec,{"F2_EMISSAO",dDataBase}) aadd(aCabec,{"F2_CLIENTE","SP0001"}) aadd(aCabec,{"F2_LOJA" ,"01"}) aadd(aCabec,{"F2_ESPECIE","NF"}) aadd(aCabec,{"F2_COND","001"}) aadd(aCabec,{"F2_DESCONT",0}) aadd(aCabec,{"F2_FRETE",0}) aadd(aCabec,{"F2_SEGURO",0}) aadd(aCabec,{"F2_DESPESA",0}) //Os valores de impostos somente devem ser informados caso NAO deva ser efetuado o calculo // automatico pelas rotinas fiscais do sistema. //Normalmente as referencias de impostos sao passadas quando a importacao automatica vem // de uma integracao com outro sistema, onde todos os valores jah foram calculados e // NAO podem ser alterados. aAdd(aCabec,{'F2_BASEICM',100,}) //Base aAdd(aCabec,{'F2_BASEIPI',40,}) //Base aAdd(aCabec,{'F2_VALICM',10,}) //Valor imposto aAdd(aCabec,{'F2_VALIPI',4,}) //Valor imposto //Montagem dos itens do documento fiscal aLinha := {} aadd(aLinha,{"D2_COD" ,"PA0000000000000000000000000001",Nil}) aadd(aLinha,{"D2_QUANT",1,Nil}) aadd(aLinha,{"D2_PRCVEN",100,Nil}) aadd(aLinha,{"D2_TOTAL",100,Nil}) aadd(aLinha,{"D2_TES","515",Nil}) //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(aLinha, {'D2_IPI ',2,}) //Aliquota aAdd(aLinha, {'D2_PICM ',2,}) //Aliquota aAdd(aLinha, {'D2_BASEIPI',40,}) //Base aAdd(aLinha, {'D2_BASEICM',100,}) //Base aAdd(aLinha, {'D2_VALIPI ',4,}) //Valor imposto aAdd(aLinha, {'D2_VALICM ',10,}) //Valor imposto aadd(aItens,aLinha) //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //| Teste de Inclusao | //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ MSExecAuto ({|x,y| MATA920(aCabec,aItens)}, aCabec, aItens, 3) If !lMsErroAuto ConOut("Incluido com sucesso! "+cDoc) Else ConOut("Erro na inclusao!") EndIf ConOut("Fim : "+Time()) RESET ENVIRONMENT Return .T.
Importante!
Quando se utiliza 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.