{ ============================================================================== PROGRAMA : CGPRRP008 SISTEMA : Sistema de Contabilidad General Objetivo : Imprimir el mayor general Analitico PROGRAMADOR : Tadeo A. Ferreras FECHA : Oct. 05, 1993 MODIFICADO : Juan F. Soto FECHA : Diciembre 20, 1993. ============================================================================== } GLOBALS "cgprgb000.4gl" DEFINE k_balance,k_debito,k_credito,k_actividad,k_balan_act DECIMAL(12,2) DEFINE p_ano CHAR(4), handler om.SaxDocumentHandler DEFINE p_mes,p SMALLINT DEFINE otras ARRAY[10] OF RECORD cuenta_no CHAR(8), descripcion CHAR(30), balan_ant DECIMAL(12,2), debito DECIMAL(12,2), credito DECIMAL(12,2), actividad DECIMAL(12,2), balance_act DECIMAL(12,2) END RECORD DEFINE estado ARRAY[10] OF RECORD cuenta_no CHAR(8), descripcion CHAR(30), balan_ant DECIMAL(12,2), debito DECIMAL(12,2), credito DECIMAL(12,2), actividad DECIMAL(12,2), balance_act DECIMAL(12,2) END RECORD DEFINE mayor_anal1 RECORD cuenta_no CHAR(8), descripcion CHAR(30), estado_a CHAR(4), estado_m CHAR(4), debito DECIMAL(12,2), credito DECIMAL(12,2), nivel SMALLINT, analitico CHAR(1), aplica_a CHAR(8), primern CHAR(8), clave CHAR(16) END RECORD DEFINE fecha_inicial,fecha_final DATE MAIN DEFER INTERRUPT CALL STARTLOG("CGPRRP08.TXT") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "decomarmol" USER usuarios USING clave SELECT a.* INTO p_compania.* FROM companias a CALL cgprrp008() END MAIN FUNCTION cgprrp008() DEFINE cgtb83 RECORD LIKE cgtb00083.* LET int_flag = FALSE OPTIONS FORM LINE 8 OPEN FORM cgfmrp008 FROM "cgfmrp008" DISPLAY FORM cgfmrp008 DISPLAY "cgprrp008" AT 4,3 DISPLAY "Mayor General Analitico" AT 6,28 INPUT BY NAME p_ano,p_mes ON KEY(F2) RUN "copy pantalla.bat impresion.bat" DISPLAY "ACTIVACION REPORTE POR WORDPAD" AT 20,15 ATTRIBUTE(RED) AFTER FIELD p_ano IF p_ano IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD p_ano END IF AFTER FIELD p_mes IF p_mes IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD p_mes END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF SELECT fecha_inicio,fecha_corte INTO fecha_inicial,fecha_final FROM prdtable WHERE ano = p_ano and mes = p_mes CONSTRUCT BY NAME criterio ON b.cuenta_no AFTER CONSTRUCT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF EXIT CONSTRUCT END CONSTRUCT DELETE FROM cgtb00016 WHERE cuenta_no IS NOT NULL LET progreso = 20 DISPLAY progreso TO progreso CALL ui.Interface.refresh() DECLARE primerB CURSOR FOR SELECT a.* FROM cgtb00083 a FOREACH primerB INTO cgtb83.* #BALANCE ANTERIOR LET k_balance= 0 SELECT SUM(c.debito-c.credito) INTO k_balance FROM cgtb00001 a,cgtb00083 b,cgtb00004 c WHERE c.cuenta_no = a.cuenta_no and b.aplica_a = a.aplica_a AND b.aplica_a = cgtb83.aplica_a AND c.fecha < fecha_inicial AND c.status_t IS NULL SELECT SUM(c.debito),SUM(c.credito) INTO k_debito,k_credito FROM cgtb00001 a,cgtb00083 b,cgtb00004 c WHERE c.cuenta_no = a.cuenta_no and b.aplica_a = a.aplica_a AND b.aplica_a = cgtb83.aplica_a AND c.fecha between fecha_inicial AND fecha_final AND c.status_t IS NULL IF k_debito IS NULL THEN LET k_debito = 0 END IF IF k_credito IS NULL THEN LET k_credito = 0 END IF IF k_balance IS NULL THEN LET k_balance = 0 END IF LET k_actividad = k_debito - k_credito LET k_balan_act = k_balance + k_actividad SELECT a.descripcion,a.estado_m,a.estado_a INTO mayor_anal1.descripcion,mayor_anal1.estado_m,mayor_anal1.estado_a FROM cgtb00001 a WHERE a.cuenta_no = cgtb83.aplica_a INSERT INTO cgtb00016 VALUES (cgtb83.aplica_a,mayor_anal1.estado_a,mayor_anal1.estado_m, mayor_anal1.descripcion,k_debito,k_credito,k_balance,k_actividad,k_balan_act,cgtb83.primern) END FOREACH LET progreso = 40 DISPLAY progreso TO progreso CALL ui.Interface.refresh() # PRIMER NIVEL DECLARE segundoN CURSOR FOR SELECT DISTINCT a.primern FROM cgtb00083 a FOREACH segundoN INTO cgtb83.primern SELECT SUM(c.debito-c.credito) INTO k_balance FROM cgtb00001 a,cgtb00083 b,cgtb00004 c WHERE c.cuenta_no = a.cuenta_no and b.aplica_a = a.aplica_a AND b.primern = cgtb83.primern AND c.fecha < fecha_inicial AND c.status_t IS NULL SELECT SUM(c.debito),SUM(c.credito) INTO k_debito,k_credito FROM cgtb00001 a,cgtb00083 b,cgtb00004 c WHERE c.cuenta_no = a.cuenta_no and b.aplica_a = a.aplica_a AND b.primern = cgtb83.primern AND c.fecha between fecha_inicial AND fecha_final AND c.status_t IS NULL IF k_debito IS NULL THEN LET k_debito = 0 END IF IF k_credito IS NULL THEN LET k_credito = 0 END IF IF k_balance IS NULL THEN LET k_balance = 0 END IF LET k_actividad = k_debito - k_credito LET k_balan_act = k_balance + k_actividad SELECT a.descripcion,a.estado_m,a.estado_a INTO mayor_anal1.descripcion,mayor_anal1.estado_m,mayor_anal1.estado_a FROM cgtb00001 a WHERE a.cuenta_no = cgtb83.primern SELECT a.cuenta_no FROM cgtb00016 a WHERE a.cuenta_no = cgtb83.primern IF STATUS = NOTFOUND THEN INSERT INTO cgtb00016 VALUES (cgtb83.primern,mayor_anal1.estado_a,mayor_anal1.estado_m, mayor_anal1.descripcion,k_balance,k_debito,k_credito,k_actividad,k_balan_act,cgtb83.primern) ELSE UPDATE cgtb00016 SET debito = k_debito, credito = k_credito, actividad = k_actividad, balance_act = k_balan_act, balance_ant = k_balance WHERE cuenta_no = cgtb83.primern END IF END FOREACH LET progreso = 60 DISPLAY progreso TO progreso CALL ui.Interface.refresh() LET p = 1 LET selec = "SELECT DISTINCT b.cuenta_no,b.descripcion,b.estado_a,b.estado_m, ", " SUM(a.debito),SUM(a.credito),b.nivel,b.analitico,b.aplica_a ", "FROM cgtb00001 b ", "LEFT OUTER JOIN cgtb00004 a ON (a.cuenta_no = b.cuenta_no) AND (a.fecha BETWEEN ? AND ?) ", "WHERE (a.status_t IS NULL) AND ", " (b.status_t is null) AND b.nivel > 2 AND ", criterio clipped," GROUP BY b.cuenta_no,b.descripcion,b.estado_a,b.estado_m,b.nivel,b.analitico,b.aplica_a ", " ORDER BY b.cuenta_no" DISPLAY "<<>>" AT 19,14 ATTRIBUTE(blue) PREPARE comando FROM selec DECLARE busco CURSOR FOR comando OPEN busco USING fecha_inicial,fecha_final START REPORT mayor_anal_gral TO XML HANDLER handler WHILE status != NOTFOUND FETCH busco INTO mayor_anal1.* IF STATUS = NOTFOUND THEN EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE FINISH REPORT mayor_anal_gral EXIT WHILE END IF LET mayor_anal1.clave = mayor_anal1.cuenta_no clipped, mayor_anal1.aplica_a clipped OUTPUT TO REPORT mayor_anal_gral(mayor_anal1.*,fecha_inicial,fecha_final) END WHILE LET progreso = 80 DISPLAY progreso TO progreso CALL ui.Interface.refresh() FINISH REPORT mayor_anal_gral CALL cgprrp008r(fecha_inicial,fecha_final) LET progreso = 100 DISPLAY progreso TO progreso CALL ui.Interface.refresh() DISPLAY BY NAME k_balance,k_debito,k_credito,k_actividad,k_balan_act END FUNCTION REPORT mayor_anal_gral(x,fecha1,fecha2) DEFINE x RECORD cuenta_no CHAR(8), descripcion CHAR(30), estado_a CHAR(4), estado_m CHAR(4), debito DECIMAL(12,2), credito DECIMAL(12,2), nivel SMALLINT, analitico CHAR(1), aplica_a CHAR(8), primern CHAR(8), clave CHAR(16) END RECORD DEFINE t_debito,t_credito,t_balan_ant,t_actividad,t_balan_act DECIMAL(12,2) DEFINE fecha1,fecha2 DATE DEFINE actividad,balan_ant,balance,debito1,debito2, credito1,credito2 DECIMAL(12,2) DEFINE balan_act DECIMAL(12,2) ## DEFINICION DE LAS VARIABLES DE IMPRESION ORDER BY x.aplica_a,x.cuenta_no,x.nivel FORMAT BEFORE GROUP OF x.cuenta_no LET balan_act=0 LET debito1 = 0 LET credito1 = 0 LET debito2 = 0 LET credito2 = 0 ON EVERY ROW IF x.nivel > 2 THEN # Balance Inicial SELECT SUM(b.debito - b.credito) INTO balan_ant FROM cgtb00004 b WHERE b.cuenta_no=x.cuenta_no AND b.status_t IS NULL AND b.fecha < fecha1 SELECT SUM(b.debito - b.credito) INTO balance FROM cgtb00004 b WHERE b.cuenta_no=x.cuenta_no AND b.status_t IS NULL AND b.fecha < fecha2 IF x.debito IS NULL THEN LET x.debito = 0 END IF IF x.credito IS NULL THEN LET x.credito = 0 END IF IF balan_ant IS NULL THEN LET balan_ant = 0 END IF IF balance IS NULL THEN LET balance = 0 END IF LET actividad = x.debito - x.credito IF x.primern IS NULL THEN LET x.primern=x.aplica_a END IF INSERT INTO cgtb00016 VALUES (x.cuenta_no,x.estado_a,x.estado_m, x.descripcion,x.debito,x.credito,balan_ant,actividad,balance,x.primern) END IF END REPORT