Histórico da Página
...
Esta rotina foi construída nos mesmo mesmos moldes do MATA103. Portanto da rotina MATA103, portanto todas as observações valem também valem para este item também.
Podemos consultar o exemplo MA910AUT.PRW.
...
Para utilização desta rotina, necessitamos somente dos arrays de capa e item, conforme descrito anteriormente. Porém vale porém vale uma observação importante para eles sobre os valores dos impostos.
A Sobre estes valores de impostos, a rotina possui duas formas de tratamento dos valores de impostosconforme veremos a seguir.
0201. Automática,
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 de informar , no último nível do do array do item, na última posição, do item (penúltima posição) o respectivo código do TES (Tipo de entrada/saída - Tabela SF4) utilizado da operação.
| Bloco de código | ||||||
|---|---|---|---|---|---|---|
| ||||||
#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 devem devam ser recalculados e/ou alterados.
Para que esses valores sejam respeitados na importação, basta fazer o procedimento contrário ao item comentado anteriormente anterior ( Automático ), ou seja, informar as referência dos impostos e enviar , na primeira posição do do array do do item a referência do TES (Tipo de entrada/saída - Tabela SF4) do respectivo item.
| Bloco de código | ||||||
|---|---|---|---|---|---|---|
| ||||||
#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
|
| Informações | ||
|---|---|---|
| ||
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 de capa quanto para o array de itens. Primeiramente, devem ser declarados todos os valores de alíquotas, depois os seguido dos valores de base e por último os valores dos tributos, uma . Uma exceção é o o array de de capa, que não pode conter nenhuma referência de alíquota, somente os referências de base e valor do tributo. |
...