DEFINE pano,pmes SMALLINT, titulomes,titulodepartamento VARCHAR(60), usuarios,clave,argumento,xtitulomes VARCHAR(50), titulo1,titulo2 STRING, xnumemp INT, tienegastos,tieneundepto VARCHAR(2) TYPE data RECORD categoria VARCHAR(20), mes VARCHAR(20), cuenta VARCHAR(14), descripcion VARCHAR(100), valor DEC(12,2) , departamento VARCHAR(60), codigodepto INT, otrovalor DEC(12,2), sumariza VARCHAR(2), acumulado FLOAT END RECORD MAIN CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" USER usuarios USING clave CALL reporte() END MAIN FUNCTION reporte() DEFINE hand om.SaxDocumentHandler, info STRING LET pano = YEAR(TODAY) LET pmes = MONTH(TODAY) LET pmes = 9 # Query busca el titulo del mes SELECT a.descrip INTO xtitulomes FROM mestable a WHERE a.mes = pmes # Busca la informacion del usuario SELECT b.nom_dpto,a.num_emp INTO titulodepartamento,xnumemp FROM seg0001 a,adtb00001 b,adtb00004 c,adtb00003 d WHERE a.usuario =usuarios AND a.departamento = b.departamento AND a.num_emp = d.num_emp AND d.cod_puesto = c.cod_puesto AND c.supervisor = 'SI' IF STATUS = NOTFOUND THEN EXIT PROGRAM END IF CALL setupreporte() RETURNING hand CALL ui.Interface.frontCall( "standard", "launchurl", [fgl_report_getBrowserURL()], [] ) END FUNCTION FUNCTION setupreporte() DEFINE hand om.SaxDocumentHandler, filename,r_output STRING, preview BOOLEAN, cuenta,cuentadpto INT, x data, xtitulodepartamento VARCHAR(60) LET titulomes = "Septiembre" LET filename = 'dashboard_master.4rp' LET r_output = "HTML" LET preview = TRUE LET tienegastos = "SI" LET tieneundepto = "NO" SELECT ISNULL(COUNT(*),0) INTO cuenta FROM vwanalitico a,adtb00001 b WHERE ano = pano AND numero_mes = pmes AND a.codigodepartamento = b.departamento AND b.num_emp_supervisa = xnumemp IF cuenta = 0 THEN LET tienegastos = "NO" ELSE SELECT COUNT(*) INTO cuentadpto FROM adtb00001 a WHERE a.num_emp_supervisa = xnumemp AND a.status_t IS NULL IF cuentadpto > 1 THEN DECLARE cur_depto CURSOR FOR SELECT a.nom_dpto INTO xtitulodepartamento FROM adtb00001 a WHERE a.num_emp_supervisa = xnumemp LET titulodepartamento = NULL FOREACH cur_depto LET titulodepartamento = "(",xtitulodepartamento CLIPPED,")", "(",titulodepartamento CLIPPED,")" END FOREACH LET tieneundepto = "NO" LET titulo1 = "Gastos Acumulado Por Departamento Del Mes De ",xtitulomes CLIPPED LET titulo2 = "Gastos Partidas del mes de ",xtitulomes CLIPPED ELSE LET tieneundepto = "SI" LET titulo1 = "Gastos Mensuales Del Mes De ",xtitulomes CLIPPED LET titulo2 = "Gastos Partidas del mes de ",xtitulomes CLIPPED END IF END IF # LET tienegastos="NO" IF fgl_report_loadCurrentSettings(filename) THEN CALL fgl_report_selectDevice(r_output) CALL fgl_report_selectPreview(preview) CALL fgl_report_commitCurrentSettings() RETURNING hand IF hand IS NULL THEN DISPLAY " ERROR " EXIT PROGRAM END IF END IF START REPORT master_report TO XML HANDLER hand OUTPUT TO REPORT master_report(x.*) FINISH REPORT master_report RETURN hand END FUNCTION REPORT master_report(x) DEFINE x data, i INT FORMAT FIRST PAGE HEADER PRINTX titulodepartamento LET i = 0 ON EVERY ROW START REPORT report_depto IF tieneundepto = "NO" THEN DECLARE busca_data_dpto CURSOR FOR SELECT 'GDEPTO',c.descrip,a.cuenta,a.descripcioncuenta,SUM(a.balance),a.nombredepartamento, a.codigodepartamento,c.mes FROM vwanalitico a,mestable c,adtb00001 b WHERE a.control = '7' AND a.ano = pano AND a.codigodepartamento = b.departamento AND b.num_emp_supervisa = xnumemp AND a.numero_mes <= pmes AND a.numero_mes = c.mes GROUP BY c.descrip,a.cuenta,a.descripcioncuenta,a.nombredepartamento,a.codigodepartamento, c.mes FOREACH busca_data_dpto INTO x.* OUTPUT TO REPORT report_depto(x.*) END FOREACH FINISH REPORT report_depto CLOSE busca_data_dpto ELSE DISPLAY "tiene ",tieneundepto DECLARE busca_data_dpto1 CURSOR FOR SELECT 'GDEPTO',' ',c.mes,' ',SUM(a.balance),c.descrip FROM vwanalitico a,mestable c,adtb00001 b WHERE a.control = '7' AND a.ano = pano AND a.codigodepartamento = b.departamento AND b.num_emp_supervisa = xnumemp AND a.numero_mes <= pmes AND a.numero_mes = c.mes GROUP BY c.descrip, c.mes FOREACH busca_data_dpto1 INTO x.* OUTPUT TO REPORT report_depto(x.*) END FOREACH FINISH REPORT report_depto CLOSE busca_data_dpto1 END IF START REPORT report_mes DECLARE busca_data_mes CURSOR FOR SELECT ' ',' ',a.cuenta,a.descripcioncuenta,SUM(a.balance),' ','0' FROM vwanalitico a,mestable c,adtb00001 b WHERE a.control = '7' AND a.ano = pano AND a.codigodepartamento = b.departamento AND b.num_emp_supervisa = xnumemp AND a.numero_mes = pmes AND a.numero_mes = c.mes GROUP BY a.cuenta,a.descripcioncuenta ORDER BY 5 DESC LET x.otrovalor =0 FOREACH busca_data_mes INTO x.* LET i = i + 1 IF i < 13 THEN LET x.sumariza = "NO" ELSE LET x.sumariza = "SI" LET X.descripcion = 'OTROS GASTOS' LET x.otrovalor = x.otrovalor + x.valor END IF OUTPUT TO REPORT report_mes(x.*) END FOREACH FINISH REPORT report_mes CLOSE busca_data_mes START REPORT report_detalle DECLARE busca_detalle CURSOR FOR SELECT 'GDEPTO',c.descrip,a.cuenta,a.descripcioncuenta,SUM(a.balance), a.nombredepartamento,a.codigodepartamento,'0',' ','0' FROM vwanalitico a,mestable c,adtb00001 b WHERE a.control = '7' AND a.ano = pano AND a.codigodepartamento = b.departamento AND b.num_emp_supervisa = xnumemp AND a.numero_mes = pmes AND a.numero_mes = c.mes GROUP BY c.descrip,a.cuenta,a.descripcioncuenta,a.nombredepartamento,a.codigodepartamento UNION SELECT 'GDEPTO','',a.cuenta,a.descripcioncuenta,'0', a.nombredepartamento,a.codigodepartamento,'0',' ',SUM(a.balance) FROM vwanalitico a,mestable c,adtb00001 b WHERE a.control = '7' AND a.ano = pano AND a.codigodepartamento = b.departamento AND b.num_emp_supervisa = xnumemp AND a.numero_mes <= pmes AND a.numero_mes = c.mes GROUP BY a.cuenta,a.descripcioncuenta,a.nombredepartamento, a.codigodepartamento ORDER BY a.nombredepartamento,a.cuenta FOREACH busca_detalle INTO x.* OUTPUT TO REPORT report_detalle(x.*) END FOREACH FINISH REPORT report_detalle CLOSE busca_detalle END REPORT REPORT report_depto(x) DEFINE x data ORDER EXTERNAL BY x.departamento FORMAT ON EVERY ROW PRINTX x.*,tieneundepto,titulo1 END REPORT REPORT report_mes(x) DEFINE x data ORDER EXTERNAL BY x.mes FORMAT ON EVERY ROW PRINTX x.*,tienegastos,titulomes,titulo2 END REPORT REPORT report_detalle(z) DEFINE z data, xacumulado FLOAT ORDER EXTERNAL BY z.departamento,z.cuenta FORMAT BEFORE GROUP OF z.departamento PRINTX z.departamento AFTER GROUP OF z.cuenta LET xacumulado = GROUP SUM(z.acumulado) PRINTX z.descripcion,z.valor,xacumulado END REPORT