Erro transmissão NFCE "Total do Desconto difere do somatório dos itens"

[removed]

Autor [removed]
Data de criação Aug 30, 2021
Última edição Modificado há 3 anos

Erro

Mensagem retornado da sefaz: Total do Desconto difere do somatório dos itens.

Esse erro ocorre quando a somatória do desconto dos produtos não bate com o desconto total da nota, observação que no produto não tem desconto, mas o sistema pega o desconto do cabeçalho e rateia nos itens para efetuar a transmissão.

Para ter certeza que o problema é esse mesmo acesse o banco de dados e execute o comando a abaixo, troque 99999999 pelo código da NFCe:

SELECT nfce.valortotaldesconto TotalDescontoCabecalho, SUM(IFNULL(subnfce.valordescontoG,0)) TotalDescontoItem

FROM nfce

INNER JOIN subnfce ON subnfce.codigonfce = nfce.codigo

WHERE nfce.codigo = 99999999

A coluna TotalDescontoCabecalho tem de ser igual TotalDescontoItem, se for diferente o erro é esse mesmo.

Solução

Deve analisar a causa do problema para evitar que volte a ocorrer, para liberar o cliente e emitir o documento precisa ajustar o valor de desconto dos itens para bater com o do documento.

O pulpo está com erro não deixa salvar com * pegue os SQL do arquivo a seguir

Para ter certeza que o UPDATE vai funcionar rode o select abaixo e veja se o valor das duas colunas retornadas são iguais se for iguais ou tiver menos de 10 centavos de diferença está certo, troque 99999999 pelo código da NFCe:

SELECT

nfce.valortotaldesconto,

SUM(ROUND( (((subnfce.ValorUnitario + subnfce.ValorAcrescimo - subnfce.ValorDesconto) subnfce.Quantidade) (ROUND(((nfce.valortotaldesconto * 100) / nfce.valorproduto), 10) / 100)), 2)) valordesconto

FROM subnfce

INNER JOIN nfce ON nfce.codigo = subnfce.codigonfce WHERE subnfce.CodigoNfce = 99999999;

Se os valores do passo anterior estiverem corretos rode o update abaixo, troque 99999999 pelo código da NFCe:

UPDATE subnfce

INNER JOIN nfce ON subnfce.codigonfce = nfce.codigo

SET

PDescontoG=ROUND(((nfce.valortotaldesconto * 100) / nfce.valorproduto), 10),

valordescontoG=ROUND( (((subnfce.ValorUnitario + subnfce.ValorAcrescimo - subnfce.ValorDesconto) subnfce.Quantidade) (ROUND(((nfce.valortotaldesconto * 100) / nfce.valorproduto), 10) / 100)), 2)

WHERE subnfce.CodigoNfce = 99999999;

Se no primeiro passo deu uma diferença de centavos, coloque a diferença no item da NFCe com desconto de maior valor alterando o valor do campovalordescontoG.