PDA

Ver la Versión Completa : DBGRID, campo calculado...


Vichomo
02-08-2007, 08:06:11
Hola amigos del club, tengo un problema, les voy a explicar
manejor interbase, delphi 6.
tengo una pantalla que se llama estado de cuenta de clientes, en ella tengo dbgrid que esta conectado a su dataset y su datasource como siempre,
tengo varios campos, los que importan son CARGO, ABONO, SALDO, el cual cargo y abono lo traigo de la base de datos, y saldo es un campo calculado que me suma y me resta, ya sea abono suma al saldo del cliente y si es cargo se lo resta, el problema esta que yo tengo unos datetimepicker, en donde escogo dos fechas, hago mi query para buscar solo los datos entre una fecha y otra, pero el problema es que si hago una busqueda intermedia (Osea que no es el primer registro ni el ultimo) ahi el campo calculado hace sus operaciones desde que empieza y yo quiero que las haga desde el primer calculo, ya que si no estaria mal la suma.
Ejemplo
La fecha la omito pongo la clave

clave cargo abono saldo
1 -2000 0 -2000
2 0 3000 1000
3 -1500 0 -500
4 0 1000 500

ahi el campo calulado es saldo y hace bien sus cuentas.
ejemplo de si hago una consulta entre fechas (solo omitire una fecha)

yo kisiera que me saliera asi:
clave cargo abono saldo
2 0 3000 1000
3 -1500 0 -500
4 0 1000 500
pero me sale asi

clave cargo abono saldo
2 0 3000 3000
3 -1500 0 1500
4 0 1000 2500


y es logico porque el campo calculado empieza a hacer sus sumas desde el primer registro que tiene el DBgrid, pero entonces ahi es donde quiero tomar
el saldo que tenia el registro pasado (que era -2000) para entonces empezar a sumarle osea (-2000 + 3000 del abono de la clave 2, -1500 de la clave 3 + 1000 del abono 4 y me de el resultado real, osea 2500)
la pregunta es, como hacerlo? como tomar ese valor ya que es calculado y no esta en ninguna tabla.

Espero haber explicado bien y dado a entender, espero me den una solucion.

Gracias por su tiempo de antemano... ;)

BlueSteel
02-08-2007, 15:27:38
Hola Vichomo

oye.. podrias poner el codigo que utilizas para filtrar los registros (con y sin fecha), esto para ver como filtras... y además, poner el codigo de donde realizas la operación aritmetica... y así poder ver que puede estar pasando :rolleyes:

Vichomo
02-08-2007, 19:37:58
Hola Vichomo

oye.. podrias poner el codigo que utilizas para filtrar los registros (con y sin fecha), esto para ver como filtras... y además, poner el codigo de donde realizas la operación aritmetica... y así poder ver que puede estar pasando :rolleyes:

este query es el principal, cuando me muestra todo su eestado de cuenta, los datos del cliente (cvecli) lo agarro de un dataset que me muestra todos los clientes y ahi le doy click a un cliente en un dbgrid y me muestra la pantalla con este query

fdetedo.sal:=0;
fdetedo.edocuenta.close;
fdetedo.edocuenta.SelectSQL.Text:= 'SELECT * FROM EDOCUENTA WHERE CVECLIMOV='''+IBEDO.FieldByName('CVECLI').AsString+'''ORDER BY FECHA, cveedo';
FDETEDO.edocuenta.Open;
fdetedo.Label2.Caption:=ibedo.fieldByName('RAZSO').AsString;
FDETEDO.ShowModal;


y la de la fecha es este:

ShortDateFormat := 'dd.mm.yyyy';
fecha1 := QuotedStr(DateToStr(DT1.Date));
fecha2 := QuotedStr(DateToStr(DT2.Date));
redoclientes.QRLabel5.Caption:=label2.Caption;
redoclientes.IBredocli.Close;
redoclientes.IBredocli.SQL.Clear;
redoclientes.IBredocli.SQL.Add('select e.cveedo, e.fecha, e.folio, e.cantid, e.concep, e.prevta, e.cargo, e.abono, e.saldomov, e.cveclimov,');
redoclientes.IBredocli.SQL.Add('e.cvepromov, p.despro from edocuenta e left join productos p on p.cvepro=e.cvepromov where');
redoclientes.IBredocli.SQL.Add('e.cveclimov='+fedocuenta.IBEDO.FieldByName('CVECLI').AsString+' and e.fecha between '+fecha1+' and '+fecha2+' order by e.fecha, e.cveedo');
ShortDateFormat := 'dd/mm/yyyy';
redoclientes.IBredocli.Open;


y el calculado esta en el evento oncalcfields
que es este

With edocuenta do begin
sal:=sal+(FieldByName('ABONO').AsFloat);
sal:=sal+(FieldByName('CARGO').AsFloat);
fieldbyname('saldoc').AsFloat:=sal;
end;

espero puedas ayudarme

Vichomo
03-08-2007, 22:33:41
Creo que nadie pudo ayudarme... Gracias de todas maneras, el intento se hace :(

eduarcol
03-08-2007, 22:37:11
En el campo calculado debes ubicar el saldo inicial del periodo que estas trabajando, en este caso seria la suma de los ingresos menos los egresos de todas las operaciones antes de la fecha de inicio, sin incluirla.

para tales fines te recomiendo una vista en la base de datos