{ ------------------------------------------------------------------------------- PROGRAMA : CTPRRP014 OBJETIVO : Reporte Produccion Mensual PROGRAMADOR : Ing. Elvis García FECHA : Febrero 4, 2026. ------------------------------------------------------------------------------- } GLOBALS "ctprgb000.4gl" DEFINE abortar_reporte BOOLEAN, fecha_actual DATETIME YEAR TO FRACTION 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 DEFINE selec5 STRING DEFINE anos STRING 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 ctprrp004() END MAIN FUNCTION ctprrp004() DEFINE prod_dia RECORD semielaborado STRING, enero DECIMAL(12,2), febrero DECIMAL(12,2), marzo DECIMAL(12,2), abril DECIMAL(12,2), mayo DECIMAL(12,2), junio DECIMAL(12,2), julio DECIMAL(12,2), agosto DECIMAL(12,2), septiembre DECIMAL(12,2), octubre DECIMAL(12,2), noviembre DECIMAL(12,2), diciembre DECIMAL(12,2), total DECIMAL(12,2) END RECORD OPTIONS ERROR LINE 24, FORM LINE 8 OPEN FORM ctfmrp004 FROM "ctfmrp014" DISPLAY FORM ctfmrp004 CONSTRUCT criterio ON c.cod_prod FROM cod_prod BEFORE CONSTRUCT CALL anos() END CONSTRUCT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF INPUT BY NAME anos ATTRIBUTES(WITHOUT DEFAULTS, UNBUFFERED) BEFORE INPUT CALL anos() LET anos = YEAR(CURRENT) END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET selec5 = "WITH costo_actual AS ( SELECT cod_prod, costo_lab, ROW_NUMBER() OVER ( PARTITION BY cod_prod ORDER BY fecha DESC ) AS rn FROM cttb00034 ) SELECT CONCAT('(',c.cod_prod,') ',RTRIM(e.descripcion)), ISNULL(SUM(CASE WHEN MONTH(c.fecha) = 1 THEN c.cantidad * a.costo_lab ELSE 0 END),0) AS enero, ISNULL(SUM(CASE WHEN MONTH(c.fecha) = 2 THEN c.cantidad * a.costo_lab ELSE 0 END),0) AS febrero, ISNULL(SUM(CASE WHEN MONTH(c.fecha) = 3 THEN c.cantidad * a.costo_lab ELSE 0 END),0) AS marzo, ISNULL(SUM(CASE WHEN MONTH(c.fecha) = 4 THEN c.cantidad * a.costo_lab ELSE 0 END),0) AS abril, ISNULL(SUM(CASE WHEN MONTH(c.fecha) = 5 THEN c.cantidad * a.costo_lab ELSE 0 END),0) AS mayo, ISNULL(SUM(CASE WHEN MONTH(c.fecha) = 6 THEN c.cantidad * a.costo_lab ELSE 0 END),0) AS junio, ISNULL(SUM(CASE WHEN MONTH(c.fecha) = 7 THEN c.cantidad * a.costo_lab ELSE 0 END),0) AS julio, ISNULL(SUM(CASE WHEN MONTH(c.fecha) = 8 THEN c.cantidad * a.costo_lab ELSE 0 END),0) AS agosto, ISNULL(SUM(CASE WHEN MONTH(c.fecha) = 9 THEN c.cantidad * a.costo_lab ELSE 0 END),0) AS septiembre, ISNULL(SUM(CASE WHEN MONTH(c.fecha) = 10 THEN c.cantidad * a.costo_lab ELSE 0 END),0) AS octubre, ISNULL(SUM(CASE WHEN MONTH(c.fecha) = 11 THEN c.cantidad * a.costo_lab ELSE 0 END),0) AS noviembre, ISNULL(SUM(CASE WHEN MONTH(c.fecha) = 12 THEN c.cantidad * a.costo_lab ELSE 0 END),0) AS diciembre, ISNULL(SUM(c.cantidad * a.costo_lab),0) AS total FROM cttb00003 c INNER JOIN cttb00001 e ON c.cod_prod = e.cod_prod LEFT JOIN costo_actual a ON a.cod_prod = c.cod_prod AND a.rn = 1 WHERE c.status_t IS NULL AND ",criterio," AND YEAR(c.fecha) = ",anos," GROUP BY c.cod_prod, e.descripcion;" DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19, 14 ATTRIBUTE(REVERSE, BOLD) LET r_filename = 'ctprrp014.4rp' IF fgl_report_loadCurrentSettings(r_filename) THEN LET preview=1 CALL selectoutput() 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 START REPORT reporte_mensual TO XML HANDLER HANDLER LET fecha_actual = CURRENT YEAR TO FRACTION DISPLAY selec5 PREPARE comando4 FROM selec5 DECLARE busca4 CURSOR FOR comando4 FOREACH busca4 INTO prod_dia.* IF prod_dia.semielaborado IS NULL THEN LET abortar_reporte = TRUE; END IF OUTPUT TO REPORT reporte_mensual(prod_dia.*, anos, fecha_actual); END FOREACH FINISH REPORT reporte_mensual IF abortar_reporte THEN RETURN END IF END FUNCTION REPORT reporte_mensual(x, ano, fecha_actual) DEFINE x RECORD semielaborado STRING, enero DECIMAL(12,2), febrero DECIMAL(12,2), marzo DECIMAL(12,2), abril DECIMAL(12,2), mayo DECIMAL(12,2), junio DECIMAL(12,2), julio DECIMAL(12,2), agosto DECIMAL(12,2), septiembre DECIMAL(12,2), octubre DECIMAL(12,2), noviembre DECIMAL(12,2), diciembre DECIMAL(12,2), total DECIMAL(12,2) END RECORD, ano STRING, fecha_actual DATETIME YEAR TO FRACTION FORMAT FIRST PAGE HEADER PRINTX ano, fecha_actual ON EVERY ROW PRINTX x.* END REPORT FUNCTION anos() DEFINE pano SMALLINT, kano ui.ComboBox LET kano = ui.ComboBox.forName("formonly.anos") CALL kano.clear() LET pano = YEAR(CURRENT) - 20 CALL kano.additem(pano, pano) FOR idx = 1 TO 20 LET pano = pano + 1 CALL kano.additem(pano, pano) END FOR END FUNCTION FUNCTION selectOutput() 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 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 configureOutput(tipo_file) DEFINE tipo_file CHAR(3) IF NOT fgl_report_loadCurrentSettings(NULL) THEN RETURN NULL END IF CALL fgl_report_setPageMargins("0.5cm", "0.5cm", "0.5cm", "0.5cm") CALL fgl_report_selectDevice(tipo_file) CALL fgl_report_configurexlsxdevice(NULL, NULL, NULL, FALSE, FALSE, NULL, 1) CALL fgl_report_selectPreview(TRUE) RETURN fgl_report_commitCurrentSettings() RETURN NULL END FUNCTION