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.
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;