Delphi Aumentando Valor
Prezado Senhores
Estou com um problema em alguns clientes. Quando o cliente faz uma venda com valor de 10.20 centavos na gravação no banco (firebird) fica assim 1020.00. Como se ele estivesse multiplicando por 100.00. Isso acontece algumas vezes em alguns clientes.
Isto começou a acontecer a tres meses.
Use delphi7 e firebird.
O que pode ser ?
Grato
Marcos Roberto
Estou com um problema em alguns clientes. Quando o cliente faz uma venda com valor de 10.20 centavos na gravação no banco (firebird) fica assim 1020.00. Como se ele estivesse multiplicando por 100.00. Isso acontece algumas vezes em alguns clientes.
Isto começou a acontecer a tres meses.
Use delphi7 e firebird.
O que pode ser ?
Grato
Marcos Roberto
Marcosrodias
Curtidas 0
Respostas
Edilcimar
09/02/2006
aí vc tem que mostrar o procedimento de venda e gravação dos dados de venda para procurar o erro
GOSTEI 0
Marcosrodias
09/02/2006
Pronto Vai
Ai os valores estão na variavel frVenFechaVenda.rPrCartao e nas outras seguntes. Geralmente grava essa variável errada mas acontece com as outras tambem.
São Variavies Privadas.
dsTabela.IBQVendaTotal.Close ;
dsTabela.IBQVendaTotal.SQL.Clear ;
dsTabela.IBQVendaTotal.SQL.Add(´Insert Into Venda_Total´) ;
dsTabela.IBQVendaTotal.SQL.Add(´(Numero_Venda, Codigo_Filial, Codigo_Serie, Codigo_Cliente, Cupom_Fiscal,´+
´ Codigo_Usuario, Data, Situacao, Valor_Total, Valor_Liquido, Valor_Troca,´+
´ Valor_Desconto, Percentual_Desconto, Valor_Acrescimo, Percentual_Acrescimo,´+
´ Pago_Dinheiro, Pago_Cartao, Pago_Cheque, Pago_Cheque_Pre, Pago_Crediario,´);
If (frVenParametro.bprNotaFiscal) And (gsTipoVenda = ´Venda´) Then
Begin
dsTabela.IBQVendaTotal.SQL.Add(´ Pago_Ticket, Pago_Faturada, Pago_Convenio, Pago_Outros, Obs, Valor_Arredonda, Flag,´+
´ Cfop, Codigo_Transportador, Valor_Frete, Valor_Seguro, Valor_Despesas)´);
End
Else
Begin
dsTabela.IBQVendaTotal.SQL.Add(´ Cfop, Pago_Ticket, Pago_Faturada, Pago_Convenio, Pago_Outros, Obs, Valor_Arredonda, Flag)´);
End;
dsTabela.IBQVendaTotal.SQL.Add(´Values´+
´(:Numero_Venda, :Codigo_Filial, :Codigo_Serie, :Codigo_Cliente, :Cupom_Fiscal,´+
´ :Codigo_Usuario, :Data, :Situacao, :Valor_Total, :Valor_Liquido, :Valor_Troca,´+
´ :Valor_Desconto, :Percentual_Desconto, :Valor_Acrescimo, :Percentual_Acrescimo,´+
´ :Pago_Dinheiro, :Pago_Cartao, :Pago_Cheque, :Pago_Cheque_Pre, :Pago_Crediario,´);
If (frVenParametro.bprNotaFiscal) And (gsTipoVenda = ´Venda´) Then
Begin
dsTabela.IBQVendaTotal.SQL.Add(´ :Pago_Ticket, :Pago_Faturada, :Pago_Convenio, :Pago_Outros, :Obs, :Valor_Arredonda, :Flag,´+
´ :Cfop, :Codigo_Transportador, :Valor_Frete, :Valor_Seguro, :Valor_Despesas)´);
End
Else
Begin
dsTabela.IBQVendaTotal.SQL.Add(´ :Cfop, :Pago_Ticket, :Pago_Faturada, :Pago_Convenio, :Pago_Outros, :Obs, :Valor_Arredonda, :Flag)´);
End;
dsTabela.IBQVendaTotal.ParamByName(´Numero_Venda´).AsInteger := iNumeroVenda ;
dsTabela.IBQVendaTotal.ParamByName(´Codigo_Filial´).AsInteger := iFilial ;
dsTabela.IBQVendaTotal.ParamByName(´Codigo_Serie´).AsInteger := iSerie ;
dsTabela.IBQVendaTotal.ParamByName(´Codigo_Cliente´).AsInteger := frVenOrcamento.pbCliente.AsInteger ;
dsTabela.IBQVendaTotal.ParamByName(´Cupom_Fiscal´).AsInteger := 0 ;
dsTabela.IBQVendaTotal.ParamByName(´Codigo_Usuario´).AsInteger := giCodigoUsuario ;
If frVenParametro.bPuSeFormularioContinuo Then
dsTabela.IBQVendaTotal.ParamByName(´Data´).AsString := gsDataPadrao
Else
dsTabela.IBQVendaTotal.ParamByName(´Data´).AsString := frVenNotaTalao.meDataVenda.Text ;
dsTabela.IBQVendaTotal.ParamByName(´Situacao´).AsString := ´E´ ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Total´).AsFloat := frVenFechaVenda.pbTotalVenda.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Liquido´).AsFloat := frVenFechaVenda.pbTotalLiquido.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Troca´).AsFloat := frVenOrcamento.pbTroca.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Desconto´).AsFloat := ArredondaValor(frVenFechaVenda.rPrDesconto,2) ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Acrescimo´).AsFloat := ArredondaValor(frVenFechaVenda.rPrAcrescimo,2);
dsTabela.IBQVendaTotal.ParamByName(´Percentual_Acrescimo´).AsFloat := ArredondaValor(frVenFechaVenda.rPrPercAcrescimo,2) ;
dsTabela.IBQVendaTotal.ParamByName(´Percentual_Desconto´).AsFloat := ArredondaValor(frVenFechaVenda.rPrPercDesconto,2) ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Dinheiro´).AsFloat := frVenFechaVenda.rPrDinheiro - frVenFechaVenda.pbFalta.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Cartao´).AsFloat := frVenFechaVenda.rPrCartao ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Cheque´).AsFloat := frVenFechaVenda.rPrCheque ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Cheque_Pre´).AsFloat := frVenFechaVenda.rPrChequePre ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Crediario´).AsFloat := frVenFechaVenda.rPrCrediario ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Ticket´).AsFloat := frVenFechaVenda.rPrTicket ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Faturada´).AsFloat := frVenFechaVenda.rPrFaturado ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Convenio´).AsFloat := frVenFechaVenda.rPrConvenio ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Outros´).AsFloat := frVenFechaVenda.rPrOutros ;
dsTabela.IBQVendaTotal.ParamByName(´Obs´).AsString := gsObs ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Arredonda´).AsFloat := frVenFechaVenda.rPrArredonda ;
dsTabela.IBQVendaTotal.ParamByName(´Flag´).AsString := ´ ´ ;
If (frVenParametro.bprNotaFiscal) And (gsTipoVenda = ´Venda´) Then
Begin
ConsultaCFOP(frVenOrcamento.iPuNaturezaTmp) ;
dsTabela.IBQVendaTotal.ParamByName(´Cfop´).AsFloat := dsTabela.IBQCfopVALOR.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Codigo_Transportador´).AsInteger := frVenNotaFinal.pbTransportador.AsInteger ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Frete´).AsFloat := frVenNotaFinal.pbFrete.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Seguro´).AsFloat := frVenNotaFinal.pbSeguro.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Despesas´).AsFloat := frVenNotaFinal.pbDespesas.AsFloat ;
End
Else
Begin
dsTabela.IBQVendaTotal.ParamByName(´Cfop´).AsFloat := 5.101 ;
End;
dsTabela.IBQVendaTotal.ExecSQL ;
Ai os valores estão na variavel frVenFechaVenda.rPrCartao e nas outras seguntes. Geralmente grava essa variável errada mas acontece com as outras tambem.
São Variavies Privadas.
dsTabela.IBQVendaTotal.Close ;
dsTabela.IBQVendaTotal.SQL.Clear ;
dsTabela.IBQVendaTotal.SQL.Add(´Insert Into Venda_Total´) ;
dsTabela.IBQVendaTotal.SQL.Add(´(Numero_Venda, Codigo_Filial, Codigo_Serie, Codigo_Cliente, Cupom_Fiscal,´+
´ Codigo_Usuario, Data, Situacao, Valor_Total, Valor_Liquido, Valor_Troca,´+
´ Valor_Desconto, Percentual_Desconto, Valor_Acrescimo, Percentual_Acrescimo,´+
´ Pago_Dinheiro, Pago_Cartao, Pago_Cheque, Pago_Cheque_Pre, Pago_Crediario,´);
If (frVenParametro.bprNotaFiscal) And (gsTipoVenda = ´Venda´) Then
Begin
dsTabela.IBQVendaTotal.SQL.Add(´ Pago_Ticket, Pago_Faturada, Pago_Convenio, Pago_Outros, Obs, Valor_Arredonda, Flag,´+
´ Cfop, Codigo_Transportador, Valor_Frete, Valor_Seguro, Valor_Despesas)´);
End
Else
Begin
dsTabela.IBQVendaTotal.SQL.Add(´ Cfop, Pago_Ticket, Pago_Faturada, Pago_Convenio, Pago_Outros, Obs, Valor_Arredonda, Flag)´);
End;
dsTabela.IBQVendaTotal.SQL.Add(´Values´+
´(:Numero_Venda, :Codigo_Filial, :Codigo_Serie, :Codigo_Cliente, :Cupom_Fiscal,´+
´ :Codigo_Usuario, :Data, :Situacao, :Valor_Total, :Valor_Liquido, :Valor_Troca,´+
´ :Valor_Desconto, :Percentual_Desconto, :Valor_Acrescimo, :Percentual_Acrescimo,´+
´ :Pago_Dinheiro, :Pago_Cartao, :Pago_Cheque, :Pago_Cheque_Pre, :Pago_Crediario,´);
If (frVenParametro.bprNotaFiscal) And (gsTipoVenda = ´Venda´) Then
Begin
dsTabela.IBQVendaTotal.SQL.Add(´ :Pago_Ticket, :Pago_Faturada, :Pago_Convenio, :Pago_Outros, :Obs, :Valor_Arredonda, :Flag,´+
´ :Cfop, :Codigo_Transportador, :Valor_Frete, :Valor_Seguro, :Valor_Despesas)´);
End
Else
Begin
dsTabela.IBQVendaTotal.SQL.Add(´ :Cfop, :Pago_Ticket, :Pago_Faturada, :Pago_Convenio, :Pago_Outros, :Obs, :Valor_Arredonda, :Flag)´);
End;
dsTabela.IBQVendaTotal.ParamByName(´Numero_Venda´).AsInteger := iNumeroVenda ;
dsTabela.IBQVendaTotal.ParamByName(´Codigo_Filial´).AsInteger := iFilial ;
dsTabela.IBQVendaTotal.ParamByName(´Codigo_Serie´).AsInteger := iSerie ;
dsTabela.IBQVendaTotal.ParamByName(´Codigo_Cliente´).AsInteger := frVenOrcamento.pbCliente.AsInteger ;
dsTabela.IBQVendaTotal.ParamByName(´Cupom_Fiscal´).AsInteger := 0 ;
dsTabela.IBQVendaTotal.ParamByName(´Codigo_Usuario´).AsInteger := giCodigoUsuario ;
If frVenParametro.bPuSeFormularioContinuo Then
dsTabela.IBQVendaTotal.ParamByName(´Data´).AsString := gsDataPadrao
Else
dsTabela.IBQVendaTotal.ParamByName(´Data´).AsString := frVenNotaTalao.meDataVenda.Text ;
dsTabela.IBQVendaTotal.ParamByName(´Situacao´).AsString := ´E´ ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Total´).AsFloat := frVenFechaVenda.pbTotalVenda.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Liquido´).AsFloat := frVenFechaVenda.pbTotalLiquido.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Troca´).AsFloat := frVenOrcamento.pbTroca.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Desconto´).AsFloat := ArredondaValor(frVenFechaVenda.rPrDesconto,2) ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Acrescimo´).AsFloat := ArredondaValor(frVenFechaVenda.rPrAcrescimo,2);
dsTabela.IBQVendaTotal.ParamByName(´Percentual_Acrescimo´).AsFloat := ArredondaValor(frVenFechaVenda.rPrPercAcrescimo,2) ;
dsTabela.IBQVendaTotal.ParamByName(´Percentual_Desconto´).AsFloat := ArredondaValor(frVenFechaVenda.rPrPercDesconto,2) ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Dinheiro´).AsFloat := frVenFechaVenda.rPrDinheiro - frVenFechaVenda.pbFalta.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Cartao´).AsFloat := frVenFechaVenda.rPrCartao ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Cheque´).AsFloat := frVenFechaVenda.rPrCheque ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Cheque_Pre´).AsFloat := frVenFechaVenda.rPrChequePre ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Crediario´).AsFloat := frVenFechaVenda.rPrCrediario ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Ticket´).AsFloat := frVenFechaVenda.rPrTicket ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Faturada´).AsFloat := frVenFechaVenda.rPrFaturado ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Convenio´).AsFloat := frVenFechaVenda.rPrConvenio ;
dsTabela.IBQVendaTotal.ParamByName(´Pago_Outros´).AsFloat := frVenFechaVenda.rPrOutros ;
dsTabela.IBQVendaTotal.ParamByName(´Obs´).AsString := gsObs ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Arredonda´).AsFloat := frVenFechaVenda.rPrArredonda ;
dsTabela.IBQVendaTotal.ParamByName(´Flag´).AsString := ´ ´ ;
If (frVenParametro.bprNotaFiscal) And (gsTipoVenda = ´Venda´) Then
Begin
ConsultaCFOP(frVenOrcamento.iPuNaturezaTmp) ;
dsTabela.IBQVendaTotal.ParamByName(´Cfop´).AsFloat := dsTabela.IBQCfopVALOR.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Codigo_Transportador´).AsInteger := frVenNotaFinal.pbTransportador.AsInteger ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Frete´).AsFloat := frVenNotaFinal.pbFrete.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Seguro´).AsFloat := frVenNotaFinal.pbSeguro.AsFloat ;
dsTabela.IBQVendaTotal.ParamByName(´Valor_Despesas´).AsFloat := frVenNotaFinal.pbDespesas.AsFloat ;
End
Else
Begin
dsTabela.IBQVendaTotal.ParamByName(´Cfop´).AsFloat := 5.101 ;
End;
dsTabela.IBQVendaTotal.ExecSQL ;
GOSTEI 0
Edilcimar
09/02/2006
onde estão as contas que pegam o valor pago, tipo
valorpago := insttostr(edit1.text) -> esta seria a conta onde o string é transformado na variável que está dando erro, caso a mesma seja pega de contas em que o valor desconto, parte do pagamento em dinheiro, cheque, cartão ou outros também tem que ser verificado
valorpago := insttostr(edit1.text) -> esta seria a conta onde o string é transformado na variável que está dando erro, caso a mesma seja pega de contas em que o valor desconto, parte do pagamento em dinheiro, cheque, cartão ou outros também tem que ser verificado
GOSTEI 0
Marcosrodias
09/02/2006
Ola
E muito obrigado por esta me ajudando.
Para carregas as varíaveis faço o seguinte.
--> frVenFechaVenda.rPrDinheiro := frVenFechaVenda.pbValor.AsFloat ;
Isto para todas as quase todas as variávies porque algumas carrego do componente pbnumedit onde fica armazendado os valores. Veja abaixo.
frVenFechaVenda.pbTotalVenda.AsFloat := (frVenFechaVenda.rPrDinheiro + frVenFechaVenda.rPrCartao + frVenFechaVenda.rPrCheque + frVenFechaVenda.rPrChequePre +
frVenFechaVenda.rPrCrediario + frVenFechaVenda.rPrTicket + frVenFechaVenda.rPrFaturado + frVenFechaVenda.rPrConvenio +
frVenFechaVenda.rPrOutros) ;
Nunca tive problema com esse componente. Voce pode observar que na verdade eu pegos os valores do pbnumedit e carrego nas variaveis. Me parece que o problema tá exatamente ai. Segundo os clientes na tela os valores aparecem correto mas quando grava no banco acontece a situacao que informei anteriormente. Isto é no mes acontece 3 ou 4 vezes. Não conseguir simular isso de jeito nehum. O pessoal acredito que tem a ver com configuraçção regional do windows mas isso é muito esquisito.
Um abraço
Marcos
Obrigado
E muito obrigado por esta me ajudando.
Para carregas as varíaveis faço o seguinte.
--> frVenFechaVenda.rPrDinheiro := frVenFechaVenda.pbValor.AsFloat ;
Isto para todas as quase todas as variávies porque algumas carrego do componente pbnumedit onde fica armazendado os valores. Veja abaixo.
frVenFechaVenda.pbTotalVenda.AsFloat := (frVenFechaVenda.rPrDinheiro + frVenFechaVenda.rPrCartao + frVenFechaVenda.rPrCheque + frVenFechaVenda.rPrChequePre +
frVenFechaVenda.rPrCrediario + frVenFechaVenda.rPrTicket + frVenFechaVenda.rPrFaturado + frVenFechaVenda.rPrConvenio +
frVenFechaVenda.rPrOutros) ;
Nunca tive problema com esse componente. Voce pode observar que na verdade eu pegos os valores do pbnumedit e carrego nas variaveis. Me parece que o problema tá exatamente ai. Segundo os clientes na tela os valores aparecem correto mas quando grava no banco acontece a situacao que informei anteriormente. Isto é no mes acontece 3 ou 4 vezes. Não conseguir simular isso de jeito nehum. O pessoal acredito que tem a ver com configuraçção regional do windows mas isso é muito esquisito.
Um abraço
Marcos
Obrigado
GOSTEI 0
Edilcimar
09/02/2006
pode ser, se a pessoa trocar as configurações regionais vai dar problema entre ponto e vírgula, pois a coisa vai ficar multiplicada por 100
GOSTEI 0
Marcosrodias
09/02/2006
Na minha aplicação ao iniciar eu uso o seguinte
ThousandSeparator := ´,´ ;
DecimalSeparator :=´.´;
Será que o delphi está se perdendo ?
Marcos
ThousandSeparator := ´,´ ;
DecimalSeparator :=´.´;
Será que o delphi está se perdendo ?
Marcos
GOSTEI 0
Cabelo
09/02/2006
Na minha aplicação ao iniciar eu uso o seguinte
ThousandSeparator := ´,´ ;
DecimalSeparator :=´.´;
Será que o delphi está se perdendo ?
Marcos
marcos...
utilize as funções antes de gravar... onde vc dá um commit no banco..
GOSTEI 0
Edilcimar
09/02/2006
eu também uso o decimalseparator no início da aplicação e nunca tive problema
GOSTEI 0