Ir para conteúdo
  • Cadastre-se

dev botao

Desconto tres centavo em 15 itens


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

Recommended Posts

Pessoal estou lidando com um problema talvez seja ignorancia da minha parte mas não encontrei a responsta, na emissão da NF-e quando tem desconto eu dou 0,01 em cada item e depois pego o restante e divido pelo itens tudo certo, mas o problema e que ontem ao emitir uma nota me deparei com um problema, em uma NF-e de 15 itens foi dado o desconto de 0,03 centavos, alguém sabe como poderia resolver isso ?, agradeço pela ajuda.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Não, eu divido o valor do desconto pelo valor total dos itens. Digamos que eu tenha em uma nota 3 itens 

Item 1 = R$ 180,00
Item 2 = R$ 220,00
Item 3 = R$ 65,00

Total = R$ 465,00

Desconto de R$ 0,03

Então R$ 0,03 / R$ 465,00 = 0,00006451612903

Desconto 1 = R$ 180,00 * 0,00006451612903 = 0,01161290323 neste caso eu salvo 0,01 e o resto eu acumulo em uma variável

Desconto 2 = R$ 220,00 * 0,00006451612903 = 0,01419354839 

Desconto 3 = R$ 65,00 * 0,00006451612903 = 0,004193548387 

se você somar o resto que sobra e atribuir ao item com o maior valor, o desconto do item 2 será de R$ 0,02 centavos e do item 1 de R$ 0,01

Gilson do Carmo
WindSoft Sistemas

Link para o comentário
Compartilhar em outros sites

  • Moderadores
  • Solution

@ThiagoLilo , Regra de 3 simples : 

Total do Produtos  = 465,00

desconto = 0,03

Taxa de desconto  = ( 0,03 * 100 ) / 465, 00 =  0,0064516129032258

Outra de Regra de 3 simples

Valor de Desconto  = (  Valor do Produto / 100 ) *  Taxa de desconto --> Fazer Arredondamento para 2 casas decimais;

repetir para todos os itens 

Fazer a soma do valor do desconto

Fazer a Diferença = ( Desconto - Soma do Valor de Desconto  )

Somar a diferença no item tem de maior valor : 

 Valor de Desconto = Valor de Desconto + diferença;

Pegou ..

 @windsoft:) 

 

 

 

 

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

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

Link para o comentário
Compartilhar em outros sites

hLeorj acho que expliquei errado

Vamos lá, imagina que eu tenho uma nota com 15 Itens e dou desconto de 0,03 centavos na nota, então teremos em cada item (Cada item tem o mesmo valor) de 0,002

se transformar isso em duas casas decimais daria 0,00 por que o campo vDesc do item na NF-e não aceita o valor  0.002

em caso de valores muito alto isso não da problema.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Se você usar a regra que eu e o @hleorj te passamos não tem erro. Acho que você está esquecendo de fazer o acúmulo do valor. Não tem como você informar o mesmo desconto para todos os itens, como o desconto é muito pequeno em relação ao valor dos itens a única solução é esta.

Gilson do Carmo
WindSoft Sistemas

Link para o comentário
Compartilhar em outros sites

Utilize isso sempre que precisar ratear valores :

procedure Get_Lista_Rateio_Valores( var List : TStringList ; ANum_Itens : Integer ; Val_Tot : Currency ) ;
  var i : Integer ;
      Val_Rateio : Currency ;
begin
List.Clear ;
Val_Rateio := Val_Tot / ANum_Itens ;
Val_Rateio := StrToFloat(FormatFloat('0.00', Val_Rateio)) ;
for i := 1 to ANum_Itens do
    begin
    if i = ANum_Itens then
       begin
       List.Add( FormatFloat('0.00', Val_Tot) ) ;
       end
        else
         begin
         List.Add( FormatFloat('0.00', Val_Rateio) ) ;
         end ;
    Val_Tot := Val_Tot - Val_Rateio ;
    end;
end;

 

...Vc vai distribuir os valores aos itens da sua Nota que foi rateado no StringList  ! 

 

No seu caso ai 0,03 centavos de desconto para 15 itens quando permitido somente 2 casas decimais vc tera que sacrificar 12 itens sem desconto ai manu , ou seja , 0,01 centavo para os primeiros 3 itens da lista e o resto vai ficar sem desconto manja ?

1º item = 0,01

2º item = 0,01

3º item = 0,01

4º item = 0,00...

Teste o método e depois post ai oque vc resolveu .

 

 

 

Link para o comentário
Compartilhar em outros sites

Fiz o teste na função acima com 12 e 15 itens, e os valores foram divergentes. Fiz alguns teste e no final o que notei que ao invés de Currency usar double, devido casas decimais posso estar errado. Ajustei e fiz vários testes. Aproveitei a ideia acima.

procedure Get_Lista_Rateio_Valores( var List : TStringList ; ANum_Itens : Integer ; Val_Tot : Currency ) ;
  var i : Integer ;
      Val_Rateio,Val_resto : Double ;
begin
List.Clear ;
Val_Rateio := Val_Tot / ANum_Itens ;
Val_Rateio := RoundTo(Val_Rateio,-2) ;
Val_resto  := ((Val_Tot / ANum_Itens)-Val_Rateio);
if Val_resto = 0  then
   Val_resto := Val_Rateio
else
   Val_resto := (Val_resto * ANum_Itens)+Val_Rateio;
for i := 1 to ANum_Itens do
    begin
    if i = ANum_Itens then
       begin
          List.Add( FormatFloat('0.00', Val_resto) ) ;
       end
        else
         begin
         List.Add( FormatFloat('0.00', Val_Rateio) ) ;
         end ;
    end;
end;

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3073 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

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