ARREDONDAMENTO DE DESCONTO NÃO BATE NA SOMATÀŒRIA
Bom dia Pessoal
No meu PDV, quando vou fechar uma venda, posso colocar um desconto (em real).
O sistema tem que que dividir esse desconto para cada produto
O problema está sendo no arredondamento, que em alguns caso, passa 0,01 ou 0,02 centavos
Quando vou emitir uma NFCe ele faz a somatória dos descontos dos produtos e ver o valor do desconto que dei na venda e não bate os valores
Exemplo: Na tabela NFCe o desconto que dei foi 15,00 e quando soma na tabela NFCE_Itens os desconto de cada produto, a somatória dar 15,02... ai a sefaz não aceita essa divergencia.
Seria: DESCRIÇÃO | QUANT | VALOR UNITÃÂRIO | DESCONTO SEM ARREDODAMENTO | DESCONTO COM ARREDONTAMENTO (esse não é salvo na tabela não, somente coloquei ai para ser voces verem como fica apos o arredondamento)
[th]
obs: coloquei uma imagem da tabela em anexo
Coloquei na tabela acima o valor armazenado na tabela NFCE_Itens sem o arredondamento, porem como os valores devem ser exibidos em real, haverá um arredondamento
Exemplo: o primeiro item o valor do desconto é 8,617 porem será exibido e somado como 8,62
Segue o codigo que faço para adicionar o desconto em cada item:
No meu PDV, quando vou fechar uma venda, posso colocar um desconto (em real).
O sistema tem que que dividir esse desconto para cada produto
O problema está sendo no arredondamento, que em alguns caso, passa 0,01 ou 0,02 centavos
Quando vou emitir uma NFCe ele faz a somatória dos descontos dos produtos e ver o valor do desconto que dei na venda e não bate os valores
Exemplo: Na tabela NFCe o desconto que dei foi 15,00 e quando soma na tabela NFCE_Itens os desconto de cada produto, a somatória dar 15,02... ai a sefaz não aceita essa divergencia.
Seria: DESCRIÇÃO | QUANT | VALOR UNITÃÂRIO | DESCONTO SEM ARREDODAMENTO | DESCONTO COM ARREDONTAMENTO (esse não é salvo na tabela não, somente coloquei ai para ser voces verem como fica apos o arredondamento)
Cabecalho | [/th]
OLEO LUB 5W30 SELENIA SINTETICO 1 LT 3 45 8,617 8,62 FILTRO DE OLEO PSL 55 1 25 1,596 1,60 FILTRO DE AR FAP 9054 1 30 1,915 1,92 FILTRO DE CABINE ACP 103 1 20 1,277 1,28 FILTRO DE COMBUSTIVEL FCI 1660 1 25 1,596 1,60 |
obs: coloquei uma imagem da tabela em anexo
Coloquei na tabela acima o valor armazenado na tabela NFCE_Itens sem o arredondamento, porem como os valores devem ser exibidos em real, haverá um arredondamento
Exemplo: o primeiro item o valor do desconto é 8,617 porem será exibido e somado como 8,62
Segue o codigo que faço para adicionar o desconto em cada item:
sSQL = "UPDATE pedidos_itens SET desconto = (subtotal * " & Replace(CDbl(txtDescItens.Text), ",", ".") & " / 100) where (cod_pedido = " & txtCodPedido.Text & ")"
É uma questão puramente matemática. Se voce faz o desconto no valor total e DEPOIS divide esse valor entre os produtos, certamente vai ter esse problema. É puramente ordem de operações.
Os cálculos precisam ser feitos em cima das variáveis, não nos dados que aparecem nos campos já formatados. Não se faz contas em cima de dados previamente arredondados, use-os apenas quando for exibi-los na tela.
Citação::
É uma questão puramente matemática. Se voce faz o desconto no valor total e DEPOIS divide esse valor entre os produtos, certamente vai ter esse problema. É puramente ordem de operações.
Como seria então?
Citação::
:
É uma questão puramente matemática. Se voce faz o desconto no valor total e DEPOIS divide esse valor entre os produtos, certamente vai ter esse problema. É puramente ordem de operações.
Como seria então?
O seu problema é fazer cálculos em cima de dados já formatados. Se voce não corrigir isso, sempre virá aqui com esse problema. Ou seja, é um problema de lógica de programação da sua parte.
Citação::
Os cálculos precisam ser feitos em cima das variáveis, não nos dados que aparecem nos campos já formatados. Não se faz contas em cima de dados previamente arredondados, use-os apenas quando for exibi-los na tela.
Não entendi
Digamos que voce resolva dar 1/3 do valor do produto de desconto. Se o produto valesse R$100,00 então o desconto seria de R$ 33,333... Daàdependendo da formatação que é feita, ele pode ficar com o valor de R$ 33,00 ou exatamente R$ 33,33, perdendo-se a dÃÂzima periódica. Nos dois casos o valor do desconto está sendo alterado e isso afetará a conta final. Então, voce não pode fazer os cálculos em cima de dados previamente formatados. A formatação precisa ser feita apenas quando os dados forem exibidos na tela, não durante o processo. Para que voce tenha o seu caso corrigido, então será necessário fazer cálculos em cima dos dados reais sem a formatação.
Me enganei, pensei que estava pegando o valor final do desconto e dividindo pelos items.
Então é o que o JABA disse mesmo, trabalhe com uma lista de dados e não com valores no grid. O grid, deve apenas ser uma visualização deles, o que pode não incluir valores quebrados ou dÃÂzimas.
Agora, se o que está fazendo é dar um desconto em valor real(não percentual), aàtem que ser aplicado no valor total e não dividido por cada item. Tipo, a compra deu 100 reais e voce quer dar 8 reais de desconto, voce não pode dividir esses 8 reais para cada item.
Então é o que o JABA disse mesmo, trabalhe com uma lista de dados e não com valores no grid. O grid, deve apenas ser uma visualização deles, o que pode não incluir valores quebrados ou dÃÂzimas.
Agora, se o que está fazendo é dar um desconto em valor real(não percentual), aàtem que ser aplicado no valor total e não dividido por cada item. Tipo, a compra deu 100 reais e voce quer dar 8 reais de desconto, voce não pode dividir esses 8 reais para cada item.
Colega,
O que fiz foi assim:
Em função de a divisão ser maior que duas casas após a vÃÂrgula, e Reais ser apenas com duas casas após a vÃÂrgula,
APÓS fazer o rateio pelos itens...
Percorro os itens e faço a soma dos descontos nos itens
Se ficou igual ao valor total do desconto, nada faço.
Caso exista alguma diferença, e geralmente é de 0,01 ou 0,02, seja qual for a diferença, coloco no último item.
Exemplo: total de descontos: R$ 7,00, divididos em 3 item, cada item terá desconto de R$ 2,33, porém somando R$ 2,33 dos 3 itens, teremos R$ 6,99.
Então faço assim:
R$ 7,00 (total de descontos) menos R$ 6,99 (total de descontos rateados) = R$ 0,01, que coloco no último item, ficando este com R$ 2,,34 de descontos e os outros dois com R$ 2,,33
Caso o total de descontos ficasse MENOR que o total rateado, então seria:
R$ 7,,00 menos R$ 7,01 que é igual a - 0,01, então o último item ficaria com R$ 2,33 + (- 0,01) = R$ 2,32 e o cálculo sempre dará certo somando os descontos dos itens (o rateio) em comparação com o valor total de descontos.
Depois de 1 século longe do VBMANIA, voltei... kkkkkkkkkk
O que fiz foi assim:
Em função de a divisão ser maior que duas casas após a vÃÂrgula, e Reais ser apenas com duas casas após a vÃÂrgula,
APÓS fazer o rateio pelos itens...
Percorro os itens e faço a soma dos descontos nos itens
Se ficou igual ao valor total do desconto, nada faço.
Caso exista alguma diferença, e geralmente é de 0,01 ou 0,02, seja qual for a diferença, coloco no último item.
Exemplo: total de descontos: R$ 7,00, divididos em 3 item, cada item terá desconto de R$ 2,33, porém somando R$ 2,33 dos 3 itens, teremos R$ 6,99.
Então faço assim:
R$ 7,00 (total de descontos) menos R$ 6,99 (total de descontos rateados) = R$ 0,01, que coloco no último item, ficando este com R$ 2,,34 de descontos e os outros dois com R$ 2,,33
Caso o total de descontos ficasse MENOR que o total rateado, então seria:
R$ 7,,00 menos R$ 7,01 que é igual a - 0,01, então o último item ficaria com R$ 2,33 + (- 0,01) = R$ 2,32 e o cálculo sempre dará certo somando os descontos dos itens (o rateio) em comparação com o valor total de descontos.
Depois de 1 século longe do VBMANIA, voltei... kkkkkkkkkk
SINCLAIR,
Também faço isso.
Também faço isso.
Citação::
SINCLAIR,
Também faço isso.
Prezado NILSONTRES! Nosso colega de tanto tempo e códigos aqui do VBMANIA!
Espero que esteja tudo bem com voce! Saudável, próspero e em paz!
De fato, a escolha que utilizamos é a melhor, senão a única, em face aos documentos fiscais eletrÃ'nicos.
Tópico encerrado , respostas não são mais permitidas