Files
MBS/PROYECTO/ctdir/ctprrp014.4gl
T

262 lines
8.1 KiB
Plaintext

{
-------------------------------------------------------------------------------
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