Ir para conteúdo
  • Cadastre-se

dev botao

Criar função para Acréscimo


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

Recommended Posts

  • Membros Pro

Olá a todos,

Eu possuo um PDV para emissão de NFCe e preciso criar uma função que permita o cliente informar um valor de acréscimo para ser embutido no valor total da nota.

A minha ideia inicial é a seguinte:

1 - O cliente vai informar o valor percentual a ser acrescido ao valor da nota. Ex: 15%

2 - O PDV vai transformar esse valor percentual em real, e depois rateá-lo entre os valores unitários dos itens da nota até chegar aos 15% totais de acréscimo.

O problema é que nessas contas, dado arredondamentos realizados, sempre faltam alguns centavos ao realizar tal rateio. Por exemplo: 15% de acréscimo representa R$ 10,00, e ao ser rateado eu consiga distribuir apenas R$ 9,99. Preciso fazer algo com esse R$ 0,01... Correto?!?!?

Mas os produtos da lista possuem quantidades superiores a 1, e eu não tenho como acrescer esse R$ 0,01 no total de nenhum produto dado a impossibilidade matemática de distribui-lo entre seus valores unitários. Considerem que eu trabalho apenas com 2 casas decimais.

O que fazer com essa sobra? Ignorá-la ou teriam uma alternativa mais elegante?

Desde já agradeço a atenção de todos

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
46 minutos atrás, doidopb disse:

Mas os produtos da lista possuem quantidades superiores a 1, e eu não tenho como acrescer esse R$ 0,01 no total de nenhum produto dado a impossibilidade matemática de distribui-lo entre seus valores unitários. Considerem que eu trabalho apenas com 2 casas decimais.

Por quê não pode acrescentar?

A regra geral é que o resíduo do rateio do desconto entre os itens seja somado ao total do desconto do item de maior valor.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
24 minutos atrás, BigWings disse:

Por quê não pode acrescentar?

A regra geral é que o resíduo do rateio do desconto entre os itens seja somado ao total do desconto do item de maior valor.

Perfeito BigWings... Mas não trata-se de desconto, trata-se de ACRÉSCIMO

Na função de desconto que tenho eu faço exatamente isso que sugeriu e funciona perfeitamente, mas observe que no acréscimo temos um fator complicador, não existe uma tag acréscimo, portanto só resta acrescermos tal valor no total final do(s) produto(s).

Portanto vamos supor que o resíduo seja de R$ 0,01... Por não existir uma coluna acréscimo eu acresceria esse R$ 0,01 ao valor total do produto de maior valor total, item 1 por exemplo. Só que esse item 1 tem 5 quantidades... Como dividir R$ 0,01 entre as 5 quantidades para acrescer esse R$ 0,01 ao valor total do item 1?

Link para o comentário
Compartilhar em outros sites

  • Moderadores
52 minutos atrás, doidopb disse:

Perfeito BigWings... Mas não trata-se de desconto, trata-se de ACRÉSCIMO

Entendi.

53 minutos atrás, doidopb disse:

Na função de desconto que tenho eu faço exatamente isso que sugeriu e funciona perfeitamente, mas observe que no acréscimo temos um fator complicador, não existe uma tag acréscimo, portanto só resta acrescermos tal valor no total final do(s) produto(s). 

Portanto vamos supor que o resíduo seja de R$ 0,01... Por não existir uma coluna acréscimo eu acresceria esse R$ 0,01 ao valor total do produto de maior valor total, item 1 por exemplo. Só que esse item 1 tem 5 quantidades... Como dividir R$ 0,01 entre as 5 quantidades para acrescer esse R$ 0,01 ao valor total do item 1? 

Existem as tags para acréscimo, que são o frete, seguro e despesas acessórias. Se o acréscimo não tem relação com frete ou seguro, a tag correta para informar seria a vOutro.

Caso não queira usar as tags de acréscimo, você ainda pode acrescentar o 0,01 residual no vProd do item de maior valor, e informar o valor unitário como uma divisão do vProd pela quantidade. O valor unitário no XML é meramente informativo, e pode ter até 10 casas decimais.

 

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
25 minutos atrás, BigWings disse:

Entendi.

Existem as tags para acréscimo, que são o frete, seguro e despesas acessórias. Se o acréscimo não tem relação com frete ou seguro, a tag correta para informar seria a vOutro.

Caso não queira usar as tags de acréscimo, você ainda pode acrescentar o 0,01 residual no vProd do item de maior valor, e informar o valor unitário como uma divisão do vProd pela quantidade. O valor unitário no XML é meramente informativo, e pode ter até 10 casas decimais.

 

Legal a dica da tag vOutro, mas acho que seria "mais elegante" ratear entre os produtos.

Essa dica que você me deu em relação ao residual ser jogado no vProd e depois dividido entre as quantidades afim de achar o valor unitário, me deu uma visão mais simplificada do que eu estava tentando fazer. Antes estava me baseando no vUnCom para fazer o rateio e depois descobrir o vProd... Da sua forma acho que o código para o rateio vai ficar mais fácil, obrigado.

Mas observe que como trabalho com duas casas decimais, de uma forma ou de outra sempre existirá um resíduo e o mesmo nem sempre permitirá uma divisão com resultados de até 2 casas, por exemplo (baseado na sua dica):

Levando em conta um resíduo de R$ 0,01, jogo no item de maior valor R$ 10,00, fico com um vProd de R$10,01 e um qCom de 3. Com isso terei um vUnCom de "3,3366666666666666666666666666667", arredondando para cima terei um vUnCom de 3,34 e consequentemente um recálculo de vProd para R$ 10,02.

Aí está meu dilema... 

1 - Devo manter o vProd =10,01 e vUnCom = 3,34? Ignorando assim explicitamente o resultado correto de 3,34 X 3

2- Devo recalcular o vProd para 10,02?

3 - Alguma outra opção que não estou visualizando?

Quero fazer algo que fique mais elegante e me traga menos problemas a longo prazo

Desde já agradeço sua atenção

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1928 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.