ERP – Integração Contábil – Regra com arredondamento de rateio na contabilização
Incidente
No módulo da Controladoria, quando a contabilização é feita pelos rateios e se utiliza regra parcial para buscar o valor, ocorre de alguns lançamentos ficarem com diferença de 0,01.
Causa
Essa diferença ocorre, devido ao arredondamento feito pela rotina, que na contabilidade considera apenas duas casas decimais.
Solução
Esta questão do arredondamento deve ser administrada pela regra, pois os valores a contabilizar estão sendo todos manipulados dentro da regra e enviados para a contabilidade.
Para que não ocorra a diferença, segue um exemplo de como tratar na regra:
1. Através da regra, consulte a quantidade de itens no rateio, ao identificar que chegou na última sequência do rateio, jogue a diferença causada pela dizimas periódicas do arredondamento.
@Forma 1352 Seq 14@
Definir Alfa sCodSnf;
Definir Alfa sSnfRlc;
Definir Alfa sCodPro;
Definir Alfa aCodCcu;
Definir Alfa ACLASSI;
Definir Alfa APREFIXO;
Definir Alfa ASUFIXO;
Definir Alfa AMENSAG;
Definir Alfa ACTAFIN;
Definir Cursor Cur_E440Exf;
Definir Cursor Cur_E140Nfv;
Definir Cursor Cur_E440Nfc;
Definir Cursor Cur_E440Ipc;
Definir Cursor Cur_E140Nfv2;
Definir Cursor Cur_E440Nfc2;
Definir Cursor Cur_E070EMP;
Definir Cursor Cur_E043PCM;
nCodEmp = E440RAT.CodEmp;
nCodFil = E440RAT.CodFil;
nCodFor = E440RAT.CodFor;
nNumNfc = E440RAT.NumNfc;
sCodSnf = E440RAT.CodSnf;
nCtaFin = E440RAT.CTAFIN;
aCodCcu = E440RAT.CODCCU;
nPerCta = E440RAT.PERCTA;
nPerRat = E440RAT.PerRat;
nTotal = 0;
nVlrEst = 0;
nVrlLiq = 0;
Definir Cursor Cur_E440Ipc;
Cur_E440Ipc.Sql "Select VlrLiq From E440Ipc \
where CodEmp = 0 \
Union \
Select ((Sum(VlrLiq) + Sum(VlrDfa)) - (Sum(VlrPis) + Sum(VlrCor))) from E440Ipc \
Where CodEmp = :nCodEmp And \
Codfil = :nCodfil And \
Codfor = :nCodFor And \
NumNfc = :nNumNfc And \
CodSnf = :sCodSnf ";
Cur_E440Ipc.AbrirCursor();
Se(Cur_E440Ipc.Achou)
inicio
nVlrLiq = Cur_E440Ipc.VlrLiq;
fim;
Cur_E440Ipc.FecharCursor();
Definir Alfa xCursor;
Definir Alfa xComando;
@ Na primeira sequencia do rateio é inicializado o totalizador do rateio e buscado a quantidade de rateios @
Se (E440RAT.SeqRat = 1){
SQL_Criar(xCursor);
xComando = "select count(*) qtdade from e440rat \
where CodEmp = :CodEmp And \
Codfil = :Codfil And \
Codfor = :CodFor And \
NumNfc = :NumNfc And \
CodSnf = :CodSnf ";
SQL_DefinirComando(xCursor, xComando);
SQL_DefinirInteiro(xCursor, "CodEmp", nCodEmp);
SQL_DefinirInteiro(xCursor, "Codfil", nCodfil);
SQL_DefinirInteiro(xCursor, "CodFor", nCodFor);
SQL_DefinirInteiro(xCursor, "NumNfc", nNumNfc);
SQL_DefinirAlfa(xCursor, "CodSnf", sCodSnf);
SQL_AbrirCursor(xCursor);
Se (SQL_EOF(xCursor) = 0){
SQL_RetornarInteiro(xCursor, "qtdade", xQuantidadeReg);
}
FTotalizador = 0;
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
}
nValor = (((nVlrLiq * E440RAT.PERCTA)/100) * E440RAT.PERRAT /100);
ArredondarValorEX(nValor,5);
vVlrBas9 = nValor;
@ Arredonda para 2 casas pois este é o valor que irá ser considerado na contabilidade @
ArredondarValorEX(nValor,2);
FTotalizador = FTotalizador + nValor;
@ Quando chegar na última sequencia do rateio, joga a diferença de centavos causada pelas dizímas periódicas @
Se (E440RAT.SeqRat = xQuantidadeReg){
vVlrBas9 = (vVlrBas9 + (nVlrLiq - FTotalizador));
}
Observação
Na regra o que estiver entre arrobas (@), são apenas comentários e não surtem efeitos na regra.
Atenção! Antes de realizar qualquer alteração, analise o impacto que poderá ter em outros lançamentos/processos do sistema.