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 MA910AUT.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 '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 


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