Ir para conteúdo
  • Cadastre-se

dev botao

Total de Pagamento Menor que o total da nota


Ver Solução Respondido por Italo Giurizzato Junior,
  • Este tópico foi criado há 1624 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)

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?

Editado por Adelmo Junior
Erro de na escrita
Postado

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?

  • Consultores
  • Solution
Postado

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

Postado

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

Faço isso:

 

DataModule1.ACBrNFe1.NotasFiscais.Assinar;
 DataModule1.ACBrNFe1.NotasFiscais.Validar;

  • Moderadores
Postado
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.

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

Projeto ACBr

 

 

×
×
  • 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...