Hola
Para sumar las cuentas de acumulacion o cuentas principales debes hacerte una funcion
Supongamos que la estructura de tu catalogo es la siguiente
cuenta Caracter(20)
descripcion Caracter(80)
Nivel Caracter(1)
Y para las cuentas que has definido tienes lo siguiente
cuenta Descripcion Nivel
1 Activo Corriente 1
10 Caja Bancos 2
101 Caja 3
10101 Caja Soles D
104 Bancos Cta Cte. 3
10401 Bancos NNN 4
1040101 Cta. Corriente Soles D
10402 Bancos XXXX 4
1040201 Cta. Cirriente Dolares D
12 Clientes 2
121 Facturas por Cobrar 3
12101 Cliente del Pais 4
1210101 Cliente XXXX D
2 Existencias 1
20 Mercaderias 2
201 Almacen No 1 3
20101 Mercanacia XXXXx D
D significa Nivel Detalle detalle, por esta cuenta vas a ingresar los movimientos "Asientos contables"
Bueno: asi sucesivamente, el Plan Contable es muy extenso lo bueno es que existe una estructura estandar que se denomina Plan Contable General, su contenido total lo puedes encontrar con seguridad buscando en la Web, aqui solo he puesto unas cuentas de memoria es posible que esto haya cambiado pero el concepto Basico es el mismo, yo trabajaba en sistemas contables por los años 1988 al 1992 asi que seguramente el plan ha cambiado mucho.
Como ya habras podido apreciar el Tip del asunto es que tengas definido el Nivel de cada cuenta de esa forma hacer la funcion que acumula cada cuenta padre es secillo de hacer. Pueden haber muchas otras formas, esta es una de las que utilice hace mucho tiempo, tambie hay otras form cuando los niveles se separaban por puntos. Ojo, este codigo lo escribo de memoria asi que puede haber errores ortograficos y de nombres de funciones pero el concepto basico lo expreso aqui
Ejemplo
FUNCTION SumaCta
PARAMETERS cCodCta, cNivel, ldebe
LOCAL nImp_Total, cSqlStr
* Supongamos que los campo de la tabla donde estan los importes se denomina DEBE y HABER
IF cNivel <> 'D'
cNivel = STR(VAL(cNivel)+1),1)
cSqlStr ="SELECT cuenta FROM DIARIOS WHERE cuenta LIKE '"+cCodCta+"%'"+" AND Nivel='"cNivel+"'"
&cSqlStr
if Reccount() = 0
cNivel = 'D'
endif
endif
iF ldebe
cSqlStr = "SELECT sum(debe) INTO nImp_Total FROM DIARIO WHERE cuenta LIKE '"+cCodCta+"%'"+" AND Nivel='"cNivel+"'"
Else
cSqlStr= "SELECT sum(haber) INTO nImp_Total FROM DIARIO WHERE cuenta LIKE '"+cCodCta+"%'"+" AND Nivel='"cNivel+"'"
ENDiF
&cSqlStr
if reccount()=0
nImp_Total = 0
endif
USE
RETURN nImp_Total
Te dejo la Idea, reitero, se puede hacer de muchas maneras, pero esta se me ocurrio por el momento, espero comentarios
Saludos
ecch
Pd La funcion cuando es posible identificar los niveles de las cuentas con un punto se puede utilizar llamadas recursivas.