Adelmo Junior 0 Posted September 16, 2020 Report Share Posted September 16, 2020 Bom dia! Estou com problema em aplicar desconto na nota, o desconto é de R$ 8,78 em uma nota no valor de R$ 208,78 na impressão o desconto é arredondado para R$ 8,80 o valor a pagar fica R$ 199,98 e mostra o troco de R$ 0,02 Onde está o erro? Link to post Share on other sites
Juliomar Marchetti 3,845 Posted September 16, 2020 Report Share Posted September 16, 2020 Tu aplicou esse desconto rateado nos itens? Juliomar Marchetti Ajude o Projeto ACBr crescer - Assine o SAC skype: juliomar telegram: juliomar http://www.juliomarmarchetti.com.br Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Link to post Share on other sites
BigWings 3,985 Posted September 16, 2020 Report Share Posted September 16, 2020 No XML está correto? Se não estiver, provavelmente é algo na sua rotina. BigWingsAjude o Projeto ACBr crescer - Assine o SAC Link to post Share on other sites
Adelmo Junior 0 Posted September 16, 2020 Author Report Share Posted September 16, 2020 2 minutos atrás, Juliomar Marchetti disse: Tu aplicou esse desconto rateado nos itens? Justamente faço o rateio no é que é alterado esse valor Link to post Share on other sites
Kiko Fernandes 755 Posted September 16, 2020 Report Share Posted September 16, 2020 Tópico movido para a área SAC para que o SLA de resposta seja considerado. Conheç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 Link to post Share on other sites
Adelmo Junior 0 Posted September 16, 2020 Author Report Share Posted September 16, 2020 4 minutos atrás, BigWings disse: No XML está correto? Se não estiver, provavelmente é algo na sua rotina. Acredito que seja no arredondamento, mas não sei como resolver; Tenho outro exemplo aqui: tenho uma venda de R$ 56,94 aplico o desconto em (R$) de R$ 6,94 então tenho R$ 50,00, faço o rateio que se não me engano em porcentagem é 12,188 arredondando fica 12,20 e o valor do item sem o desconto é R$ 9,49 passando a ser R$ 8,33. Então o desconto de cada item é de R$ 1,16 que multiplicado por 6 que seria o total de itens na nota fica o total de desconto R$ 6,96 Lembrando que o desconto que apliquei foi de R$ 6,94 na venda e depois faço o rateio! Como resolver isso? 19 minutos atrás, Adelmo Junior disse: Justamente faço o rateio no é que é alterado esse valor Eu carrego do banco para alimentar o componente Link to post Share on other sites
Adelmo Junior 0 Posted September 16, 2020 Author Report Share Posted September 16, 2020 Não tinha esse problema, depois de uns dias pra cá muitas notas estão ficando em contingência por esse motivo Link to post Share on other sites
Solution BigWings 3,985 Posted September 16, 2020 Solution Report Share Posted September 16, 2020 37 minutos atrás, Adelmo Junior disse: tenho uma venda de R$ 56,94 aplico o desconto em (R$) de R$ 6,94 então tenho R$ 50,00, faço o rateio que se não me engano em porcentagem é 12,188 arredondando fica 12,20 e o valor do item sem o desconto é R$ 9,49 passando a ser R$ 8,33. Você tem que guardar o resíduo do arredondamento em cada item. Somando os resíduos de arredondamento de cada item você vai ter um valor que deve ser somado ao desconto do item de maior valor. Ex: 6,94 / 56,94 = 0,1218826835265191 9,49 * 0,1218826835265191 = 1,156666666666667 => desc: 1,15 resíduo: 0,0066666666666667 47,45 * 0,1218826835265191 = 5,783333333333333 => desc: 5,78 resíduo: 0,0033333333333333 resíduo total: 0,0066666666666667 + 0,0033333333333333 = 0,01 desc. total rateado = 6,93 + resíduo total => 6,93 + 0,01 = 6,94 O resíduo total acrescenta no item de maior valor, no exemplo o segundo, ficando o desconto 5,78 + 0,01 = 5,79 1 1 BigWingsAjude o Projeto ACBr crescer - Assine o SAC Link to post Share on other sites
Adelmo Junior 0 Posted September 16, 2020 Author Report Share Posted September 16, 2020 39 minutos atrás, BigWings disse: Você tem que guardar o resíduo do arredondamento em cada item. Somando os resíduos de arredondamento de cada item você vai ter um valor que deve ser somado ao desconto do item de maior valor. Ex: 6,94 / 56,94 = 0,1218826835265191 9,49 * 0,1218826835265191 = 1,156666666666667 => desc: 1,15 resíduo: 0,0066666666666667 47,45 * 0,1218826835265191 = 5,783333333333333 => desc: 5,78 resíduo: 0,0033333333333333 resíduo total: 0,0066666666666667 + 0,0033333333333333 = 0,01 desc. total rateado = 6,93 + resíduo total => 6,93 + 0,01 = 6,94 O resíduo total acrescenta no item de maior valor, no exemplo o segundo, ficando o desconto 5,78 + 0,01 = 5,79 Vou verificar aqui, obrigado pela dica Link to post Share on other sites
Adelmo Junior 0 Posted September 18, 2020 Author Report Share Posted September 18, 2020 Em 16/09/2020 at 11:33, Adelmo Junior disse: Vou verificar aqui, obrigado pela dica A questão agora é como pegar esses resíduos! tem uma luz ai pra me dar mais uma forcinha, agradeço Link to post Share on other sites
Juliomar Marchetti 3,845 Posted September 18, 2020 Report Share Posted September 18, 2020 Tu sabe o total certo? e tu sabe o total do desconto. faz a diferença entre um e outro. será que não funciona? Juliomar Marchetti Ajude o Projeto ACBr crescer - Assine o SAC skype: juliomar telegram: juliomar http://www.juliomarmarchetti.com.br Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Link to post Share on other sites
Adelmo Junior 0 Posted September 18, 2020 Author Report Share Posted September 18, 2020 2 minutos atrás, Juliomar Marchetti disse: Tu sabe o total certo? e tu sabe o total do desconto. faz a diferença entre um e outro. será que não funciona? Baseado nisso vou fazer esse teste!, obrigado Link to post Share on other sites
Adelmo Junior 0 Posted September 18, 2020 Author Report Share Posted September 18, 2020 6 horas atrás, Juliomar Marchetti disse: Tu sabe o total certo? e tu sabe o total do desconto. faz a diferença entre um e outro. será que não funciona? Não funcionou! Link to post Share on other sites
Juliomar Marchetti 3,845 Posted September 18, 2020 Report Share Posted September 18, 2020 Anexa o xml que ele gerou Juliomar Marchetti Ajude o Projeto ACBr crescer - Assine o SAC skype: juliomar telegram: juliomar http://www.juliomarmarchetti.com.br Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Link to post Share on other sites
Adelmo Junior 0 Posted September 18, 2020 Author Report Share Posted September 18, 2020 33 minutos atrás, Adelmo Junior disse: Não funcionou! DesctoAcomulado:=0; ValorDescto:= 0.00; percdescto:= 0.00; TotalRealDescto:= 0.00; ValorDesctoProduto:=0; try ValorDesctoProduto:= DataModule1.ClientMestreTOTAL_DESCTO.AsFloat/QtdeTotalItens; Maiorvalor:= DataModule1.ClienteDetalheMaior.AsString; DataModule1.ClienteDetalhe.DisableControls; DataModule1.ClienteDetalhe.First; while not DataModule1.ClienteDetalhe.eof do begin if DataModule1.ClienteDetalheCANCELADO.AsString ='N' then begin // percdescto := DataModule1.ClientMestrePERC_DESCTO.AsFloat; // ValorDescto := (percdescto * Datamodule1.ClienteDetalheVALOR_TOTAL.AsFloat)/100; try DataModule1.ClienteDetalhe.Edit; DataModule1.ClienteDetalheDESCTO.AsFloat:= percdescto; if DataModule1.ClienteDetalheVALOR_TOTAL.AsFloat < ValorDesctoProduto then DesctoAcomulado:= DesctoAcomulado + ValorDesctoProduto else DataModule1.ClienteDetalheVALOR_DESCTO.AsFloat:= ValorDesctoProduto; DataModule1.ClienteDetalhe.Post; DataModule1.ClienteDetalhe.ApplyUpdates(-1); TotalRealDescto:= TotalRealDescto +ValorDescto; except end; end; DataModule1.ClienteDetalhe.Next; end; vDifDescto := DataModule1.ClientMestreTOTAL_DESCTO.AsFloat - fsvDesc; if vDifDescto < 0 then vDifDescto := vDifDescto * -1; Maiorvalor:= DataModule1.ClienteDetalheMaior.AsString; DataModule1.ClienteDetalhe.Locate('VALOR_TOTAL',Maiorvalor,[loPartialKey]); DataModule1.ClienteDetalhe.Edit; DataModule1.ClienteDetalheVALOR_DESCTO.AsFloat :=DesctoAcomulado + DataModule1.ClienteDetalheVALOR_DESCTO.AsFloat; DataModule1.ClienteDetalhe.Post; DataModule1.ClienteDetalhe.ApplyUpdates(-1); finally DataModule1.ClienteDetalhe.EnableControls; end; Já fiz de tudo não funciona, ão sei o que é exatamente Link to post Share on other sites
Adelmo Junior 0 Posted September 18, 2020 Author Report Share Posted September 18, 2020 23 minutos atrás, Adelmo Junior disse: DesctoAcomulado:=0; ValorDescto:= 0.00; percdescto:= 0.00; TotalRealDescto:= 0.00; ValorDesctoProduto:=0; try ValorDesctoProduto:= DataModule1.ClientMestreTOTAL_DESCTO.AsFloat/QtdeTotalItens; Maiorvalor:= DataModule1.ClienteDetalheMaior.AsString; DataModule1.ClienteDetalhe.DisableControls; DataModule1.ClienteDetalhe.First; while not DataModule1.ClienteDetalhe.eof do begin if DataModule1.ClienteDetalheCANCELADO.AsString ='N' then begin // percdescto := DataModule1.ClientMestrePERC_DESCTO.AsFloat; // ValorDescto := (percdescto * Datamodule1.ClienteDetalheVALOR_TOTAL.AsFloat)/100; try DataModule1.ClienteDetalhe.Edit; DataModule1.ClienteDetalheDESCTO.AsFloat:= percdescto; if DataModule1.ClienteDetalheVALOR_TOTAL.AsFloat < ValorDesctoProduto then DesctoAcomulado:= DesctoAcomulado + ValorDesctoProduto else DataModule1.ClienteDetalheVALOR_DESCTO.AsFloat:= ValorDesctoProduto; DataModule1.ClienteDetalhe.Post; DataModule1.ClienteDetalhe.ApplyUpdates(-1); TotalRealDescto:= TotalRealDescto +ValorDescto; except end; end; DataModule1.ClienteDetalhe.Next; end; vDifDescto := DataModule1.ClientMestreTOTAL_DESCTO.AsFloat - fsvDesc; if vDifDescto < 0 then vDifDescto := vDifDescto * -1; Maiorvalor:= DataModule1.ClienteDetalheMaior.AsString; DataModule1.ClienteDetalhe.Locate('VALOR_TOTAL',Maiorvalor,[loPartialKey]); DataModule1.ClienteDetalhe.Edit; DataModule1.ClienteDetalheVALOR_DESCTO.AsFloat :=DesctoAcomulado + DataModule1.ClienteDetalheVALOR_DESCTO.AsFloat; DataModule1.ClienteDetalhe.Post; DataModule1.ClienteDetalhe.ApplyUpdates(-1); finally DataModule1.ClienteDetalhe.EnableControls; end; Já fiz de tudo não funciona, ão sei o que é exatamente 1 hora atrás, Adelmo Junior disse: Não funcionou! Influencia nos tipos de variáveis com currency, extended e double? estava usando currency e extended vinha com casas decimais com 6 dígitos e agora mudei para double e ja mudou aqui, acredito que seja isso Link to post Share on other sites
Juliomar Marchetti 3,845 Posted September 18, 2020 Report Share Posted September 18, 2020 Sim muda. como é valor monetário geralmente se trabalha com 2 casas Juliomar Marchetti Ajude o Projeto ACBr crescer - Assine o SAC skype: juliomar telegram: juliomar http://www.juliomarmarchetti.com.br Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Link to post Share on other sites
Adelmo Junior 0 Posted September 18, 2020 Author Report Share Posted September 18, 2020 1 hora atrás, Juliomar Marchetti disse: Anexa o xml que ele gerou 26200937373977000164650010000000731000041000-nfe.xml 38 minutos atrás, Juliomar Marchetti disse: Sim muda. como é valor monetário geralmente se trabalha com 2 casas Mas ai ele não da o valor correto do desconto Link to post Share on other sites
Adelmo Junior 0 Posted September 18, 2020 Author Report Share Posted September 18, 2020 Eu nunca vi isso, estava funcionando de boa! De uns dias pra cá o pessoa começou a falar que as notas estavam ficando em contingencia por esse motivo trabalho a anos com isso e nunca demorei tanto a resolver um problema desse e não lembro ter alterado o nada nesse código Link to post Share on other sites
Juliomar Marchetti 3,845 Posted September 21, 2020 Report Share Posted September 21, 2020 Seu tipo de dado corresponde ao tipo do campo no componente? está somando no xml 5.77 mas o total daria 5.72 Juliomar Marchetti Ajude o Projeto ACBr crescer - Assine o SAC skype: juliomar telegram: juliomar http://www.juliomarmarchetti.com.br Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Link to post Share on other sites
Recommended Posts