Fórum Entrando em Loop Infinito - a 1ª vista está correto #333537
23/11/2006
0
procedure TFCadPedido.DBRG4Click(Sender: TObject); begin DMDados.TCadPedido2.First; while not DMDados.TCadPedido2.Eof do begin if DBRG4.ItemIndex = 0 then begin DMDados.TCadPedido.Edit; DMDados.TCadPedidoTipoPreco.Value := ´V´; DMDados.TCadPedido2.Edit; if IsProdPromocao( DMDados.TCadPedido2Cod_Prod.Value ) then DMDados.TCadPedido2VlrUnit.Value := ValorPromocao( DMDados.TCadPedido2Cod_Prod.Value ) else DMDados.TCadPedido2VlrUnit.Value := ValorVista( DMDados.TCadPedido2Cod_Prod.Value ); end else if DBRG4.ItemIndex = 1 then begin DMDados.TCadPedido.Edit; DMDados.TCadPedidoTipoPreco.Value := ´P´; DMDados.TCadPedido2.Edit; if IsProdPromocao( DMDados.TCadPedido2Cod_Prod.Value ) then DMDados.TCadPedido2VlrUnit.Value := ValorPromocao( DMDados.TCadPedido2Cod_Prod.Value ) else DMDados.TCadPedido2VlrUnit.Value := ValorPrazo( DMDados.TCadPedido2Cod_Prod.Value ); end; DMDados.TCadPedido2.Next; end; end;
Desde já agradeço a atenção
Facc
Curtir tópico
+ 0Posts
23/11/2006
Facc
outra coisa... ele fica preso no ultimo registro, como se o [b:06d6367531]NEXT[/b:06d6367531] não estivesse funcionando.
Gostei + 0
23/11/2006
Titanius
[]s
Gostei + 0
23/11/2006
Facc
Tem sim... Como posso resolver?
Gostei + 0
23/11/2006
Titanius
Com certeza, lá no onCalc vc deve estar dando um edit, ou um while, correto?
Se for, voce cria um variavel booleana global na unit, e quando vc for dar o while mostrado aqui, vc seta tal variavel como True.
No OnCalcField, vc poe no inicio de tudo um
if VARIAVEL then Exit;
assim, quando ele estiver no while ele nao processa o OnCalc...
[]s
Gostei + 0
23/11/2006
Facc
Olhe o código que está no OnCalc...
procedure TDMDados.TCadPedido2CalcFields(DataSet: TDataSet); begin if FPrincipal.bAcertaPreco then // a Variavel Global tipo boolean exit; if DMDados.TCadConfigCadMoeda.Value=´S´ then // usa moedas begin if (TCadPedido2MoedaProd.Value = TCadPedidoMoeda.Value) then // moeda do produto = a da venda TCadPedido2VlrConvertido_Calc.Value:=TCadPedido2VlrUnit.Value else if (TCadPedido2MoedaProd.Value <> TCadPedidoMoeda.Value) then begin if (DMDados.TCadConfigMoedaPad.Value=TCadPedidoMoeda.Value) and (TCadPedido2MoedaProd.Value<>TCadPedidoMoeda.Value) then TCadPedido2VlrConvertido_Calc.Value:=TCadPedido2VlrUnit.Value*TCadPedido2VlrCotacao.Value else if (DMDados.TCadConfigMoedaPad.Value=TCadPedidoMoeda.Value) and (TCadPedido2MoedaProd.Value=TCadPedidoMoeda.Value) then TCadPedido2VlrConvertido_Calc.Value:=TCadPedido2VlrUnit.Value else begin if (TCadPedido2VlrCotacao.Value = 0) or (TCadPedido2VlrCotacao.AsString = ´´) then TCadPedido2VlrConvertido_Calc.Value:=TCadPedido2VlrUnit.Value else TCadPedido2VlrConvertido_Calc.Value:=TCadPedido2VlrUnit.Value/TCadPedido2VlrCotacao.Value; end; end else TCadPedido2VlrConvertido_Calc.Value:=TCadPedido2VlrUnit.Value; TCadPedido2VrUnitCalc.Value:=(TCadPedido2VlrConvertido_Calc.Value-(TCadPedido2VlrConvertido_Calc.Value*(TCadPedido2Desconto.Value*0.01))); TCadPedido2VlrTotal_Calc.Value:=(TCadPedido2VrUnitCalc.Value*TCadPedido2Qtde.Value); end else begin TCadPedido2VrUnitCalc.Value:=(TCadPedido2VlrUnit.Value-(TCadPedido2VlrUnit.Value*(TCadPedido2Desconto.Value*0.01))); TCadPedido2VlrTotal_Calc.Value:=(TCadPedido2VrUnitCalc.Value*TCadPedido2Qtde.Value); end; end;
Gostei + 0
23/11/2006
Facc
Olhe o código que está no OnCalc...
procedure TDMDados.TCadPedido2CalcFields(DataSet: TDataSet); begin if FPrincipal.bAcertaPreco then // a Variavel Global tipo boolean exit; if DMDados.TCadConfigCadMoeda.Value=´S´ then // usa moedas begin if (TCadPedido2MoedaProd.Value = TCadPedidoMoeda.Value) then // moeda do produto = a da venda TCadPedido2VlrConvertido_Calc.Value:=TCadPedido2VlrUnit.Value else if (TCadPedido2MoedaProd.Value <> TCadPedidoMoeda.Value) then begin if (DMDados.TCadConfigMoedaPad.Value=TCadPedidoMoeda.Value) and (TCadPedido2MoedaProd.Value<>TCadPedidoMoeda.Value) then TCadPedido2VlrConvertido_Calc.Value:=TCadPedido2VlrUnit.Value*TCadPedido2VlrCotacao.Value else if (DMDados.TCadConfigMoedaPad.Value=TCadPedidoMoeda.Value) and (TCadPedido2MoedaProd.Value=TCadPedidoMoeda.Value) then TCadPedido2VlrConvertido_Calc.Value:=TCadPedido2VlrUnit.Value else begin if (TCadPedido2VlrCotacao.Value = 0) or (TCadPedido2VlrCotacao.AsString = ´´) then TCadPedido2VlrConvertido_Calc.Value:=TCadPedido2VlrUnit.Value else TCadPedido2VlrConvertido_Calc.Value:=TCadPedido2VlrUnit.Value/TCadPedido2VlrCotacao.Value; end; end else TCadPedido2VlrConvertido_Calc.Value:=TCadPedido2VlrUnit.Value; TCadPedido2VrUnitCalc.Value:=(TCadPedido2VlrConvertido_Calc.Value-(TCadPedido2VlrConvertido_Calc.Value*(TCadPedido2Desconto.Value*0.01))); TCadPedido2VlrTotal_Calc.Value:=(TCadPedido2VrUnitCalc.Value*TCadPedido2Qtde.Value); end else begin TCadPedido2VrUnitCalc.Value:=(TCadPedido2VlrUnit.Value-(TCadPedido2VlrUnit.Value*(TCadPedido2Desconto.Value*0.01))); TCadPedido2VlrTotal_Calc.Value:=(TCadPedido2VrUnitCalc.Value*TCadPedido2Qtde.Value); end; end;
Verifiquei ele está ficando preso no ultimo produto da tela. O Next não dá a impressão que não está funcionando...
Por favor... é urgente....
Muito obrigado
Gostei + 0
23/11/2006
Facc
Gostei + 0
27/11/2006
Emerson Nascimento
Gostei + 0
27/11/2006
Facc
Consegui sim...
O Erro estava no after post. Resolvi verificando uma condição, se verdadeira, não faz os procedimentos no afterpost. caso contrario, executa normal
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)