{ ============================================================================== PROGRAMA : CGPRRP009 SISTEMA : Sistema de Contabilidad General OBJETIVO : Imprimir Analisis de Gastos por Departamento PROGRAMADOR : Tadeo A. Ferreras FECHA : Oct. 05, 1993 ============================================================================== } GLOBALS "cgprgb000.4gl" DEFINE p_mes,ano_ant,p_ano SMALLINT DEFINE ch_nombre DYNAMIC ARRAY OF CHAR(20), ent_diario CHAR(14), ch_ano CHAR(4) DEFINE fecha4,fecha5 DATE DEFINE total_anterior,actividades,total_actual,realizado DECIMAL(12,2) DEFINE resumen DYNAMIC ARRAY OF RECORD depto CHAR(1), nombre CHAR(30), acum_ant DECIMAL(12,2), val_per DECIMAL(12,2), acum_act DECIMAL(12,2), ano_ante DECIMAL(12,2) END RECORD DEFINE gastos RECORD cuenta_no CHAR(8), descripcion CHAR(30), control CHAR(1), departamento SMALLINT, nom_dpto CHAR(30), estado_a VARCHAR(10), estado_m VArchar(10), estado_a_c VARCHAR(10), cuenta_no_d VARCHAR(10), valor DECIMAL(12,2), valor_ant DECIMAL(12,2), acum_act DECIMAL(12,2), ano_ante DECIMAL(12,2) END RECORD DEFINE idx1 INTEGER 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 cgprrp009() END MAIN FUNCTION cgprrp009() LET int_flag = FALSE OPTIONS FORM LINE 8 OPEN FORM cgfmrp009 FROM "cgfmrp009" DISPLAY FORM cgfmrp009 DISPLAY "cgprrp009" AT 4,3 DISPLAY "Analisis de Gastos por Departamento" AT 6,22 LET tipo_papel = 1 CALL msgrp000(tipo_papel) LET idx = 1 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 SELECT fecha_inicio,fecha_corte INTO fecha_inicial,fecha_final FROM prdtable WHERE ano = p_ano and mes = p_mes LET ano_ant = p_ano - 1 SELECT fecha_corte INTO fecha5 FROM prdtable WHERE ano = ano_ant and mes = p_mes SELECT fecha_inicio INTO fecha4 FROM prdtable WHERE ano = ano_ant and mes = 1 LET ch_ano = p_ano using "&&&&" LET ch_ano = ch_ano[3,4] LET ent_diario = "ED.99-999/12",ch_ano clipped END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF CONSTRUCT criterio ON a.departamento,a.cuenta_no FROM departamento,cuenta_no IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF DISPLAY "<<" AT 19,14 ATTRIBUTE(blue) # Actualiza los registros contables poniendo el departamento en cero para # que asi la busqueda pueda reflejar las cuentas que estan identificadas como # (7) y tienen el departamento nulo. # Este UPDATE se reversa al momento de acabar el reporte UPDATE cgtb00004 set departamento = 0 WHERE departamento is null and cuenta_no[1] = "7" DELETE FROM cgtb00016 WHERE ano =p_ano AND mes = p_mes AND programa='cgprrp013.4rp' AND estado_a <> '275' LET selec = "SELECT distinct a.cuenta_no,b.descripcion,d.dpto,a.departamento,c.nom_dpto ", "FROM cgtb00001 b, cgtb00004 a, chequeo d,adtb00001 c ", "WHERE (a.cuenta_no = b.cuenta_no) AND (SUBSTRING(b.cuenta_no,1,1) = '7') AND ", " (a.departamento = d.departamento) AND a.status_t IS NULL AND ", " (a.departamento = c.departamento) AND ", " (a.fecha <= ?) AND b.status_t is null AND ",criterio CLIPPED, "ORDER BY d.dpto,a.departamento,a.cuenta_no" DISPLAY "<<>>" AT 19,14 ATTRIBUTE(blue) CALL seleccionarsalida() RETURNING r_output PREPARE comando FROM selec DECLARE busco CURSOR FOR comando OPEN busco USING fecha_final DISPLAY "<<>>" AT 19,14 ATTRIBUTE(blue) LET idx1=1 FOREACH busco INTO gastos.* IF gastos.departamento IS NULL THEN LET gastos.nom_dpto = "SIN DESCRIPCION" LET gastos.departamento = 0 END IF LET gastos.valor = 0 LET gastos.valor_ant = 0 LET gastos.acum_act = 0 LET gastos.ano_ante = 0 IF idx1=1 THEN CALL configureoutput(r_output) RETURNING HANDLER START REPORT gastos_gral TO XML HANDLER handler END IF LET gastos.cuenta_no_d =NULL LET gastos.estado_a=NULL # BUSCA CUENTAS PARTICULARES PARA LA GENERACION DEL ESTADO DE RESULTADO SELECT a.estado_a,a.cuenta_no INTO gastos.estado_a,gastos.cuenta_no_d FROM adtb00029 a WHERE a.departamento = gastos.departamento AND a.cuenta_no = gastos.cuenta_no IF STATUS = NOTFOUND THEN SELECT UNIQUE a.estado_m INTO gastos.estado_m FROM adtb00029 a WHERE a.departamento = gastos.departamento AND a.estado_m IS NOT NULL END IF OUTPUT TO REPORT gastos_gral(gastos.*,fecha_inicial,fecha_final,p_ano, ano_ant) LET idx1 = idx+1 END FOREACH IF idx1 > 1 THEN FINISH REPORT gastos_gral UPDATE cgtb00004 set departamento = NULL WHERE departamento = 0 and cuenta_no[1] = "7" ELSE CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS","INFO") END IF END FUNCTION REPORT gastos_gral(x,fecha1,fecha2,p_ano1,ano_ant1) DEFINE x RECORD cuenta_no CHAR(8), descripcion CHAR(30), control CHAR(1), departamento SMALLINT, nom_dpto CHAR(30), estado_a VARCHAR(10), estado_m VArchar(10), estado_a_c VARCHAR(10), cuenta_no_d VARCHAR(10), valor DECIMAL(12,2), # estado_a CHAR(4), # estado_m CHAR(4), valor_ant DECIMAL(12,2), acum_act DECIMAL(12,2), ano_ante DECIMAL(12,2) END RECORD DEFINE estado_a,estado_m CHAR(4) DEFINE p_ano1,ano_ant1 SMALLINT DEFINE encabezado CHAR(1) DEFINE fecha1,fecha2 DATE DEFINE total,total1,total2,total3,total4,total5,total6,total7,total8, p_total DECIMAL(12,2) DEFINE hora CHAR(5) OUTPUT ## DEFINICION DE LOS MARGENES DE IMPRESION TOP MARGIN 0 LEFT MARGIN 0 PAGE LENGTH 100 FORMAT PAGE HEADER LET hora = time LET l = (88 - LENGTH(p_compania.nombre CLIPPED))/2 ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS PRINT COLUMN 2, "cgprrp009", COLUMN l, p_compania.nombre CLIPPED, COLUMN 78, "Pag. ",pageno using "###" LET l = (135 - LENGTH("SISTEMA DE CONTABILIDAD GENERAL"))/2 PRINT COLUMN l, "SISTEMA DE CONTABILIDAD GENERAL", COLUMN 124, today using "dd/mm/yy" LET l = (135 - LENGTH("ANALISIS DE GASTOS POR DEPARTAMENTO"))/2 PRINT COLUMN l, "ANALISIS DE GASTOS POR DEPARTAMENTO", COLUMN 127, hora LET l = (135 - LENGTH("ffffffffffffffffffffffff"))/2 PRINT COLUMN l, "DEL ",fecha1 USING "dd/mm/yyyy"," Al ", fecha2 USING "dd/mm/yyyy" PRINT COLUMN 1, "---------------------------------------------------", "---------------------------------------------------", "-----------------------------" PRINT COLUMN 1, "CENTRO", COLUMN 8, "CUENTA", COLUMN 55, "ACUMULADO", COLUMN 75, "GASTOS EN EL", COLUMN 100,"ACUMULADO", COLUMN 119, "REALIZADO" PRINT COLUMN 1, "COSTO", COLUMN 8, "CONTABLE", COLUMN 20, "DESCRIPCION", COLUMN 55, "ANTERIOR", COLUMN 75, "RANGO DE FECHA", COLUMN 100,"A LA FECHA", COLUMN 119, "ANO ANTERIOR" PRINT COLUMN 1, "----------------------------------------------------", "----------------------------------------------------", "-------------------------" BEFORE GROUP OF x.control LET total4 = 0 LET total6 = 0 LET total8 = 0 LET total5 = 0 BEFORE GROUP OF x.departamento LET encabezado = "S" IF x.departamento IS NULL THEN LET x.nom_dpto = "SIN DEPARTAMENTO" END IF PRINT COLUMN 1,x.departamento USING "####"," ",x.nom_dpto CLIPPED, "(","ESTADO: ",x.estado_m,")" LET total1 = 0 LET total2 = 0 LET total = 0 LET total7 = 0 ON EVERY ROW IF x.valor is null THEN LET x.valor = 0 END IF # Realizado Ano Anterior SELECT SUM(a.debito-a.credito) INTO x.ano_ante FROM cgtb00004 a WHERE (a.ref NOT MATCHES "ED.99-999/12*") and (a.cuenta_no = x.cuenta_no) and (a.fecha BETWEEN fecha4 AND fecha5) and (a.departamento = x.departamento) and a.status_t is null SELECT SUM(a.debito-a.credito) INTO x.valor FROM cgtb00004 a WHERE (a.cuenta_no = x.cuenta_no) and (a.fecha BETWEEN fecha_inicial AND fecha_final) and (a.departamento = x.departamento) and a.status_t is null SELECT SUM(a.debito-a.credito) INTO x.valor_ant FROM cgtb00004 a WHERE (a.ref != ent_diario) and (a.cuenta_no = x.cuenta_no) and (a.fecha < fecha_inicial) and (a.departamento = x.departamento) and a.status_t is null IF x.ano_ante is null THEN LET x.ano_ante = 0 END IF IF x.valor is null THEN LET x.valor = 0 END IF IF x.valor_ant is null THEN LET x.valor_ant = 0 END IF LET x.acum_act = 0 LET x.acum_act = x.valor_ant + x.valor LET total1 = total1+ x.valor_ant LET total2 = total2+ x.valor LET total = total + x.acum_act LET total7 = total7 + x.ano_ante LET total4 = total4 + x.valor_ant LET total5 = total5 + x.valor LET total6 = total6 + x.acum_act LET total8 = total8 + x.ano_ante IF x.valor_ant != 0 OR x.acum_act != 0 THEN PRINT COLUMN 8, x.cuenta_no CLIPPED," ",x.estado_a_c, COLUMN 20, x.descripcion CLIPPED, COLUMN 55, x.valor_ant USING "(((,(((,(((.##)", COLUMN 75, x.valor USING "(((,(((,(((.##)", COLUMN 100, x.acum_act USING "(((,(((,(((.##)", COLUMN 119, x.ano_ante USING "(((,(((,(((.##)" IF x.cuenta_no_d = x.cuenta_no THEN INSERT INTO cgtb00016 (ano,mes,cuenta_no,departamento,estado_a,balance_ant,actividad,balance_act,programa) VALUES (p_ano,p_mes,x.cuenta_no,x.departamento, x.estado_a,x.valor_ant,x.valor,x.acum_act,'cgprrp013.4rp') END IF END IF AFTER GROUP OF x.departamento PRINT COLUMN 55,"--------------", COLUMN 75,"--------------", COLUMN 100,"--------------", COLUMN 119,"--------------" PRINT COLUMN 55,total1 USING "(((,(((,(((.##)", COLUMN 75,total2 USING "(((,(((,(((.##)", COLUMN 100,total USING "(((,(((,(((.##)", COLUMN 119,total7 USING "(((,(((,(((.##)" LET p_total = total IF x.estado_m IS NOT NULL THEN INSERT INTO cgtb00016 (ano,mes,departamento,estado_m,balance_ant,actividad,balance_act,programa) VALUES (p_ano,p_mes,x.departamento, x.estado_m,total1,total2,p_total,'cgprrp013.4rp') END IF AFTER GROUP OF x.control # Esta parte del reporte llena un arreglo para imprimir centros # sumarizados por la primera parte del codigo del departamento # estas infomaciones se imprimen en tiempo de totales generales # esta funcion contiene los nombre generales de los departamentos # sumarizados CALL tabla_nom() IF idx IS NULL OR idx = 0 THEN LET idx = 0 END IF LET i = x.control IF i = 0 THEN LET i = 8 END IF LET idx = idx + 1 LET resumen[idx].nombre = ch_nombre[i] LET resumen[idx].depto = x.control LET resumen[idx].acum_ant = total4 LET resumen[idx].val_per = total5 LET resumen[idx].acum_act = total6 LET resumen[idx].ano_ante = total8 ON LAST ROW PRINT COLUMN 55,"--------------", COLUMN 75,"--------------", COLUMN 100,"--------------", COLUMN 119,"--------------" SKIP TO TOP OF PAGE LET total1 = 0 LET total2 = 0 LET total3 = 0 LET total4 = 0 LET total5 = 0 LET total7 = 0 FOR i = 1 TO idx PRINT COLUMN 1,resumen[i].depto, COLUMN 20,resumen[i].nombre, COLUMN 55,resumen[i].acum_ant USING "((,(((,(((,(((.##)", COLUMN 75,resumen[i].val_per USING "((,(((,(((,(((.##)", COLUMN 100,resumen[i].acum_act USING "((,(((,(((,(((.##)", COLUMN 119,resumen[i].ano_ante USING "((,(((,(((,(((.##)" IF resumen[i].acum_ant is not null THEN LET total1 = total1 + resumen[i].acum_ant LET total2 = total2 + resumen[i].val_per LET total4 = total4 + resumen[i].acum_act LET total7 = total7 + resumen[i].ano_ante END IF END FOR PRINT COLUMN 55,"--------------", COLUMN 75,"--------------", COLUMN 100,"--------------" PRINT COLUMN 55,total1 USING "((,(((,(((,(((.##)", COLUMN 75,total2 USING "((,(((,(((,(((.##)", COLUMN 100, total4 USING "((,(((,(((,(((.##)", COLUMN 119, total7 USING "((,(((,(((,(((.##)" PRINT COLUMN 55,"==============", COLUMN 75,"==============", COLUMN 100,"==============", COLUMN 119,"==============" #PRINT COLUMN 1,comp_off SKIP TO TOP OF PAGE LET total1 = 0 LET total2 = 0 LET total3 = 0 LET total4 = 0 LET total5 = 0 LET total6 = 0 LET total7 = 0 LET total8 = 0 # Solo se imprimiran los departamentos 4 y 6 # se sumarizaran los departamentos 1,2,3,5,7 en una variable y # luego se imprimira FOR i = 1 TO idx IF resumen[i].depto=4 or resumen[i].depto=0 or resumen[i].depto=6 THEN PRINT COLUMN 1,resumen[i].depto, COLUMN 20,resumen[i].nombre, COLUMN 55,resumen[i].acum_ant USING "((,(((,(((,(((.##)", COLUMN 75,resumen[i].val_per USING "((,(((,(((,(((.##)", COLUMN 100,resumen[i].acum_act USING "((,(((,(((,(((.##)", COLUMN 119,resumen[i].ano_ante USING "((,(((,(((,(((.##)" LET total1 = total1 + resumen[i].acum_ant LET total2 = total2 + resumen[i].val_per LET total4 = total4 + resumen[i].acum_act LET total8 = total8 + resumen[i].ano_ante END IF IF resumen[i].val_per is null THEN LET resumen[i].val_per = 0 END IF IF resumen[i].acum_ant is null THEN LET resumen[i].acum_ant = 0 END IF IF resumen[i].acum_act is null THEN LET resumen[i].acum_act = 0 END IF IF resumen[i].depto = 1 or resumen[i].depto = 2 or resumen[i].depto = 3 or resumen[i].depto = 5 or resumen[i].depto = 7 THEN LET total5 = total5 + resumen[i].acum_ant LET total3 = total3 + resumen[i].val_per LET total6 = total6 + resumen[i].acum_act LET total7 = total7 + resumen[i].ano_ante END IF END FOR PRINT COLUMN 20,"ADMINISTRACION GRAL.", COLUMN 55,total5 USING "((,(((,(((,(((.##)", COLUMN 75,total3 USING "((,(((,(((,(((.##)", COLUMN 100,total6 USING "((,(((,(((,(((.##)", COLUMN 119,total7 USING "((,(((,(((,(((.##)" PRINT COLUMN 55,"--------------", COLUMN 75,"--------------", COLUMN 100,"--------------", COLUMN 119,"--------------" LET total1 = total1 + total5 LET total2 = total2 + total3 LET total4 = total4 + total6 LET total8 = total8 + total7 PRINT COLUMN 55,total1 USING "((,(((,(((,(((.##)", COLUMN 75,total2 USING "((,(((,(((,(((.##)", COLUMN 100, total4 USING "((,(((,(((,(((.##)", COLUMN 119, total8 USING "((,(((,(((,(((.##)" PRINT COLUMN 55,"==============", COLUMN 75,"==============", COLUMN 100,"==============", COLUMN 119,"==============" LET total_anterior = total1 LET actividades = total2 LET total_actual = total4 LET realizado = total8 LET total1 = 0 LET total2 = 0 LET total4 = 0 LET total8 = 0 PRINT COLUMN 1,comp_off END REPORT FUNCTION tabla_nom() LET ch_nombre[1] = "GERENCIA GENERAL" LET ch_nombre[2] = "GERENCIA FINANCIERA" LET ch_nombre[3] = "GERENCIA PERSONAL" LET ch_nombre[4] = "GERENCIA VENTAS" LET ch_nombre[5] = "GERENCIA MATERIALES" LET ch_nombre[6] = "GERENCIA PLANTA" LET ch_nombre[7] = "GERENCIA INFORMATICA" LET ch_nombre[8] = "SIN DESCRIPCION" LET ch_nombre[9] = "LA MALENA" END FUNCTION