Ver Mensaje Individual
  #7  
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
Bueno, se puede, pero es complicado...

Primero calculas el saldo inicial con el SQL que te he enviado anteriormente.
Luego ejecutas esto pasándole los parámetros (los que tienen ":" delante)
Código SQL [-]
select c.asiento,d.linea,c.fecha,d.debe,d.haber,
(   /* Calculo del saldo */
    select :saldo_inicial + sum(dd.debe)-sum(dd.haber)
    from conta_asientos cc
    join conta_asientos_deta dd
    on cc.asiento=dd.asiento
    where
    dd.cuenta = :cuenta_pedida and
    cc.fecha >= :fecha_desde and
    /* Que sea menor que la fecha o
          Que sea igual a la fecha pero menor el asiento o
              Que sea igual el asiento paro menor la linea */
    (
     (cc.fecha < c.fecha) or
     (cc.fecha = c.fecha) and ( (cc.asiento < c.asiento) or
                               ( (cc.asiento = c.asiento) and (dd.linea < d.linea ) ) )
    )
)
from conta_asientos c
join conta_asientos_deta d
on c.asiento=d.asiento
where
d.cuenta = :cuenta_pedida and
c.fecha >= :fecha_desde and
c.fecha <= :fecha_hasta
order by c.fecha,c.asiento,d.linea

Ten en cuenta que es un select dentro de un select, por lo que según la cantidad de registros y los índices que tengas, puede tardar bastante.
Deberás tener (creo que obligatoriamente) un índice en la cabecera (conta_asientos) por [fecha, asiento] y en el detalle conta_asientos_deta por [cuenta,asiento, linea]

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