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
[-]
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, debe, haber, debe-haber );
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
[-]
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.