Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Implementar Movimentos de Bancos (https://www.clubdelphi.com/foros/showthread.php?t=48377)

luxus 23-09-2007 20:34:35

Implementar Movimentos de Bancos
 
Hola a todos,

Me he encontrado con un gran problema a la hora de implementar los movimientos de una cuenta bancaria.

Os comento lo que he hecho hasta el momento. Tengo un form en que el usuario ha de elegir el nº de cuenta corriente, el importe de pago o ingreso, el concepto y la fecha.

Si el usurio decide ver un extracto de cuenta de una de sus cuentas corrientes hago una consulta en la que se pide al usuario que especifique el rango de fechas. Hasta aqui todo va bien. El problema que me surge es como implementar una funcion para rellenar el campo de SALDO.

La idea que tenia era ir al ultimo registro de la consulta e ir sumando o restando del saldo anterior con el importe del registro actual. Una vez terminado se iria al registro anterior. Esto se repitiria hasta llegar al primer registro del query.

Aqui os adjunto el codigo:

while not(FMovimientosCuentas.ADOQuery1.First) do
begin
FMovimientosCuentas.ADOTable1.First;
if (FMovimientosCuentas.ADOTable1.Locate('codigo',FMovimientos.ECodigo.Text,searchoptions)) then
begin
if (FMovimientosCuentas.ADOTable1.FieldValues['saldoinicial']<>null) then
aux:=FMovimientosCuentas.ADOTable1.FieldValues['saldoinicial']
else
aux:='0.00';
end;

saldo:=StrToFloat(aux);
if (FMovimientosCuentas.ADOQuery1.FieldValues['movimiento']<>null) then
tipo:=FMovimientosCuentas.ADOQuery1.FieldValues['movimiento'];

if (tipo='ENTRADA') then
begin
if (FMovimientosCuentas.ADOQuery1.FieldValues['importe']<>null) then
aux:=FMovimientosCuentas.ADOQuery1.FieldValues['importe']
else
aux:='0.00';

valor:=StrToFloat(aux);
saldo:=saldo+valor;
end;

if (tipo='SALIDA') then
begin
if (FMovimientosCuentas.ADOQuery1.FieldValues['importe']<>null) then
aux:=FMovimientosCuentas.ADOQuery1.FieldValues['importe']
else
aux:='0.00';

valor:=StrToFloat(aux);
saldo:=saldo-valor;
end;

FMovimientosCuentas.ADOQuery1.Edit;
FMovimientosCuentas.ADOQuery1.FieldValues['saldo']:=FloatToStr(saldo);
FMovimientosCuentas.ADOQuery1.Post;

FMovimientosCuentas.ADOQuery1.Prior;
end;


Os agradecería si me pudieseis echar una mano para terminar la implementación del programa.
Gracias y un saludo.

Caral 23-09-2007 20:44:52

Hola
Perdona pero no entiendo muy bien lo que necesitas, me parece que por lo que entiendo depende de la configuracion que tengas en la tabla en especifico.
Como puedes analizar el saldo, si no hay una continuidad en la tabla.
Perdona pero no lo entiendo, tal vez si amplias la explicacion.
Otra cosa, te aconsejo que utilices las etiquetas delphi.
Saludos

Lepe 23-09-2007 21:29:11

Lo típico sería una sola consulta en un adoquery:
Código SQL [-]
 select Sum(entrada) - Sum(salida)
 from tabla
 where fecha between :ini and :fin 
      and codigo

Habría que ver las demás tablas y detalles a tener en cuenta, pero más o menos sería así.

Saludos

Delphius 23-09-2007 21:33:11

Estoy en la misma que Caral. No termino de comprender lo que deseas hacer.
Si puedes darnos mejores detalles y explicar con otras palabras tal vez lo que buscas, te podríamos ser de ayuda.

Mirando el código, con un poco de esfuerzo debido a la falta de las etiquetas DELPHI, he notado lo siguiente:
1. Al parecer los campos saldoinicial, importe y saldo están declarados del tipo string. ¿No sería más sencillo declararlos como enteros o algún formato de moneda? Digo... con ello ya te evitarias estar haciendo conversiones innecesarias.
2. Tienes una variable saldo... que no se donde viene y que valor tiene inicialmente.
3. En el código tienes mezclado un TTable y TQuery y no se termina de comprender cúal es el propósito de cada uno.

Y por último no nos aclaras de que manera estás mostrando los resultados. ¿En un TDBGrid?

Sería muy recomendable que nos indiques que base de datos estás empleando. Por el momento más no puedo decirte.

Ahora que recuerdo, también puede serte útil el ejemplo de "libreta de banco" que viene en la Cara Oculta de Delphi 4. Dale una leída, pues creo entender que lo que deseas es justamente eso.

Saludos,

waly2k1 24-09-2007 05:42:20

Posible Rta.
 
No es muy legible el codigo, pero te aconsejo que crees una tabla temporal con los campos de tipo Numeric o Doble, vas recorriendo como lo estás haciendo y vas actualizando un campo Saldo y otro de Tipo de Saldo.

Yo al menos lo hago así en los resumenes de Cta de clientes/proveedores, probé hacerlo directamente con consultas pero no lo logré, salvo que trabajes con Stored Procedures y uses cursores dentro de estos sino no lo logras.

El tema de la conversión String a Float es un tema un poco complejo por el redondeo, ya que jamás te va a dar exacto, siempre tendrás un valor encima o debajo del real.

Probá con una tabla temporal, donde rellenas los campos con 0 y no te preocupas por los nulos, además si no tienes datos cargados están nulos los campos o vacíos ?

Saludos y espero no confundirte mas


La franja horaria es GMT +2. Ahora son las 10:16:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi