Delphi Aumentando Valor

09/02/2006

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


Marcosrodias

Respostas

09/02/2006

Edilcimar

aí vc tem que mostrar o procedimento de venda e gravação dos dados de venda para procurar o erro


Responder Citar

09/02/2006

Marcosrodias

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 ;


Responder Citar

09/02/2006

Edilcimar

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


Responder Citar

09/02/2006

Marcosrodias

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


Responder Citar

09/02/2006

Edilcimar

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


Responder Citar

09/02/2006

Marcosrodias

Na minha aplicação ao iniciar eu uso o seguinte

ThousandSeparator := ´,´ ;
DecimalSeparator :=´.´;

Será que o delphi está se perdendo ?

Marcos


Responder Citar

09/02/2006

Cabelo

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..


Responder Citar

09/02/2006

Edilcimar

eu também uso o decimalseparator no início da aplicação e nunca tive problema


Responder Citar