Ver Mensaje Individual
  #2  
Antiguo 01-05-2012
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 835
Reputación: 24
gatosoft Va camino a la fama
Hola IvanD...

¿¿Que base de datos utilizas???, aunque creo que sin importar cual, debería poderse resolver por SQL la situación asi:

Asumo que tienes dos tablas:

1) Cuentas que debe ser algo como:

PlanDeCuentas:
CodCuenta, Descripción
1 Activo,
1.1 activo fijos
1.1.1 caja
1.1.1.1 caja general

Asumo que debes tener una tabla de asientos o movimientos, algo como:

Movimientos:
Id.Cpbte, Fecha, cuentaMov, Valor
1,2012-04-28,'1.1.1.1', 100,
2,2012-04-29,'1.1.1.1', 200,
3,2012-04-28,'1.1.1.2', 500,

Como las cuentas son strings y manejan dentro de si la jerarquia, puedes hacer una consulta asi:

Código SQL [-]
Select AA.CodCuenta, AA.Descripción, (Select sum(BB.Valor) from Movimientos BB where (BB.cuentaMov like AA.CodCuenta||'%') and (Fecha between :F1 and :F2))
from PlanDeCuentas AA

La clave está en que puedes utilziar una conslta anidada, que traiga siempre la sumatoria de todos los moviemientos que comiencen por la cuenta que llamas...

Puedes probar la conulsta sola en tu tabla de movimientos con:
Código SQL [-]
Select sum(Valor) 
from Movimientos  
where (cuentaMov like '1.1.%') 
and (Fecha between F1 and F2)


este es un ejemplo en SQL Server que te ayuda con el ejercicion

Código SQL [-]
select SUM(valor) from (
select *
from (
select 1 as idcpbte, '1.1.1.1' as cuenta, 100 valor union
select 2 as idcpbte, '1.1.1.1' as cuenta, 200 valor union
select 3 as idcpbte, '2.1.1.1' as cuenta, 500 valor
) as C2
where cuenta like '2.1.%' -- Modifica aqui el valor que quieres probar...
) as C3

Espero que sea lo que buscabas y que te haya servido
Responder Con Cita