• Viernes 19 de Abril de 2024, 00:48

Autor Tema:  Totales Dificiles en Reporte Contable  (Leído 2555 veces)

mebernal

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Totales Dificiles en Reporte Contable
« en: Sábado 29 de Agosto de 2009, 02:57 »
0
Buenas tardes,amigos del foro quisiera me ayudaran a solucionar un problema que tengo en un reporte.
tengo una tabla catalogo,como ya saben en los catalogos contables hay cuentas,subcuentas,subsubcuentas,etc
en la tabla seria

cuenta        subcuenta        nombre
1                                     xyz
11                   1               gjgjgj
111               11                yuiyuiy
111001          111            ygggjn
111001001     111001       iiyyiuyy

para lo alargar hay cuentas de movimientos directo y otras no.
o sea que en el periodo contable,se generan partidas con la cuenta 111001001,la 111001,pero no hay movimientos directos con la 111,11,1......entonces
en un formulario creo un cursor con los movimientos de todas las cuentas ,con sumatorias y agrupacion,etc..y todo bien,una consulta se muestra asi:

cuenta      nombre         cargos      abonos
1           yiyiyy              
11         uoioiui            
111       uooiuoiu            
111001    iyiyii              1,000.00    500.00
111001001  tytu              75.00        15.00

ahora mi problema es :  Como hago para que en la cuenta 111 me aparezca la sumatoria de 111001001,111001002,111001003....y asi
para que en la cuenta 112 me aparezca la sumatoria de 112001001,112001002,112001003...etc
y que en la cuenta 11 me aprezca la suma de 111+112+113....etc.
y en cuenta 1 me aparezca la sumatoria de 11,12,13,etc..

no se si me doy a entender...

gracias de antemano,

saludos

ecch1

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Totales Dificiles en Reporte Contable
« Respuesta #1 en: Jueves 24 de Septiembre de 2009, 01:42 »
0
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

Código: Text
  1. FUNCTION SumaCta
  2. PARAMETERS cCodCta, cNivel, ldebe
  3. LOCAL nImp_Total, cSqlStr
  4. * Supongamos que los campo de la tabla donde estan los importes se denomina DEBE y HABER
  5. IF cNivel <> 'D'   
  6.    cNivel = STR(VAL(cNivel)+1),1)
  7.    cSqlStr ="SELECT cuenta FROM DIARIOS WHERE cuenta LIKE '"+cCodCta+"%'"+" AND Nivel='"cNivel+"'"
  8.    &cSqlStr
  9.    if Reccount() = 0
  10.       cNivel = 'D'
  11.    endif
  12. endif
  13.  
  14. iF ldebe
  15.    cSqlStr = "SELECT sum(debe) INTO nImp_Total FROM DIARIO WHERE cuenta LIKE '"+cCodCta+"%'"+" AND Nivel='"cNivel+"'"
  16. Else
  17.    cSqlStr=  "SELECT sum(haber) INTO nImp_Total FROM DIARIO WHERE cuenta LIKE '"+cCodCta+"%'"+" AND Nivel='"cNivel+"'"
  18. ENDiF
  19.  
  20. &cSqlStr
  21. if reccount()=0
  22.     nImp_Total = 0
  23. endif
  24.  USE
  25. RETURN nImp_Total
  26.  
  27.  

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.

xodrf

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Totales Dificiles en Reporte Contable
« Respuesta #2 en: Lunes 28 de Septiembre de 2009, 15:53 »
0
Solo si tu plan de cuentas esta agrupada de a dos cifras es decir con 12 digitos 1.01.01.01.001 te doy otra idea: cambia el orden de tus cuentas cuando la recorras es decir empieza por el final
101030101002  CLIENTE 2                              
101030101001  CLIENTE 1                              
101030101       ** CLIENTES SECCION REPUESTOS **
1010301           ** CLIENTES CASA CENTRAL **            
10103              ** CREDITOS **                          
10102              ** INVERSIONES TEMPORARIAS **          
1010104           ** OTROS VALORES **                    
101010301001  BANCO XXX CTA 00                        
101010301       ** BANCOS CASA CENTRAL **              
1010103           ** BANCOS **                            
101010101003  CAJA MONEDAS EXTRANJERAS                
101010101002  RECAUDACIONES A DEPOSITAR              
101010101001  CAJA MONEDA NACIONAL                    
101010101       ** CAJAS CASA CENTRAL **                
1010101          ** CAJAS **                            
10101             ** DISPONIBILIDADES **                  
101                 ** ACTIVO CORRIENTE **                  
1                    ** ACTIVO **                            

** Las cuentas que empiezan por asterisco, son de solo titulo, no imputable, cta integradora y no se que otros nombres se le da.
Con dos bucles anidados podrias sumar los importes de las cuentas hijas
DO WHILE !EOF()
       
        _cuenta=CUENTA   &&cuenta en la que comienza
        _level   =LEN(ALLTRIM(CUENTA))
       
        * suma todas las cuentas que tengan el mismo nivel
        DO WHILE !EOF() AND LEN(ALLTRIM(CUENTA))==_level
                 ...
                 SKIP +1
        ENDDO
        grabas el monto en la cuenta titular y pasas al siguiente segmento de cuenta

ENDDO
etc.
Ten en cuenta este q tipo de situaciones te puede dar un error o sea que no exista una cuenta integradora para un grupo de cuentas (falta la integradora 101010301 ** BANCOS CASA CENTRAL **), este caso debes tratar de mostrar un error o algo asi.

101010301001  BANCO XXX CTA 00                        
1010103           ** BANCOS **                            
Ojala superes el problema!! :mellow: