|
Postada em 10/12/2005 10:10 hs
alguem pode dar uma olhada nessa rotina em anexo e me ajudar a corrigir o erro...
em minha tela de vendas... quando insiro um valor,fracionado ele entra normalmente... se eu for fechar a venda ta tudo certo, mas se eu colocar outro item na lista de compra o primeiro valor, passa pra inteiro, e acontece tb depois do segunto... e ai vai ou seja a cada item que adiciono ele arredonda o anterior... trecho do calculo Private Sub btnCompute_Click() a = Val(txtAmount.Text) * Val(txtDiscount.Text) b = CCur(txtAmount.Text) - a txtAmount.Text = b If IsNumeric(txtAmount.Text) = False Then txtAmount.Text = "0,00" If IsNumeric(txtDiscount.Text) = False Then txtDiscount.Text = "0,00" If IsNumeric(txtPayments.Text) = False Then txtPayments.Text = "0,00" a = CCur(txtAmount.Text) * CCur(txtDiscount.Text) b = CCur(txtAmount.Text) - a txtAmount.Text = b If CCur(txtPayments.Text) < CCur(txtAmount.Text) Then MsgBox "Dinheiro Insuficiente " & Chr(10) & "Por favor altere o valor " & Chr(10) & "that is greater than or equal " & StrConv(txtAmount, vbUpperCase), vbOKOnly + vbInformation, "Insuficiente" txtAmount.Text = CStr(Format(ComputeAmount, "########0.00")) Else If CCur(txtDiscount.Text) < CCur(txtAmount.Text) Then bayad = CCur(txtPayments.Text) sukli = bayad - CCur(txtAmount.Text) txtChange.Text = CStr(Format(sukli, "##,####0.00")) txtAmount.Text = CStr(Format(txtAmount.Text, "##,####0.00")) txtPayments.Text = CStr(Format(txtPayments.Text, "##,####0.00")) btnSave.Enabled = True txtPayments.locked = True btnCompute.Enabled = False btnSave.SetFocus txtDiscount.locked = True Else MsgBox "O desconto deverá ser menor que " & vbCrLf & " o total ", vbExclamation, "Desconto" End If End If txtPayments.SetFocus End Sub
|
|
|
|
|
Postada em 10/12/2005 14:59 hs
Exponha o código onde você dimensiona as variáveis A e B de seu código. Se elas são dimensionadas de forma implícita (sem o Dim variável as Tipo), elas estão sendo criadas como Variant e, nesse caso, passar á ser do tipo assumido pelo resultado da primeira operação (A é um Integer e B um Double para Currency). Decorrente disso, quaisquer cálculos envolvendo os dois tipos, que são diferentes, resultará em um inteiro. No início da rotina, faça: Dim A as Double Dim B as Double Em seguida substitua a instrução: a = Val(txtAmount.Text) * Val(txtDiscount.Text) Por: a = NVL(txtAmount.Text,0) * NVL(txtDiscount.Text,0) E para finalizar, crie a função NVL, mais ou menos parecida com: Public Function NVL(ByVal Valor as Variant, Optional ByVal Padrão as Variant = "") as Variant Dim vRet as Variant vRet = Valor If IsNull(Valor) = True Then vRet = Padrão Else If Valor = Empty Then vRet = Padrão End If NVL = vRet vRet = Empty End Function A função NVL tem por finalidade trazer algum dado válido para campos nulos e/ou controles que possam nem sempre os conter. Assim, para trazer sempre o valor "0" desde um TextBox, mesmo que este não tenha sido preenchido, basta usá-la.
|
|
|
|
Postada em 12/12/2005 12:27 hs
OBRIGADO... PELA AJUDA... AGORA SE POSSIVEL GOSTARIA DE QUE ME AJUDASSE A CRIAR UMA IMPRESSÃO DA VENDA... USANDO O PRINTER...
|
|
|
|