Jump to content
Notícias do ACBr

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

consultoria_sticker.png

Conteúdo para desenvolvedores
 ao vivo de terça a quinta!
Saiba mais

dev.png

logo_acbr_paygo.png

TEF ACBr PayGo
Seja um revendedor e ofereça uma solução completa para seu cliente.


botao.png

beneficios.png

Desconto na NFC-e


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

Recommended Posts

Tópico movido para a área SAC para que o SLA de resposta seja considerado. 


logoacbr.pngConheç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
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
  • Solution
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

 

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

Projeto ACBr

 

 

Link to post
Share on other sites
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

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?

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
http://www.juliomarmarchetti.com.br
Embarcadero MVP
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil
Link to post
Share on other sites
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
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

Sim muda. como é valor monetário geralmente se trabalha com 2 casas

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
http://www.juliomarmarchetti.com.br
Embarcadero MVP
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil
Link to post
Share on other sites

Seu tipo de dado corresponde ao tipo do campo no componente?

está somando no xml 5.77 mas o total daria 5.72

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
http://www.juliomarmarchetti.com.br
Embarcadero MVP
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil
Link to post
Share on other sites
×
×
  • Create New...