Files
MBS/PROYECTO/PRDIR/prprrp021.4gl
T

231 lines
7.9 KiB
Plaintext

{=====================================================
FUNCION : REPORTE ANÁLISIS PRODUCCIÓN
OBJETIVO : ***************************
PROGRAMADOR : ELVIS GARCÍA
FECHA : 17 de abril, 2025
=====================================================}
GLOBALS "prprgb000.4gl"
SCHEMA smarmotech
DEFINE datos RECORD
fecha_inicial DATE,
fecha_final DATE
END RECORD,
pcompanias RECORD LIKE companias.*
DEFINE data_prod DYNAMIC ARRAY OF RECORD
descripcion LIKE cttb00001.descripcion ,
nom_departamento LIKE adtb00001.nom_dpto,
cantidad LIKE cttb00003.cantidad,
valor LIKE cttb00003.costo_gasto
END RECORD
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT * INTO pcompanias.* FROM companias
CALL analisis_produccion()
END MAIN
FUNCTION analisis_produccion()
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings()
r_filename STRING, -- filename of Report Design Document including .4rp extension
r_output STRING, -- output format option
preview INTEGER, -- TRUE/FALSE, to set preview option
criterio STRING
OPEN WINDOW HOME_FRM WITH FORM 'prfmrp021'
DIALOG ATTRIBUTE(UNBUFFERED)
INPUT BY NAME datos .*
AFTER FIELD fecha_final
IF datos.fecha_inicial IS NULL AND DATOS.fecha_final IS NOT NULL THEN
CALL fgl_winmessage("INFO", "SI ESPECIFICA UN RANGO DE FECHA DEBE INDICAR FECHA INICIAL", "INFO")
NEXT FIELD fecha_inicial
END IF
IF datos.fecha_final < datos.fecha_inicial THEN
CALL fgl_winmessage("INFO", "LA FECHA FINAL DEBE SER MAS RECIENTE A LA INICIAL", "INFO")
NEXT FIELD fecha_final
END IF
END INPUT
CONSTRUCT BY NAME criterio ON c.departamento, c.cod_prod
BEFORE CONSTRUCT
CALL departamentos()
AFTER CONSTRUCT
LET selec =
"SELECT '(' + CAST(a.cod_prod AS VARCHAR) + ') ' + a.descripcion, b.nom_dpto, SUM(c.cantidad) as cantidad, SUM(c.costo_gasto) as valor
FROM cttb00003 c inner join adtb00001 b on c.departamento = b.departamento
INNER JOIN cttb00001 a on a.cod_prod = c.cod_prod
WHERE c.fecha between '",datos.fecha_inicial USING "MM/DD/YYYY","' AND '",datos.fecha_final USING "MM/DD/YYYY" ,"'
AND c.status_t IS NULL AND ",criterio CLIPPED,"
group by a.cod_prod, a.descripcion, b.nom_dpto"
PREPARE comando FROM selec
DECLARE produccion CURSOR FOR comando
LET r_filename = 'prprrp021.4rp'
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
LET preview=1
CALL seleccionarsalida() RETURNING r_output
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
IF HANDLER IS NOT NULL THEN
START REPORT analisis_prod TO XML HANDLER HANDLER
LET idx = 1
FOREACH produccion INTO data_prod[idx].*
OUTPUT TO REPORT analisis_prod(data_prod[idx].*,datos.*)
LET idx = idx + 1
END FOREACH
IF idx > 1 THEN
FINISH REPORT analisis_prod
ELSE
CALL fgl_winmessage("INFO", "NO HAY REGISTROS EN ESTE RANGO DE FECHA Y CON LOS PARAMETROS INDICADOS", "INFO")
NEXT FIELD fecha_final
END IF
END IF
END CONSTRUCT
ON ACTION CANCEL
CALL msg(2)
LET INT_FLAG = FALSE
EXIT PROGRAM
END DIALOG
CLOSE WINDOW HOME_FRM
END FUNCTION
REPORT analisis_prod(x, y)
DEFINE x RECORD
descripcion LIKE cttb00001.descripcion ,
nom_departamento LIKE adtb00001.nom_dpto,
cantidad LIKE cttb00003.cantidad,
valor LIKE cttb00003.costo_gasto
END RECORD
DEFINE y RECORD
fecha_inicial DATE,
fecha_final DATE
END RECORD
DEFINE fecha_reporte DATE, rango_fecha VARCHAR(75), total_cantidad, total_valor FLOAT
ORDER BY x.nom_departamento,x.descripcion
FORMAT
BEFORE GROUP OF x.nom_departamento
LET total_cantidad = 0
LET total_valor = 0
ON EVERY ROW
LET fecha_reporte = CURRENT USING "MM/DD/YYYY"
LET rango_fecha = y.fecha_inicial,'--',y.fecha_final
PRINTX rango_fecha, x.descripcion, x.nom_departamento, x.cantidad, x.valor, fecha_reporte
AFTER GROUP OF x.nom_departamento
LET total_cantidad = GROUP SUM(x.cantidad)
LET total_valor = GROUP SUM(x.valor)
PRINTX total_cantidad, total_valor
END REPORT
FUNCTION seleccionarSalida()
DEFINE
r_output STRING, -- output format option
r_action STRING, -- used to set preview option
r_filename STRING, -- filename of Report Design document (the .4rp filename)
preview INTEGER -- preview option TRUE/FALSE, to display report in Report Viewer
-- display form allowing user to select the .4rp filename and output options
#CLOSE WINDOW SCREEN
OPTIONS INPUT WRAP
OPEN WINDOW f_configuration WITH FORM "Configuration"
LET INT_FLAG=FALSE
LET preview = FALSE
INPUT BY NAME r_output
ON ACTION CANCEL
EXIT PROGRAM
ON ACTION CLOSE
EXIT PROGRAM
END INPUT
CLOSE WINDOW f_configuration
CALL ui.interface.refresh()
-- set preview variable to match output option r_action
IF r_action IS NOT NULL THEN
IF r_action == "preview" THEN
LET preview = TRUE
END IF
END IF
--return report name (filename of Report Design Document) and output option variables to be used to configure the report engine
RETURN r_output
END FUNCTION
FUNCTION departamentos()
DEFINE pdepartamento SMALLINT,pdescripcion CHAR(30),
kdepto ui.ComboBox
LET kdepto = ui.ComboBox.forName("formonly.departamento")
CALL kdepto.clear()
DECLARE busca_dpto CURSOR FOR
SELECT a.departamento,a.nom_dpto FROM adtb00001 a
WHERE a.status_t IS NULL
ORDER BY a.nom_dpto
FOREACH busca_dpto INTO pdepartamento,pdescripcion
CALL kdepto.additem(pdepartamento,pdescripcion)
END FOREACH
END FUNCTION
FUNCTION msg(numero_msg)
DEFINE numero_msg SMALLINT
DEFINE descripcion CHAR (60)
SELECT desc_msg INTO descripcion FROM msgtable
WHERE cod_msg = numero_msg
IF status = NOTFOUND THEN
SELECT desc_msg INTO descripcion FROM msgtable
WHERE cod_msg = 22
LET descripcion = descripcion CLIPPED,numero_msg using "<<<<"
ERROR descripcion ATTRIBUTE(BOLD)
ELSE
ERROR descripcion ATTRIBUTE(BOLD)
LET numero_msg = 0
END IF
END FUNCTION