Sistema Travando
09/01/2010
0
Quando efetuo uma venda em meu sistema ele funciona nomal mas quando vou feichar a venda o sistema ocupa entre 85 a 99% da CPU e trava e o sistema nao fazia isso e agora eu voutei um backup da primeira versao do frente de caixa e continua fazendo a mesma coisa ja mudei tudo e continua a mesma coisa sempre quando vou finalizar a venda ele trava... deletei as dll ele funcionou durante um dia mas depois voutou a dar o mesmo problema uso as dll da bematech, elpson, daruma e elgin para o sistema...
Formatei o meu pc achando que era virus mas pelo jeito nao é...
alguemtem alguma ideia doque pode ser pois as minhas ja se esgotarao....
estou usando o delphi 2006 + firebird 2.1
Laelson Fagundes
Posts
11/01/2010
Pjrm1470
17/01/2010
Laelson Fagundes
pois o sistema trava quando eu finalizando o pagamento...
gosataria de uma dica de como posso substituir esse loop ou parar ele para nao acontecer oq esta acontecendo no sistema...
==================================================================================================================== if not Orcamento then
begin
repeat
vValorPago := 0;
vValorDinheiro := 0;
vValorCheque := 0;
vValorCartao := 0;
fm_pagamentos := Tfm_pagamentos.Create(Application);
try
{$REGION 'Configura Edits que ficarão habilitado na tela de pagamento de acrodo com a forma de pagamento selecionada'}
fm_pagamentos.lbl_dinheiro.Enabled := (i_Tipo in [2,6,10,14]) or (i_SolicitaEntrada = 1) or ((i_Tipo = 16) and (i_SolicitaEntrada = 1));
fm_pagamentos.edt_dinheiro.Enabled := (i_Tipo in [2,6,10,14]) or (i_SolicitaEntrada = 1) or ((i_Tipo = 16) and (i_SolicitaEntrada = 1));
fm_pagamentos.lbl_cheque.Enabled := (i_Tipo in [4,6,12,14]) or ((i_Tipo = 16) and (i_SolicitaEntrada = 1));
fm_pagamentos.edt_cheque.Enabled := (i_Tipo in [4,6,12,14]) or ((i_Tipo = 16) and (i_SolicitaEntrada = 1));
fm_pagamentos.lbl_cartao.Enabled := (i_Tipo in [8,10,12,14]) or ((i_Tipo = 16) and (i_SolicitaEntrada = 1));
fm_pagamentos.edt_cartao.Enabled := (i_Tipo in [8,10,12,14]) or ((i_Tipo = 16) and (i_SolicitaEntrada = 1));
{$ENDREGION 'Configura Edits que ficarão habilitado na tela de pagamento de acrodo com a forma de pagamento selecionada'}
fTroco := (vValorDinheiro+vValorCartao+vValorCheque)-fTotalPagar;
fm_pagamentos.lbl_restante.Caption := FormatFloat('###,###,###,##0.00',fTroco);
fm_pagamentos.lbl_desconto.Caption := FormatFloat('###,###,###,##0.00',fDesconto);
fm_pagamentos.lbl_total_pagar.Caption := FormatFloat('###,###,###,##0.00',fTotalPagar);
if (i_Tipo in [2,4,6,8,10,12,14]) or ((i_Tipo = 16) and (i_SolicitaEntrada = 1)) then
begin
if fm_pagamentos.ShowModal = mrOk then
begin
vValorDinheiro := StrToFloat(fm_pagamentos.edt_dinheiro.Text);
vValorCheque := StrToFloat(fm_pagamentos.edt_cheque.Text);
vValorCartao := StrToFloat(fm_pagamentos.edt_cartao.Text);
vValorPago := (vValorDinheiro + vValorCheque + vValorCartao);
end
else
begin
SetarValorPadrao;
JBMensagem('Ação cancelada!, para fechar a venda/orçamento pressione F2 novamente.');
Exit;
end;
end;
finally
FreeAndNil(fm_pagamentos);
end;// try;
if ((i_Tipo = 16) and (i_SolicitaEntrada = 1)) then
vVAlorEntrada := vValorDinheiro + vValorCheque + vValorCartao
else if i_AvistaAprazo = 1 then
vVAlorEntrada := vValorDinheiro
else
vVAlorEntrada := vValorDinheiro + vValorCheque + vValorCartao;
if vVAlorEntrada >= fTotalPagar then
vVAlorEntrada := fTotalPagar;
if (i_AvistaAprazo = 0) and (i_Tipo in [2,4,6,8,10,12,14]) then
if StrToFloat(FormatFloat('##0.00', vValorPago)) < StrToFloat(FormatFloat('##0.00', fTotalPagar)) then
JBMensagem('O valor a ser pago não pode ser menor que o valor total a pagar!');
until (vValorPago >= fTotalPagar) or (i_Tipo = 16);
end;
18/01/2010
Emerson Nascimento
begin
vValorPago := 0;
vValorDinheiro := 0;
vValorCheque := 0;
vValorCartao := 0;
repeat
fm_pagamentos := Tfm_pagamentos.Create(Application);
try
{$REGION 'Configura Edits que ficarão habilitado na tela de pagamento de acrodo com a forma de pagamento selecionada'}
fm_pagamentos.lbl_dinheiro.Enabled := (i_Tipo in [2,6,10,14]) or (i_SolicitaEntrada = 1) or ((i_Tipo = 16) and (i_SolicitaEntrada = 1));
fm_pagamentos.edt_dinheiro.Enabled := fm_pagamentos.lbl_dinheiro.Enabled;
fm_pagamentos.edt_dinheiro.text := FormatFloat('###,###,###,##0.00', vValorDinheiro);
fm_pagamentos.lbl_cheque.Enabled := (i_Tipo in [4,6,12,14]) or ((i_Tipo = 16) and (i_SolicitaEntrada = 1));
fm_pagamentos.edt_cheque.Enabled := fm_pagamentos.lbl_cheque.Enabled;
fm_pagamentos.edt_cheque.text := FormatFloat('###,###,###,##0.00', vValorCheque);
fm_pagamentos.lbl_cartao.Enabled := (i_Tipo in [8,10,12,14]) or ((i_Tipo = 16) and (i_SolicitaEntrada = 1));
fm_pagamentos.edt_cartao.Enabled := fm_pagamentos.lbl_cartao.Enabled;
fm_pagamentos.edt_cartao.text := FormatFloat('###,###,###,##0.00', vValorCartao);
{$ENDREGION 'Configura Edits que ficarão habilitado na tela de pagamento de acrodo com a forma de pagamento selecionada'}
fTroco := (vValorDinheiro+vValorCartao+vValorCheque)-fTotalPagar;
fm_pagamentos.lbl_restante.Caption := FormatFloat('###,###,###,##0.00',fTroco);
fm_pagamentos.lbl_desconto.Caption := FormatFloat('###,###,###,##0.00',fDesconto);
fm_pagamentos.lbl_total_pagar.Caption := FormatFloat('###,###,###,##0.00',fTotalPagar);
if (i_Tipo in [2,4,6,8,10,12,14]) or ((i_Tipo = 16) and (i_SolicitaEntrada = 1)) then
begin
if fm_pagamentos.ShowModal = mrOk then
begin
vValorDinheiro := StrToFloat(fm_pagamentos.edt_dinheiro.Text);
vValorCheque := StrToFloat(fm_pagamentos.edt_cheque.Text);
vValorCartao := StrToFloat(fm_pagamentos.edt_cartao.Text);
vValorPago := (vValorDinheiro + vValorCheque + vValorCartao);
end
else
begin
SetarValorPadrao;
JBMensagem('Ação cancelada!, para fechar a venda/orçamento pressione F2 novamente.');
FreeAndNil(fm_pagamentos);
Exit;
end;
end;
finally
FreeAndNil(fm_pagamentos);
end;// try;
if ((i_Tipo = 16) and (i_SolicitaEntrada = 1)) then
vVAlorEntrada := vValorDinheiro + vValorCheque + vValorCartao
else if i_AvistaAprazo = 1 then
vVAlorEntrada := vValorDinheiro
else
vVAlorEntrada := vValorDinheiro + vValorCheque + vValorCartao;
if vVAlorEntrada >= fTotalPagar then
vVAlorEntrada := fTotalPagar;
if (i_AvistaAprazo = 0) and (i_Tipo in [2,4,6,8,10,12,14]) and (vValorPago < fTotalPagar) then
JBMensagem('O valor a ser pago não pode ser menor que o valor total a pagar!');
until (vValorPago >= fTotalPagar) or (i_Tipo = 16);
end;
verifique as linhas em negrito:
- se o if..then não for atendido (se é que há essa possibilidade), quem preenche o valor de vValorPago?
- a rotina SetarValorPadrao preenche vValorPago?
ao que parece essa variável não está sendo incrementada.
18/01/2010
Pjrm1470
((i_Tipo = 16) and
(i_SolicitaEntrada = 1)) then e: until (vValorPago >= fTotalPagar) or (i_Tipo = 16); O que me leva a pensar que esse loop ta na cara que vai ser infinito. Tem a possibilidade de sua variável ter valores [2,4,6,8,10,12,14] e so sai do loop se for atender um 16. "Há algo de podre no reino da dinamarca", Não acha!? se o tipo não for 16 e a outra condição do Until não atender vai sempre repetir. Antes de tudo, você debugou para ver aonde ta travando? (com F8 e principalmente com F7) Aguardo, pjrm1470.
19/01/2010
Laelson Fagundes
until (vValorPago >= fTotalPagar) or (i_Tipo = 16);
não estou sabendo terminar essa função eu queria sair do loop como vc falou uam função mais limpa e que faça a mesma coisa q a outra função
20/01/2010
Laelson Fagundes
20/01/2010
Laelson Fagundes
sera q poderia m dar uma forcinha aqui com o codigo q eu postei aqui no forum...
Clique aqui para fazer login e interagir na Comunidade :)