Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 2578 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

Estou utilizando o ACBr MonitorPLUS Ver.1.1.0.40 e hoje estou tendo problema de arredondamento em uma nota.
Testei de varias formas, informando com 2, 3, 4 e até 5 casas decimais. Mas o retorno esta sendo sempre o mesmo.

INFORMANDO O VALOR TOTAL DO ITEM COM 2 CASAS DECIMAIS:
Quantidade=3
ValorUnitario=0,035
ValorTotal=0,1

INFORMANDO O VALOR TOTAL DO ITEM COM 3 CASAS DECIMAIS:
Quantidade=3
ValorUnitario=0,035
ValorTotal=0,105

[RETORNO]
Versao=PR-v3_8_5
TpAmb=2
VerAplic=PR-v3_8_5
NRec=411110216569332
CStat=564
XMotivo=Total do Produto / Servico difere do somatorio dos itens (vProd informado: 94.87, vProd calculado: 94.86)

Alguns itens possuem a terceira casa decimal no valor unitario, mas mesmo utilizando funções como: cast de 2, 3, ... casas decimais o valor continua sendo 94,87. 
Em anexo estou enviando o arquivo de crianção da nota, o xml e tambem uma imagem da base de dados com a coluna de QUANTIDADE,
VALOR UNITARIO e VALOR TOTAL DO ITEM. Se somarmos a coluna total do item, na calculadora, o total vai ser R$94,87.
 

ENTNFE.TXT

Valores da nota.jpg

41171003469577000135550010000031771000031772-nfe.xml

  • Membros Pro
Postado
11 minutos atrás, André Ferreira de Moraes disse:

O total deve possuir duas casas. No seu caso, 0,035 x 3 = 0,11.

Pois é, fiz esse teste da seguinte forma:
(TBRound(DM.IBDListVendaTOTAL.Value, 2);

E no arquivo em anexo e no xml ficaram assim:

<qCom>3.0000</qCom>
<vUnCom>0.0350000000</vUnCom>
<vProd>0.10</vProd>

Se eu arredondar para cima aumentaria a diferença no total, pois o retorno do valor calculado é de R$94,86.

Postado
23 minutos atrás, stylesoftware disse:

INFORMANDO O VALOR TOTAL DO ITEM COM 3 CASAS DECIMAIS:

Quantidade=3
ValorUnitario=0,035
ValorTotal=0,105

Use a função RoundABNT da unit ACBrUtil.
ValorTotal := RoundABNT( (Quantidade * ValorUnitario ),2);

Isso var lhe poupar muita dor de cabeça.

_____________

Prates, Agnaldo

  • Moderadores
Postado

E somando todos os vProd de cada produto o total é 94,86 e não 94,87.

 

Provavelmente vc tem alguma função que está somando os itens sem arredondar e depois aplicando o arredondamento no total e causando esta diferença. Arredonde cada item antes de somar ao valor total.

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.xpos.com.br
  • Membros Pro
Postado
9 minutos atrás, Agnaldo Prates disse:

Use a função RoundABNT da unit ACBrUtil.
ValorTotal := RoundABNT( (Quantidade * ValorUnitario ),2);

Isso var lhe poupar muita dor de cabeça.

Fiz o teste aqui como sugerido:
(RoundABNT( (DM.IBDListVendaQTD.Value * DM.IBDListVendaVALOR.Value ),2)));

Mas o retorno foi exatamente o mesmo:

[RETORNO]
Versao=PR-v3_8_5
TpAmb=2
VerAplic=PR-v3_8_5
NRec=411110216569518
CStat=564
XMotivo=Total do Produto / Servico difere do somatorio dos itens (vProd informado: 94.87, vProd calculado: 94.86)

  • Membros Pro
Postado
41 minutos atrás, André Ferreira de Moraes disse:

E somando todos os vProd de cada produto o total é 94,86 e não 94,87.

 

Provavelmente vc tem alguma função que está somando os itens sem arredondar e depois aplicando o arredondamento no total e causando esta diferença. Arredonde cada item antes de somar ao valor total.

Acabei de fazer o teste utilizando o RoundABNT  na inclusão dos itens na venda e ai realmente bateu com o valor de 98.86. Só não sei se o cliente vai gostar por nessa nota 3 itens dele foram arredondados para baixo.

De qualquer forma muito obrigado pela ajuda André e Agnaldo.

Postado
25 minutos atrás, stylesoftware disse:

Acabei de fazer o teste utilizando o RoundABNT  na inclusão dos itens na venda e ai realmente bateu com o valor de 98.86. Só não sei se o cliente vai gostar por nessa nota 3 itens dele foram arredondados para baixo.

De qualquer forma muito obrigado pela ajuda André e Agnaldo.

É importante ter cuidado com arredondamentos. Em 2015, o STJ julgou procedente uma ação da Fazenda Pública de MG contra uma indústria de cosméticos justamente pela questão do arredondamento na base de cálculo do imposto.

A RFB ao publicar o MOC já prevê que arredondamentos são permitidos, desde que não configure sonegação fiscal.

  • Curtir 2

_____________

Prates, Agnaldo

  • Moderadores
Postado
Em 19/10/2017 at 14:07, stylesoftware disse:

Acabei de fazer o teste utilizando o RoundABNT  na inclusão dos itens na venda e ai realmente bateu com o valor de 98.86. Só não sei se o cliente vai gostar por nessa nota 3 itens dele foram arredondados para baixo.

Bom dia!
Você não precisa baixar os valores. 
O seu único erro nesta nota é em relação ao item 2
3 x 0,035 = 0,11 e não 0,10       
O total da nota tem que ser 94,87.   Se vc informar o item 2 com 0,11 (correto)  ao invés de 0,10 estará resolvido o problema, pois a soma dos vprod's totalizará 94,87 que fechará com o valor da nota. 

  3,000	 0,090	 0,27  
  3,000	 0,035	 0,11   (Vc informou 0,10) //Está errado  3,000 x 0,035 - 0,105 arredondando será 0,11
  3,000	 0,500	 1,50
  3,000	 0,270	 0,81
  3,000	 0,330	 0,99
  3,000	 0,350	 1,05
  8,000	 0,140 	 1,12
  8,000	 0,140	 1,12
  4,000	 0,180	 0,72
  8,000	 0,180	 1,44 
  1,000	 0,094	 0,09
  2,000	 0,200	 0,40
100,000	 0,080	 8,00  
  4,000	 0,400	 1,60  
  4,000	 0,300	 1,20
  4,000	 0,150	 0,60 
  4,000	 0,300	 1,20
  4,000	 0,091	 0,36
 10,000	 0,400	 4,00
 10,000	 0,150	 1,50
  1,000	 5,800   5,80
  1,000	13,500	13,50
  6,000  0,150	 0,90
100,000	 0,210	21,00
  1,000	12,000	12,00
  1,000	 3,130	 3,13 
  2,000	 5,230	10,46
Soma dos vprod (total) = 94,87

Total da nota = 94,87 

Neste caso o notal da nota baterá com a soma dos produtos.  Mas tirando o 0,01 centavo que vc não colocou no item 2 vc terá nos itens 94,86 e o total
da nota informado 94,87. Ai não será autorizado mesmo. 

 

  • Curtir 1


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

  • Membros Pro
Postado

Ola, novamente estou com essa rejeição:
NFe rejeitada pelo motivo: 564 =Total do Produto / Servico difere do somatorio dos itens (vProd informado: 4888.88, vProd calculado: 4888.86).

Nesse caso o cliente utiliza 3 casas decimais na quantidade do item por se tratar de produtos pesáveis.

Na inclusão dos itens da nota eu estou utilizando o RoundABNT como me foi sugerido no inicio desse post e na ocasião resolveu o problema.
dm.IBDListVendaTOTAL.Value:=(RoundABNT( (EdQuantidade.Value * EdValor.Value ),2))

Em anexo segue o arquivo de criação da nota e o XML.

ENTNFE.TXT

41171011274848000125550010000042741000042748-nfe.xml

  • Moderadores
Postado

Boa tarde!
Vou sugerir algo que nunca mais você terá estes tipos de problemas.   
É muito provavel que você esteja somando o total dos produtos em uma variável. Ou seja está fazendo a conta de quantidade x unitario = total e somando com o total anterior. 

Observe os valores da tua nota:

 

Citar
1 29,412 3,74 110,001 110,00
2 13,061 4,9 63,999 64,00
3 0,137 3840 526,080 526,08
4 93,333 4,8 447,998 448,00
5 38,69 5,04 194,998 195,00
6 59,211 3,8 225,002 225,00
7 135,056 4,55 614,505 614,50
8 156,25 4,8 750,000 750,00
9 69,474 4 277,896 277,90
10 117,45 5,5 645,975 645,97
11 0,09 3384 304,560 304,56
12 100 7 700,000 700,00
13 1,857 15 27,855 27,85

 Se considerar o arredondamento comum (não dizendo que é o indicado nem o correto)  comum que me refiro é se a terceira casa for maior ou igual a 5 acrescenta 1.
(Porém como já foi citado aqui, tem algumas regras um pouco mais rígidas)   veja que se fosse comum o item 10 ficaria 645,98  e o item 13 ficaria 27,86.
* Os dois centavos que vc incluiu na soma total da nota.  

O que aconselho e é a maneira que uso, quando vou somar o valor total da nota, eu não fico calculando itens, até mesmo porque as vezes o usuário faz alterações etc. 
Então sempre que vou totalizar dou um sum() no campo vProd ou total dos itens.  
Se você considerar os valores acima (como se isto estivesse disposto no teu banco de dados)  ao somar a coluna vc não se incomoda com centavos de terceira casa e neste caso o valor a coluna seria 4.778,86   e não 4.778,88 (como vc calculou através das multiplicações e soma dos itens).

Não sei como está teu sistema, pode ser que dê um trabalhinho fazer a alteração, mas valerá a pena, pois vc nunca mais se incomoda com isto. 
 

  • Curtir 1


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

  • Membros Pro
Postado
6 minutos atrás, Kiko Fernandes disse:

Boa tarde!
Vou sugerir algo que nunca mais você terá estes tipos de problemas.   
É muito provavel que você esteja somando o total dos produtos em uma variável. Ou seja está fazendo a conta de quantidade x unitario = total e somando com o total anterior. 

Observe os valores da tua nota:

 

 Se considerar o arredondamento comum (não dizendo que é o indicado nem o correto)  comum que me refiro é se a terceira casa for maior ou igual a 5 acrescenta 1.
(Porém como já foi citado aqui, tem algumas regras um pouco mais rígidas)   veja que se fosse comum o item 10 ficaria 645,98  e o item 13 ficaria 27,86.
* Os dois centavos que vc incluiu na soma total da nota.  

O que aconselho e é a maneira que uso, quando vou somar o valor total da nota, eu não fico calculando itens, até mesmo porque as vezes o usuário faz alterações etc. 
Então sempre que vou totalizar dou um sum() no campo vProd ou total dos itens.  
Se você considerar os valores acima (como se isto estivesse disposto no teu banco de dados)  ao somar a coluna vc não se incomoda com centavos de terceira casa e neste caso o valor a coluna seria 4.778,86   e não 4.778,88 (como vc calculou através das multiplicações e soma dos itens).

Não sei como está teu sistema, pode ser que dê um trabalhinho fazer a alteração, mas valerá a pena, pois vc nunca mais se incomoda com isto. 
 

O estranho é que para o total da nota eu faço SUM com CAST para o total da nota --->  sum(cast(cast(list_venda.total as numeric(15,2)) as float)) as total

Mas meu problema esta no item, e eu fiz o teste aqui sem o RoundABNT no item mas o arredondamento simples ficou com o mesmo valor.
E mais estranho ainda é que a anos eu vinha utilizando arredondamento simples e de uns dias para cá passou a ocorrer esse problema pelo menos 1 ou 2 vezes por semana.
O erro diz: 
 (vProd informado: 4888.88, vProd calculado: 4888.86),  então posso até estar falando besteira mas.... acredito que a receita passou a fazer algum calculo de QTD x VALOR_UNITARIO e  utiliza o resultado disso para totalizar a nota. Mas não encontrei nos manuais que tipo de calculo e arredondamentos a receita utiliza.

  • Moderadores
Postado
31 minutos atrás, stylesoftware disse:

O erro diz:  (vProd informado: 4888.88, vProd calculado: 4888.86),  então posso até estar falando besteira mas.... acredito que a receita passou a fazer algum calculo de QTD x VALOR_UNITARIO e  utiliza o resultado disso para totalizar a nota.

A crítica é feita em cima da soma do vprod. 
Mas o vProd do total é vc que está informando:  
 

Citar

ValorProduto=4888,88   //Isto está no teu arquivo ENTNFE.TXT

Por isto que eu acredito que deve haver um erro na soma que vc está fazendo. 
Porque se vc somar os totais dos produtos (conforme está no post anterior) verá que a soma será calculado: 4888.86 

O calculo do vprod é feito em cima dos valores que foi informado como total de cada item. 

110,00 + 64,00 + 526,08 + 448,00 + 195,00 + 225,00 + 614,50 + 750,00 + 277,90 + 645,97 + 304,56 + 700,00 + 27,85 = 4.888.86

Os rounds da vida que vem nas linguagens de programação,  arred do excel etc não seguem as normas da ABNT.
Para mais informações leia 
ABNT NBR 5891:1977  (REGRAS DE ARREDONDAMENTO NA NUMERAÇÃO)
Uma pergunta esta tua coluna (list_venda.total )  que entendi que é a coluna que está no teu banco de dados, ela só possui 2 digitos decimais? 

Se é a mesma que vc mostrou na primeira imagem deste post, percebi que vc está usando 3 decimais no total. Ai o arredondamento está acontecendo na tua soma sum()  (o arredondamento simples)  e na função RoundABNT ele segue outra lógica. 


Só para tentar deixar claro isto. 
O RoundABNT segue a NORMA DA ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. 

Veja isto por exemplo:

Citar

2.3 Quando o algarismo imediatamente seguinte ao último algarismo a ser conservado for 5 seguido de zeros, dever-se-á arredondar o algarismo a ser conservado para o algarismo par mais próximo. Conseqüentemente, o último algarismo a ser retirado, se for ímpar, aumentará uma unidade. P.ex.: 4,550 0 arredondados à primeira decimal tornar-se-ão: 4,6.
(No nosso arredondamento simples  ficaria 4,6) (neste caso ficaria igual )

2.4 Quando o algarismo imediatamente seguinte ao último a ser conservado for 5 seguido de zeros, se for par o algarismo a ser conservado, ele permanecerá sem modificação. P.ex.: 4,850 0 arredondados à primeira decimal tornar-se-ão: 4,8.
(No nosso arredondamento simples ficaria 4,9) (neste caso daria a diferença de 1 centavo)

Então vc tem que mudar os dois para o mesmo tipo de cálculo. 
Por isto comentei que se vc preencher a tua coluna total com o numero já arredondando (digamos que usando o RoundABNT) e gravar já com os dois decimais calculado e no final somar o total desta coluna sem arredondamento, estará resolvido. 


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

  • Membros Pro
Postado
Em 27/10/2017 at 17:53, Kiko Fernandes disse:

A crítica é feita em cima da soma do vprod. 
Mas o vProd do total é vc que está informando:  
 

Por isto que eu acredito que deve haver um erro na soma que vc está fazendo. 
Porque se vc somar os totais dos produtos (conforme está no post anterior) verá que a soma será calculado: 4888.86 

O calculo do vprod é feito em cima dos valores que foi informado como total de cada item. 

110,00 + 64,00 + 526,08 + 448,00 + 195,00 + 225,00 + 614,50 + 750,00 + 277,90 + 645,97 + 304,56 + 700,00 + 27,85 = 4.888.86

Os rounds da vida que vem nas linguagens de programação,  arred do excel etc não seguem as normas da ABNT.
Para mais informações leia 
ABNT NBR 5891:1977  (REGRAS DE ARREDONDAMENTO NA NUMERAÇÃO)
Uma pergunta esta tua coluna (list_venda.total )  que entendi que é a coluna que está no teu banco de dados, ela só possui 2 digitos decimais? 

Se é a mesma que vc mostrou na primeira imagem deste post, percebi que vc está usando 3 decimais no total. Ai o arredondamento está acontecendo na tua soma sum()  (o arredondamento simples)  e na função RoundABNT ele segue outra lógica. 


Só para tentar deixar claro isto. 
O RoundABNT segue a NORMA DA ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. 

Veja isto por exemplo:

Então vc tem que mudar os dois para o mesmo tipo de cálculo. 
Por isto comentei que se vc preencher a tua coluna total com o numero já arredondando (digamos que usando o RoundABNT) e gravar já com os dois decimais calculado e no final somar o total desta coluna sem arredondamento, estará resolvido. 

Respondendo a essa pergunta:
Uma pergunta esta tua coluna (list_venda.total )  que entendi que é a coluna que está no teu banco de dados, ela só possui 2 digitos decimais? 
Não, na base de dados (firebird) ela vira uma dizima periódica e para calcular o total da nota eu utilizo o sum com cast da seguinte forma: sum(cast(cast(list_venda.total as numeric(15,2)) as float)) as total

Nesse caso (numeric(15,2)) eu estou considerando 2 casas decimais, mas eu utilizo 3, 4...8 casas decimais de acordo com a quantidade de casas decimais que o cliente necessita.

 

Realmente eu sempre utilizei o sum no total da nota e passei a utilizar o RoundABNT no total do item quando tive o primeiro problema de arredondamento. Porem eu tentei fazer essa nota utilizando o sum no total da nota e o arredondamento simples no total do item e a diferença de 2 centavos permaneceu.
Hoje estou fazendo novos testes para tentar eliminar esse problema de uma vez.

  • Moderadores
Postado
1 hora atrás, stylesoftware disse:

Realmente eu sempre utilizei o sum no total da nota e passei a utilizar o RoundABNT no total do item quando tive o primeiro problema de arredondamento.

Então este é o problema, pois RoundABNT segue as normas ABNT que é diferente do arredondamento simples. 

Uma das regras conforme a  ABNT NBR 5891:1977  (REGRAS DE ARREDONDAMENTO NA NUMERAÇÃO)

Citar

2.4 Quando o algarismo imediatamente seguinte ao último a ser conservado for 5 seguido de zeros, se for par o algarismo a ser conservado, ele permanecerá sem modificação. P.ex.: 4,850 0 arredondados à primeira decimal tornar-se-ão: 4,8.

4,850  se for pelo RoundABNT o resultado será 4,8
4,850  se for pelo arredondamento comum aqui teremos 4,9 
Vc terá que usar ou o RondABNT dos itens e na soma dos totais ou então usar o arredondamento simples também nos itens ao invés do roundABNT.
  
O que não será possível é usar uma fórmula para calcular os itens e outra formula para calcular o total. 

  • Curtir 1


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

  • Membros Pro
Postado
2 minutos atrás, Kiko Fernandes disse:

Então este é o problema será o problema, pois RoundABNT segue as normas ABNT que é diferente do arredondamento simples. 

Uma das regras conforme a  ABNT NBR 5891:1977  (REGRAS DE ARREDONDAMENTO NA NUMERAÇÃO)

4,850  se for pelo RoundABNT o resultado será 4,8
4,850  se for pelo arredondamento comum aqui teremos 4,9 
Vc terá que usar ou o RondABNT dos itens e na soma dos totais ou então usar o arredondamento simples também nos itens ao invés do roundABNT.
  
O que não será possível é usar uma fórmula para calcular os itens e outra formula para calcular o total. 

Sim, estou realizando testes para ver a melhor forma de resolver isso e deixar tudo com o mesmo tipo de arredondamento.

Terminando isso vou passar para os testes referentes aos pagamentos parcelados na NFe 4.0 e posto no tópico como ficou.

Obrigado Kiko. 

  • Obrigado 1
  • Este tópico foi criado há 2578 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.