Esta rotina foi construída nos mesmos moldes da rotina MATA103, portanto todas as observações valem também para este item.
Podemos consultar o exemplo MA910AUT.PRW.
Para utilização desta rotina, necessitamos somente dos arrays de capa e item porém vale uma observação importante para eles sobre os valores dos impostos.
Sobre estes valores de impostos, a rotina possui duas formas de tratamento conforme veremos a seguir.
A forma automática é a 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 de também informar no último nível do array do item (penúltima posição) o respectivo código do TES (Tipo de entrada/saída - Tabela SF4) utilizado da operação.
#include 'totvs.ch'
#include 'rwmake.ch'
/*
{Protheus.doc} ExecMta910
ExecAuto Mata910
@type Function
*/
User Function MA910AUT()
Local aCabM910 := {}
Local aItemM910 := {}
Local aLinha := {}
Private lMsErroAuto := .F.
aadd(aCabM910,{"F1_TIPO","N"})
aadd(aCabM910,{"F1_DOC","000000003"})
aadd(aCabM910,{"F1_SERIE","001"})
aadd(aCabM910,{"F1_EMISSAO",dDatabase})
aadd(aCabM910,{"F1_FORNECE","COM003"})
aadd(aCabM910,{"F1_LOJA","01"})
aadd(aCabM910,{"F1_ESPECIE","SPED"})
aadd(aLinha,{"D1_ITEM" ,"0001",Nil})
aadd(aLinha,{"D1_COD" ,"000000000000000000000000000010",Nil})
aadd(aLinha,{"D1_QUANT",1,Nil})
aadd(aLinha,{"D1_VUNIT",100,Nil})
aadd(aLinha,{"D1_TOTAL",100,Nil})
aadd(aLinha,{"D1_TES","10A",Nil})
aadd(aItemM910,aLinha)
MSExecAuto({|x,y,z| mata910(x,y,z)},aCabM910,aItemM910,3)
if lMsErroAuto
MostraErro()
else
FwAlertInfo("Nota Incluida Com Sucesso","TOTVS")
endif
Return |
Esta forma é muito utilizada nas integrações com outros sistemas, onde os cálculos dos tributos já foram efetuados na origem e por tal motivo na importação para o Protheus eles não devam ser recalculados e/ou alterados.
Para que esses valores sejam respeitados na importação, basta fazer o procedimento contrário ao item anterior ( Forma automática ), ou seja, informar as referência dos impostos e enviar na primeira posição do array do item a referência do TES (Tipo de entrada/saída - Tabela SF4) do respectivo item.
#include 'totvs.ch'
#include 'rwmake.ch'
/*
{Protheus.doc} ExecMta910
ExecAuto Mata910
@type Function
*/
User Function ExecMta910()
Local aCabM910 := {}
Local aItemM910 := {}
Local aLinha := {}
Private lMsErroAuto := .F.
aAdd(aCabM910,{"F1_TIPO","N"})
aAdd(aCabM910,{"F1_FORMUL" ,"N"})
aAdd(aCabM910,{"F1_DOC","000000004"})
aAdd(aCabM910,{"F1_SERIE","001"})
aAdd(aCabM910,{"F1_EMISSAO",dDatabase})
aAdd(aCabM910,{"F1_FORNECE","COM003"})
aAdd(aCabM910,{"F1_LOJA","01"})
aAdd(aCabM910,{"F1_ESPECIE","SPED"})
aAdd(aCabM910,{"F1_COND","001"})
aAdd(aCabM910,{"F1_DESCONT",0})
aAdd(aCabM910,{"F1_FRETE",0})
aAdd(aCabM910,{"F1_SEGURO",0})
aAdd(aCabM910,{"F1_DESPESA",0})
/*
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 já foram calculados e
NAO podem ser alterados.
*/
aAdd(aCabM910,{"F1_BASEICM",100}) // BASE
aAdd(aCabM910,{"F1_BASEIPI",40}) // BASE
aAdd(aCabM910,{"F1_VALICM",10}) // VALOR
aAdd(aCabM910,{"F1_VALIPI",4}) // VALOR
aAdd(aLinha,{"D1_ITEM" ,"0001",Nil})
aAdd(aLinha,{"D1_COD" ,"000000000000000000000000000010",Nil})
aAdd(aLinha,{"D1_QUANT",1,Nil})
aAdd(aLinha,{"D1_VUNIT",100,Nil})
aAdd(aLinha,{"D1_TOTAL",100,Nil})
aAdd(aLinha,{"D1_TES","10A",Nil})
/*
O mesmo tratamento para os impostos comentados acima, vale para os itens também. Portanto só
deve ser utilizado quando NAO houver necessidade que o sistema calcule automaticamente.
*/
aAdd(aLinha,{"D1_IPI",2,Nil}) // Aliquota
aAdd(aLinha,{"D1_PICM",2,Nil}) // Aliquota
aAdd(aLinha,{"D1_BASEIPI",40,Nil}) // BASE
aAdd(aLinha,{"D1_BASEICM",100,Nil}) // BASE
aAdd(aLinha,{"D1_VALIPI",4,Nil}) // VALOR
aAdd(aLinha,{"D1_VALICM",10,Nil}) // VALOR
aAdd(aItemM910,aLinha)
MSExecAuto({|x,y,z| mata910(x,y,z)},aCabM910,aItemM910,3)
If lMsErroAuto
MostraErro()
else
FwAlertInfo("Nota Incluida Com Sucesso","TOTVS")
endif
return
|
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 array de itens. Primeiramente, devem ser declarados todos os valores de alíquotas, seguido dos 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 referências de base e valor do tributo. |