{ ============================================================================== 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) DEFINE p_mes,p SMALLINT DEFINE otras DYNAMIC ARRAY 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), clave CHAR(16) END RECORD DEFINE fecha_inicial,fecha_final DATE MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_compania.* FROM companias a CALL cgprrp008() END MAIN FUNCTION cgprrp008() 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 LET tipo_papel = 1 CALL msgrp000(tipo_papel) INPUT BY NAME p_ano,p_mes 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 ano = p_ano AND mes=p_mes AND programa='cgprrp012.4rp' # DELETE FROM cgtb00016 WHERE ano = p_ano AND mes=p_mes AND programa='cgprrp013.4rp' AND # estado_m='390' LET p = 1 LET selec = "SELECT DISTINCT b.cuenta_no,b.descripcion,b.estado_a,b.estado_m, ", " ISNULL(SUM(a.debito),0),ISNULL(SUM(a.credito),0),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 ?) ", " AND (a.status_t IS NULL) ", "WHERE (a.status_t IS NULL) 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) CALL seleccionarsalida() RETURNING r_output #LET handler = configureOutput(r_output) PREPARE comando FROM selec DECLARE busco CURSOR FOR comando OPEN busco USING fecha_inicial,fecha_final DISPLAY "<<>>" AT 19,14 ATTRIBUTE(BLUE) LET idx = 1 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 IF idx = 1 THEN LET r_filename ="cgprrpanalitico.4rp" LET preview = 1 IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes START REPORT mayor_anal_gral TO XML HANDLER HANDLER END IF 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 FINISH REPORT mayor_anal_gral 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), clave CHAR(16) END RECORD DEFINE t_debito,t_credito,t_balan_ant,t_actividad,t_balan_act DECIMAL(12,2) DEFINE cuenta_88 CHAR(2), xnivel smallint DEFINE fecha1,fecha2 DATE DEFINE actividad,balan_ant,balance_final,balance,debito1,debito2, valor_88_act,valor_88_ant,debito_88,credito_88,t_db,t_cr, credito1,credito2,debitonivel,creditonivel DECIMAL(12,2) DEFINE balan_act DECIMAL(12,2) DEFINE descrip1 CHAR(30) DEFINE cuentanivel CHAR(10) DEFINE otras_cta CHAR(8), descripcion_nivel VARCHAR(100), cuenta_ultima VARCHAR(10), estado_a_ult,estado_m_ult,estado_a_nivel,estado_m_nivel VARCHAR(4), descripcion_ult VARCHAR(100), balan_ant_ult , debito_ult, credito_ult, actividad_ult, balan_final_ult, balan_ant_nivel , actividad_nivel, balan_final_nivel DEC(12,2) DEFINE hora CHAR(5) FORMAT PAGE HEADER LET hora = time ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS LET l = (84 - LENGTH(p_compania.nombre CLIPPED))/2 BEFORE GROUP OF x.cuenta_no LET debito1 = 0 LET credito1 = 0 LET debito2 = 0 LET credito2 = 0 LET xnivel = x.nivel IF x.nivel < 3 THEN # Busqueda de las controles IF x.nivel = 1 THEN # Balance Anterior LET x.cuenta_no = x.cuenta_no clipped SELECT sum(debito-credito) INTO balan_ant FROM cgtb00004 WHERE (fecha < fecha1) and (cuenta_no[1] = x.cuenta_no) and status_t is null IF balan_ant is null THEN LET balan_ant = 0 END IF # Actividades del mes SELECT SUM(a.debito),SUM(a.credito) INTO x.debito,x.credito FROM cgtb00004 a WHERE (a.cuenta_no[1] = x.cuenta_no) and a.status_t IS NULL AND (a.fecha between fecha1 and 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 LET actividad = x.debito-x.credito END IF # Para Las Sub-control IF x.nivel > 1 THEN LET x.cuenta_no = x.cuenta_no clipped SELECT SUM(a.debito-a.credito) INTO balan_ant FROM cgtb00004 a WHERE (a.cuenta_no[1,2] = x.cuenta_no) and a.status_t IS NULL AND (a.fecha < fecha1 ) IF balan_ant is null THEN LET balan_ant = 0 END IF # Actividades del mes SELECT SUM(a.debito),SUM(a.credito) INTO x.debito,x.credito FROM cgtb00004 a WHERE (a.cuenta_no[1,2] = x.cuenta_no) and a.status_t IS NULL AND (a.fecha between fecha1 and fecha2) # Otras cuentas sub-controles (Balance Anterior) IF x.cuenta_no[3] != " " THEN SELECT SUM(a.debito-a.credito) INTO balan_ant FROM cgtb00004 a WHERE (a.cuenta_no[1,3] = x.cuenta_no) and a.status_t IS NULL AND (a.fecha < fecha1 ) IF balan_ant is null THEN LET balan_ant = 0 END IF # Actividades del mes SELECT SUM(a.debito),SUM(a.credito) INTO x.debito,x.credito FROM cgtb00004 a WHERE (a.cuenta_no[1,3] = x.cuenta_no) and a.status_t IS NULL AND (a.fecha between fecha1 and fecha2) END IF # Otras cuentas sub-controles (Actividades del mes) IF x.cuenta_no[4] != " " THEN SELECT SUM(a.debito-a.credito) INTO balan_ant FROM cgtb00004 a WHERE (a.cuenta_no[1,4] = x.cuenta_no) and a.status_t IS NULL AND (a.fecha < fecha1 ) IF balan_ant is null THEN LET balan_ant = 0 END IF SELECT SUM(a.debito),SUM(a.credito) INTO x.debito,x.credito FROM cgtb00004 a WHERE (a.cuenta_no[1,4] = x.cuenta_no) and a.status_t IS NULL AND (a.fecha between fecha1 and fecha2) END IF IF x.debito is null THEN LET x.debito = 0 END IF IF x.credito is null THEN LET x.credito = 0 END IF LET actividad = x.debito-x.credito END IF LET balan_act = balan_ant + actividad LET descripcion_nivel = x.descripcion LET debitonivel = x.debito LET creditonivel = x.credito LET cuentanivel = x.cuenta_no LET estado_a_nivel = x.estado_a LET estado_m_nivel = x.estado_m LET balan_ant_nivel = balan_ant LET balan_final_nivel = balan_act LET actividad_nivel = actividad PRINTX p_compania.nombre,hora,fecha1,fecha2, cuentanivel , estado_a_nivel,estado_m_nivel, descripcion_nivel, balan_ant_nivel , debitonivel,creditonivel,actividad_nivel , balan_final_nivel, xnivel # INSERT INTO cgtb00016(ano,mes,cuenta_no,estado_a,estado_m,balance_ant,actividad,balance_act,programa) # VALUES (p_ano,p_mes,x.cuenta_no,x.estado_a,x.estado_m, # balan_ant,actividad,balan_act,'cgprrp012.4rp') IF valor_88_act is null THEN LET valor_88_act = 0 END IF IF valor_88_ant is null THEN LET valor_88_ant = 0 END IF IF x.cuenta_no = "88" THEN LET cuenta_88 = "88" LET valor_88_act = balan_ant + actividad LET debito_88 = x.debito LET credito_88 = x.credito LET valor_88_ant = balan_ant END IF END IF ON EVERY ROW IF x.nivel > 2 THEN # Balance Inicial 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 < fecha1) IF balance IS NULL THEN LET balance = 0 END IF IF x.debito is null THEN LET x.debito = 0 END IF IF x.credito is null THEN LET x.credito = 0 END IF LET actividad = x.debito - x.credito LET balance_final = balance + actividad PRINTX x.cuenta_no, x.estado_a,x.estado_m,x.descripcion, balance, x.debito, x.credito , actividad, balance_final,x.nivel LET balan_act = balance + actividad # INSERT INTO cgtb00016 (ano,mes,cuenta_no,estado_a,estado_m,balance_ant,actividad,balance_act,programa) # VALUES (p_ano,p_mes,x.cuenta_no,x.estado_a,x.estado_m, # balance,actividad,balan_act,'cgprrp012.4rp') END IF # Busca las cuentas que tienen que ver con el beneficio neto SELECT unique cuenta_no FROM cgtb00014 WHERE cuenta_no = x.cuenta_no IF status != notfound THEN LET otras[p].cuenta_no = x.cuenta_no LET otras[p].descripcion = x.descripcion LET otras[p].debito = x.debito LET otras[p].credito = x.credito LET otras[p].actividad = actividad LET otras[p].balan_ant = balance LET otras[p].balance_act = balan_act LET p = p + 1 END IF IF status = notfound THEN LET status = 0 END IF LET t_debito = 0 LET t_credito = 0 LET t_balan_ant = 0 LET t_actividad = 0 LET balan_ant = 0 LET t_balan_act = 0 LET t_db = 0 LET t_cr = 0 LET actividad = 0 LET idx = 1 ON LAST ROW SKIP TO TOP OF PAGE DECLARE busca CURSOR FOR SELECT cuenta_no ,descripcion,estado_a,estado_m FROM cgtb00001 WHERE nivel = 1 ORDER BY 1 FOREACH busca INTO x.cuenta_no,x.descripcion,x.estado_a,x.estado_m LET x.cuenta_no = x.cuenta_no clipped SELECT sum(a.debito-a.credito) INTO balan_ant FROM cgtb00004 a WHERE (a.cuenta_no[1] = x.cuenta_no) and (a.fecha < fecha1) and a.status_t is null IF balan_ant is null THEN LET balan_ant = 0 END IF # Actividades del mes SELECT SUM(a.debito),SUM(a.credito) INTO x.debito,x.credito FROM cgtb00004 a WHERE (a.cuenta_no[1] = x.cuenta_no) and a.status_t IS NULL AND (a.fecha between fecha1 and 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 LET actividad = x.debito - x.credito LET t_debito = t_debito + x.debito LET t_credito = t_credito + x.credito LET t_balan_ant = t_balan_ant + balan_ant LET t_actividad = t_actividad + actividad LET t_balan_act = t_balan_act + (actividad + balan_ant) LET cuenta_ultima = x.cuenta_no LET estado_a_ult = x.estado_a LET estado_m_ult = x.estado_m LET actividad_ult = actividad LET balan_final_ult = balan_ant + actividad PRINTX cuenta_ultima, estado_a_ult,estado_m_ult,descripcion_ult, balan_ant_ult , debito_ult, credito_ult, actividad_ult, balan_final_ult # Validacion de un record para sacar pequeno estado al final de este reporte IF x.cuenta_no = "4" or x.cuenta_no = "5" or x.cuenta_no = "7" or x.cuenta_no = "8" THEN LET estado[idx].cuenta_no = x.cuenta_no LET estado[idx].descripcion = x.descripcion LET estado[idx].debito = x.debito LET estado[idx].credito = x.credito LET estado[idx].actividad = actividad IF x.cuenta_no = 8 THEN LET estado[idx].balance_act = balan_ant + actividad - valor_88_act LET estado[idx].debito = estado[idx].debito - debito_88 LET estado[idx].credito = estado[idx].credito - credito_88 LET actividad = debito_88 - credito_88 LET estado[idx].actividad = estado[idx].actividad - actividad LET estado[idx].balan_ant = balan_ant - valor_88_ant ELSE LET estado[idx].balan_ant = balan_ant LET estado[idx].balance_act = balan_ant + actividad END IF LET idx = idx + 1 END IF END FOREACH PRINTX t_balan_ant,t_debito, t_credito, t_actividad, t_balan_act { SKIP TO TOP OF PAGE LET t_debito = 0 LET t_credito = 0 LET t_balan_ant = 0 LET t_actividad = 0 LET balan_ant = 0 LET t_balan_act = 0 LET t_db = 0 LET t_cr = 0 LET actividad = 0 FOR i = 1 TO idx IF estado[i].cuenta_no is not null THEN PRINT COLUMN 1, estado[i].cuenta_no, COLUMN 20, estado[i].descripcion CLIPPED, COLUMN 55, estado[i].balan_ant USING "((,(((,(((,((#.##)", COLUMN 70, estado[i].debito USING "##,###,###,###.##", COLUMN 85, estado[i].credito USING "##,###,###,###.##", COLUMN 100, estado[i].actividad USING "(,(((,(((,(((.##)", COLUMN 112, estado[i].balance_act USING "((,(((,(((,(((.##)" LET t_balan_ant = t_balan_ant + estado[i].balan_ant LET t_debito = t_debito + estado[i].debito LET t_credito = t_credito + estado[i].credito LET t_actividad = t_actividad + estado[i].actividad LET t_balan_act = t_balan_act + estado[i].balance_act END IF END FOR PRINT COLUMN 1, "---------------------------------------------------", "---------------------------------------------------", "-------------------------------" IF t_actividad <= 0 THEN PRINT COLUMN 2, "BENEFICIO ANTES DE ISR... ", COLUMN 55, t_balan_ant USING "((,(((,(((,((#.##)", COLUMN 70, t_debito USING "##,###,###,###.##", COLUMN 85, t_credito USING "##,###,###,###.##", COLUMN 100, t_actividad USING "(,(((,(((,(((.##)", COLUMN 112, t_balan_act USING "(,(((,(((,(((.##)" ELSE PRINT COLUMN 2, "PERDIDA ANTES DE ISR... ", COLUMN 55, t_balan_ant USING "((,(((,(((,((#.##)", COLUMN 70, t_debito USING "##,###,###,###.##", COLUMN 85, t_credito USING "##,###,###,###.##", COLUMN 100, t_actividad USING "(,(((,(((,(((.##)", COLUMN 112, t_balan_act USING "((,(((,(((,(((.##)" END IF INSERT INTO cgtb00016 (ano,mes,estado_a,balance_ant,actividad,balance_act,programa) VALUES (p_ano,p_mes,'275',t_balan_ant,t_actividad,t_balan_act,'cgprrp012.4rp') INSERT INTO cgtb00016 (ano,mes,estado_m,balance_ant,actividad,balance_act,programa) VALUES (p_ano,p_mes,'390',t_balan_ant,t_actividad,t_balan_act,'cgprrp013.4rp') PRINT COLUMN 1, "---------------------------------------------------", "---------------------------------------------------", "-------------------------------" LET k_balance = t_balan_ant LET k_debito = t_debito LET k_credito = t_credito LET k_actividad = t_actividad LET k_balan_act = t_balan_act SKIP 1 LINE PRINT COLUMN 1,"MENOS:" FOR i = 1 TO p IF otras[i].cuenta_no is not null THEN PRINT COLUMN 1, otras[i].cuenta_no, COLUMN 20, otras[i].descripcion, COLUMN 55, otras[i].balan_ant USING "((,(((,(((,((#.##)", COLUMN 70, otras[i].debito USING "##,###,###,###.##", COLUMN 85, otras[i].credito USING "##,###,###,###.##", COLUMN 100, otras[i].actividad USING "(,(((,(((,(((.##)", COLUMN 112, otras[i].balance_act USING "((,(((,(((,(((.##)" LET t_balan_ant = t_balan_ant + otras[i].balan_ant LET t_debito = t_debito + otras[i].debito LET t_credito = t_credito + otras[i].credito LET t_actividad = t_actividad + otras[i].actividad LET t_balan_act = t_balan_act + otras[i].balance_act END IF END FOR PRINT COLUMN 1, "---------------------------------------------------", "---------------------------------------------------", "-------------------------------" PRINT COLUMN 2, "BENEFICIO NETO... ", COLUMN 55, t_balan_ant USING "((,(((,(((,((#.##)", COLUMN 70, t_debito USING "##,###,###,###.##", COLUMN 85, t_credito USING "##,###,###,###.##", COLUMN 100, t_actividad USING "(,(((,(((,(((.##)", COLUMN 112, t_balan_act USING "((,(((,(((,(((.##)" PRINT COLUMN 1, "---------------------------------------------------", "---------------------------------------------------", "-------------------------------" LET valor_88_act= 0 LET valor_88_ant= 0 LET t_balan_ant = 0 LET t_debito = 0 LET t_credito = 0 LET t_actividad = 0 LET t_balan_act = 0 PRINT COLUMN 1,comp_off } END REPORT