Jump to content

dev botao

Total de Pagamento Menor que o total da nota


Adelmo Junior
Go to solution Solved by Italo Giurizzato Junior,
  • Este tópico foi criado há 1495 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Vejo que o total do pagamento está igual ao valor da nota, mas sempre aparece a mensagem informando que o total do pagamento está menor que o total da nota, para resolver o problema adiciono R$ 0,01 (um centavos a mais)!

Por exemplo: se o valor é R$ 1,45 o valor pago em cartão altero para R$ 1,46

Alguém sabe dizer o que está errado?

Edited by Adelmo Junior
Erro de na escrita
Link to comment
Share on other sites

Bom diaimage.thumb.png.38c689a53b878de28482fde43b2ca39e.png

A mensagem é do Validador,  quando gera a nota o total de R$ 24,72

Porque quando gera a nota é adicionado R$ 0,01 centavo a mais, tem a ver com arredondamento ou concatenação ?

que função uso nos valores e nas quantidade na hora de gerar a  nota?

Estou usando:

 

Prod.vProd := RoundABNT(RoundABNT(DataModule1.ClienteDetalhe.FieldByName('QTD_PRODUTO').AsFloat,3) *
                                 DataModule1.ClienteDetalhe.FieldByName('PRECO_UNIT').AsFloat, 2);

 

está correto?

Link to comment
Share on other sites

  • Consultores
  • Solution

Adelmo,

Por favor não confunda erro de validação com rejeição.

Erro de validação é gerado pela rotina que valida o XML da nota antes de ser enviada para a SEFAZ e ele não detecta se a somatória é igual ou não ao total.

Rejeição é gerado e retornado pela SEFAZ que faz as checagens de somatória.

A sua aplicação após alimentar o componente com os dados da venda executa a função ValidarRegrasdeNegocios ?

Pois essa função consegue detectar essa diferença.

Não entendi muito bem essa linha que calcula o valor do produto, você arredonda a quantidade para 3 casas decimais multiplica pelo preço unitário sem nenhum arredondamento e por fim arredonda o resultado para 2 casas decimais.

No XML a quantidade pode ter até 4 casas decimais, já o preço unitário pode ter até 10 casas decimais e o valor total do produto (quantidade x preço) deve ter apenas 2 casas decimais.

Logo a linha que calcula o vProd não deveria ser:

Prod.vProd := RoundABNT(RoundABNT(DataModule1.ClienteDetalhe.FieldByName('QTD_PRODUTO').AsFloat, 4) *
                        RoundABNT(DataModule1.ClienteDetalhe.FieldByName('PRECO_UNIT').AsFloat, 10), 2);

 

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link to comment
Share on other sites

  • Moderadores
1 hora atrás, Adelmo Junior disse:

Prod.vProd := RoundABNT(RoundABNT(DataModule1.ClienteDetalhe.FieldByName('QTD_PRODUTO').AsFloat,3) *
                                 DataModule1.ClienteDetalhe.FieldByName('PRECO_UNIT').AsFloat, 2);

está correto?

Evite usar cálculos e arredondamentos pra informar a tag vProd.

Calcule e arredonde no momento da venda e armazene esse valor no banco de dados,

Na geração da NFe apenas informe esse valor.

  • Like 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.