Aprovechando que no está la jefa, aunque tengo mucho trabajo ....
prueba con esto, no está probado ni depurado pero creo que te puede poner en la pista. Para los puristas, es pseudocódigo sin probar !!
1. Calculamos el saldo hasta la fecha
2. Seleccionamos los trabajos y los pagos, por cada registro calculamos el saldo y lo sacamos.
Notas:
for select ... into variables;
suspend;
hace una select, por cada regsitro obtenido asigna las columnas a las variables, y suspend las presenta.
Por cada registro calculamos el saldo.
Sacamos los resultados
Espero que te sirva.
Código SQL
[-]
CREATE OR ALTER PROCEDURE SP_PRUEBA (
fechaDesde, FechaHasta date,
idcliente integer)
returns(
fecha date,
articulo varchar(50),
debe numeric(10,2),
haber numeric(10,2)
saldo numeric(10,2)
)
as
declare variable
montante numeric(10,2);
begin
fecha = null;
articulo='';
debe= 0;
haber= 0;
saldo= 0;
SELECT SUM(TRABAJO.IMPORTE) FROM TRABAJO
WHERE IDCLIENTE=:IDCLIENTE AND FECHA < :FechaDesde
INTO montante;
saldo= montante;
SELECT SUM(PAGO.IMPORTE) FROM PAGO
WHERE IDCLIENTE=:IDCLIENTE AND FECHA < :FechaDesde
INTO montante;
saldo= saldo - montante;
suspend;
for select fecha, articulo, debe, haber
from (
select fecha, trabajo, importe, 0
from trabajo
where
fecha >= :FechaDesde and fecha <= :FechaHasta
and idcliente=:idCliente
group by fecha
UNION
select fecha, articulo, 0, importe
from pago
where
fecha >= :FechaDesde and fecha <= :FechaHasta
and idcliente=:idCliente
group by fecha
)
order by fecha
into fecha, articulo, debe, haber;
saldo=saldo +debe-haber;
suspend;
end^