Files
MBS/PROYECTO/TEST/reportes/dashboard.4gl
T

248 lines
8.7 KiB
Plaintext

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