262 lines
8.1 KiB
Plaintext
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
|