ARREDONDAMENTO DE DESCONTO NÃO BATE NA SOMATÀŒRIA

AMELINHACODE 24/08/2022 08:03:22
#500359
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][/th]
Cabecalho
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 & ")"


KERPLUNK 24/08/2022 09:58:01
#500360
É 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.
JABA 24/08/2022 10:06:34
#500361
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.
AMELINHACODE 24/08/2022 10:12:59
#500362
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?
JABA 24/08/2022 10:21:09
#500363
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.
AMELINHACODE 24/08/2022 10:29:36
#500364
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
JABA 24/08/2022 10:53:51
#500365
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.
KERPLUNK 24/08/2022 16:24:05
#500367
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.
SINCLAIR 28/08/2022 10:33:27
#500376
Resposta escolhida
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
NILSONTRES 28/08/2022 13:36:35
#500377
SINCLAIR,
Também faço isso.
SINCLAIR 28/08/2022 17:39:51
#500378
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.
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas