Ver Mensaje Individual
  #2  
Antiguo 25-01-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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.

Última edición por duilioisola fecha: 25-01-2011 a las 01:01:06.
Responder Con Cita