Ver Mensaje Individual
  #3  
Antiguo 04-06-2006
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Reputación: 19
celades1 Va por buen camino
Hola

Yo no trabajo con query sino con tfibdataset pero para el caso creo sera lo mismo.

Para lo primero i lo segundo tienes el evento onsettext de los field del query
Suponiendo que debe1,haber1,edit1 son los tdbedit donde enseñas el sumatorio del debe,haber y saldo

Código Delphi [-]
procedure TForm1.queryDEbeSetText(Sender: TField;const Text: String);
var valor,valor1,old_debe : double;
begin
  if (trim(text)<>'') and (queryhaber.asfloat<>0) then
  raise Exception.Create( 'Haber no es 0 ' ) 
  else begin
  old_debe:= sender.asfloat;
  sender.asfloat:=strtofloat(text);
  valor:=strtofloat(edit1.text);
  valor1:=strtofloat(debe1.text);
  valor:=valor+sender.asfloat-old_debe;
  valor1:=valor1+sender.asfloat-old_debe;
  edit1.text:=formatflot('0.##',valor);
  debe1.text:=formatflot('0.##',valor1);
  end;
end;
 
procedure TForm1.queryghaberSetText(Sender: TField;const Text: String);
var valor,valor1,old_haber : double;
begin
  if (trim(text)<>'') and (querydebe.asfloat<>0) then
  raise Exception.Create( 'El Debe no es 0 ' ) 
  else begin
  old_haber:=sender.asfloat;
  sender.asfloat:=strtofloat(text);
  valor:=strtofloat(edit1.text);
  valor1:=strtofloat(haber1.text);
  valor:=valor-sender.asfloat+old_haber;
  valor1:=valor1+sender.asfloat-old_haber;
  edit1.text:=formatflot('0.##',valor);
  haber1.text:=formatflot('0.##',valor1);
  end;
end;



o bien otra manera de hacer seria esta



Código Delphi [-]
procedure TForm1.queryDEbeSetText(Sender: TField;const Text: String);
var valor,valor1,valor2,old_debe : double;
begin
   if (trim(text)<>'')  then begin
   old_debe:=sender.asfloat;
   sender.asfloat:=strtofloat(text);
   valor:=strtofloat(edit1.text);
   valor1:=strtofloat(debe1.text);
   valor:=valor+sender.asfloat-old_debe;
   valor1:=valor1+sender.asfloat-old_debe;
   debe1.text:=formatflot('0.##',valor1);
         if (queryhaber.asfloat<>0) then begin
         valor2:=strtofloat(haber1.text);
         valor:=valor+queryhaber.asfloat;
         valor2:=valor2-queryhaber.asfloat;
         queryhaber.asfloat:=0;
        haber1.text:=formatflot('0.##',valor2);
         end;
   edit1.text:=formatflot('0.##',valor);
   end;
end;
 
 
procedure TForm1.queryHaberSetText(Sender: TField;const Text: String);
var valor,valor1,valor2,old_haber : double;
begin
   if (trim(text)<>'')  then begin
   old_haber:= sender.asfloat;
   sender.asfloat:=strtofloat(text);
   valor:=strtofloat(edit1.text);
   valor1:=strtofloat(haber1.text);
   valor:=valor-sender.asfloat+old_haber;
   valor1:=valor1+sender.asfloat-old_haber;
   haber1.text:=formatflot('0.##',valor1);
         if (querydebe.asfloat<>0) then begin
         valor2:=strtofloat(debe1.text);
         valor:=valor-querydebe.asfloat;
         valor2:=valor2-querydebe.asfloat;
         querydebe.asfloat:=0;
         debe1.text:=formatflot('0.##',valor2);
         end;
   edit1.text:=formatflot('0.##',valor);
   end;
end;


Creo que deberia funcionar pero no lo he probado, supongo abra errores de sintaxis y algun signo erroneo ya que lo he escrito sobre la marcha.
Sino tambien tienes el evento on change de los fields o el oncalcfields del query

Saludos
Responder Con Cita