Array
(
)

Delphi Aumentando Valor

Marcosrodias
   - 09 fev 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


Edilcimar
   - 09 fev 2006

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


Marcosrodias
   - 09 fev 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 ;


Edilcimar
   - 09 fev 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


Marcosrodias
   - 09 fev 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


Edilcimar
   - 09 fev 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


Marcosrodias
   - 09 fev 2006

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

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

Será que o delphi está se perdendo ?

Marcos


Cabelo
   - 09 fev 2006


Citação:
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..


Edilcimar
   - 09 fev 2006

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