Ver Mensaje Individual
  #4  
Antiguo 25-01-2011
WALTERMAN90 WALTERMAN90 is offline
Miembro
 
Registrado: mar 2008
Posts: 12
Reputación: 0
WALTERMAN90 Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Antes que nada, creo que en la tabla conta_asientos_deta te falta la cuenta. Sponiendo que la tienes en esta tabla:

Si solo trabajás con estas dos tablas te propongo una solución simple:
Creá una tabla temporal con los campos que necesitas mostrar
libro_mayor(n_asiento, cliente, debe, haber, saldo)
Luego calculas el saldo inicial. Esto es lo que suma la columna debe y lo que suma la columna haber hasta la Fecha_Desde.
Recorres el detalle hasta que llegas a la fecha_desde
Código Delphi [-]
{PSEUDOCODIGO}
while (Fecha_asiento < Fecha_Desde) do
begin
   if (conta_asientos_deta.cuenta = Cuenta_Seleccionada) then
   begin
      Debe := Debe + conta_asientos_deta.debe;
      Haber := Haber + conta_asientos_derta.haber;
   end;
   Next
end;
with libro_mayor do
begin
   Insert (0{asiento_ficticio_inicial}, debe, haber, debe-haber {saldo});
   Acumulador_de_Saldo := debe-haber;
end;

Luego vas recorriendo las tablas e insertando los registros hasta la Fecha_Hasta y calculando el saldo:
Código Delphi [-]
{PSEUDOCODIGO}
while (Fecha_asiento < Fecha_Hasta) do
begin
   if (conta_asientos_deta.cuenta = Cuenta_Seleccionada) then
   begin
      with libro_mayor do
      begin
         Acumulador_de_Saldo := Acumulador_de_Saldo + (debe-haber);
         Insert (asiento, debe, haber, Acumulador_de_Saldo);
      end;
   end;
   Next;
end;

Nota para todo esto, los datos tienen que estar ordenados por fecha!
Además de esto, deberás hacer bucles anidados para tomar los datos de la cabecera del asiento y del detalle. La fecha está en la cabecera y si cumple con esta deberás tomar la cuenta del detalle. Si la cuenta es la que buscamos, utilizamos debe y haber para contar el saldo inicial o para rellenar el resto de registros.
muy interesante! muchas gracias, no tenia nada en mente asi que voy a probar, en realidad lo quería hacer solo con sql pero me parece una buena opción...
Muchas gracias por responder.
Responder Con Cita