PROBLEMAS COM VALOR CURRENCY
Saudações,
Essa esta dificil de resolver, se não é um bug do VB no minimoé uma pegadinha.
Bem o problema que ele esta considerando 2,21 maior que 13,2 ou qualquer valor que tenha centavos.
Ambas as variaveis são currency, já formatei usando o Format e nada. O mesmo só ocorre para valores com centavos. O calculo dos valores era retornado por um metodo da classe, ja mudei colocando para variavel e nada. Abaixo o codigo
Pergunta tem alguma função que diga se um valor é maior que outro?
Essa esta dificil de resolver, se não é um bug do VB no minimoé uma pegadinha.
Bem o problema que ele esta considerando 2,21 maior que 13,2 ou qualquer valor que tenha centavos.
Ambas as variaveis são currency, já formatei usando o Format e nada. O mesmo só ocorre para valores com centavos. O calculo dos valores era retornado por um metodo da classe, ja mudei colocando para variavel e nada. Abaixo o codigo
....
ElseIf (CmbFormaPag.text <> "Dinheiro") And (CmbFormaPag.text <> "Ticket") Then 'Não permitir recebimento maior que valor para forma de pag diferente que dinheiro
ValorRecebido = Format(CCur(FtxtValorRecebido.text) + pObjECFControl.Venda.Balcao.ValorRecebido, pConsMoeda)
ValorTotal = Format(pObjECFControl.Venda.Balcao.ValorTotal, pConsMoeda)
'Aqui esta o problema.
If Format(ValorRecebido, pConsMoeda) > Format(ValorTotal, pConsMoeda) Then
MsgBox "Valor Recebido em " & CmbFormaPag.text & " não pode ser superior que falta A RECEBER.", vbInformation, Cabecalho
FtxtValorRecebido.SelStart = 0
FtxtValorRecebido.SelLength = Len(FtxtValorRecebido.text)
Exit Function
End If
End IfPergunta tem alguma função que diga se um valor é maior que outro?
Bem resolvi passando para double.
O problema é que todo o sistema trata dinheiro como Currency e eu achava que essa seria a melhor variavel para o caso, mas depois dessa estou preocupado com outros erros ridiculos como esse.
Alguém sabe o pq disso???
If CDbl(Format(ValorRecebido, pConsMoeda)) > Cdbl(Format(ValorTotal, pConsMoeda)) Then
MsgBox "Valor Recebido em " & CmbFormaPag.text & " não pode ser superior que falta A RECEBER.", vbInformation, Cabecalho
FtxtValorRecebido.SelStart = 0
FtxtValorRecebido.SelLength = Len(FtxtValorRecebido.text)
Exit Function
End If O problema é que todo o sistema trata dinheiro como Currency e eu achava que essa seria a melhor variavel para o caso, mas depois dessa estou preocupado com outros erros ridiculos como esse.
Alguém sabe o pq disso???
Contiuando com a saga....se colocar o codigo abaixo continua com o erro tosco.
ValorRecebido = CDbl(CCur(FtxtValorRecebido.text) + pObjECFControl.Venda.Balcao.ValorRecebido)
ValorTotal = CDbl(pObjECFControl.Venda.Balcao.ValorTotal)
If Format(ValorRecebido, pConsMoeda) > Format(ValorTotal, pConsMoeda) Then
MsgBox "Valor Recebido em " & CmbFormaPag.text & " não pode ser superior que falta A RECEBER.", vbInformation, Cabecalho
FtxtValorRecebido.SelStart = 0
FtxtValorRecebido.SelLength = Len(FtxtValorRecebido.text)
Exit Function
End If
ValorRecebido = CDbl(CCur(FtxtValorRecebido.text) + pObjECFControl.Venda.Balcao.ValorRecebido)
ValorTotal = CDbl(pObjECFControl.Venda.Balcao.ValorTotal)
If Format(ValorRecebido, pConsMoeda) > Format(ValorTotal, pConsMoeda) Then
MsgBox "Valor Recebido em " & CmbFormaPag.text & " não pode ser superior que falta A RECEBER.", vbInformation, Cabecalho
FtxtValorRecebido.SelStart = 0
FtxtValorRecebido.SelLength = Len(FtxtValorRecebido.text)
Exit Function
End If
Desculpa galera eu apertei Gravar topico duas vezes antes de acabar.....é que escutei muito hoje no cliente devido a esse erro.
Bem se colocar
Ele não faz a comparação de menor e maior direito.Mas colocando o Format junto com CDbl funciona
Bem se colocar
ValorRecebido = CDbl(CCur(FtxtValorRecebido.text) + pObjECFControl.Venda.Balcao.ValorRecebido)
ValorTotal = CDbl(pObjECFControl.Venda.Balcao.ValorTotal) Ele não faz a comparação de menor e maior direito.Mas colocando o Format junto com CDbl funciona
ValorRecebido = CDbl(Format(CCur(FtxtValorRecebido.text) + pObjECFControl.Venda.Balcao.ValorRecebido, pConsMoeda))
ValorTotal = cdbl(Format(pObjECFControl.Venda.Balcao.ValorTotal, pConsMoeda))
experimente isso,
num1 = "1.500,22" ou para num1 = 1500.36
num2 = "1.500,23"
if ccur(num1) > ccur(num2) then
.....................
else
...................
endif
num1 = "1.500,22" ou para num1 = 1500.36
num2 = "1.500,23"
if ccur(num1) > ccur(num2) then
.....................
else
...................
endif
Para Formatar moeda tente isso
Dim valor As Currency
Text1.Text = Format(Text1.Text, "###,##0.00")
valor = Text1.Text
Espero ter Ajudado
Dim valor As Currency
Text1.Text = Format(Text1.Text, "###,##0.00")
valor = Text1.Text
Espero ter Ajudado
Use nas operações CDbl, ao terminar a rotina format currency use
Ex: Tetx1=FormatNumber(Text1, 2, -2, -1, -1)
ou Text1=Format(Text1, "Currency"), verifique no help que número do FormatNumber se refere a Currency.
acho que existe, Tetx1=FormatCurrency(Text1, 2, -2, -1, -1)
um abraço, espero ter ajudado
Almir
Ex: Tetx1=FormatNumber(Text1, 2, -2, -1, -1)
ou Text1=Format(Text1, "Currency"), verifique no help que número do FormatNumber se refere a Currency.
acho que existe, Tetx1=FormatCurrency(Text1, 2, -2, -1, -1)
um abraço, espero ter ajudado
Almir
Bem LEOPOLDOARJ essa solução resolve o problema na comparação do > e <, mas não resolve totalmente o meu problema. Exemplo caso o item vendido seja comida a quilo gera valor quebrado do tipo 9,653 com 3 casas decimais. E no valor recebido nunca vai gerar com 3 casas decimais. então quando lanço no pagamento 9,65 ele compara com 9,653 e informa que ainda falta para completar o valor, não deixando fechar a conta.
Como esse problema já tinha visto antes então usando o Format resolve, por isso coloquei o Format na comparação do >. Mas para a minha surpresa ao receber valores decimais ele não efetua a comparação corretamente.
Por fim, como o valor dos produtos vendidos é gerado por uma propriedade de uma classe eu usei o format nessa propriedade o que arredonda o valor resolvendo o problema das 3 casas decimais. E na comparação usei variaveis currency o que resolveu o problema.
PRINAYLOR não testei a sua solução, mas o que seriam esses valores nos parametros do Format?
Como esse problema já tinha visto antes então usando o Format resolve, por isso coloquei o Format na comparação do >. Mas para a minha surpresa ao receber valores decimais ele não efetua a comparação corretamente.
Por fim, como o valor dos produtos vendidos é gerado por uma propriedade de uma classe eu usei o format nessa propriedade o que arredonda o valor resolvendo o problema das 3 casas decimais. E na comparação usei variaveis currency o que resolveu o problema.
PRINAYLOR não testei a sua solução, mas o que seriam esses valores nos parametros do Format?
Tópico encerrado , respostas não são mais permitidas