- Titulo de ventana corregido - START REPORT se ejecuta con la primera fila; si la consulta no devuelve datos avisa "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS" en vez de generar un reporte en blanco Verificado con ano 2024 (la BD de pruebas no tiene produccion posterior a agosto de 2025): 1 pagina con 9 semielaborados por mes y total, en pantalla, PDF y Excel. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
272 lines
8.4 KiB
Plaintext
272 lines
8.4 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
|
|
|
|
DEFINE hay_filas SMALLINT
|
|
|
|
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
|
|
CALL ui.Window.getCurrent().setText("Reporte Produccion Mensual")
|
|
|
|
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'
|
|
LET fecha_actual = CURRENT YEAR TO FRACTION
|
|
|
|
DISPLAY selec5
|
|
|
|
PREPARE comando4 FROM selec5
|
|
DECLARE busca4 CURSOR FOR comando4
|
|
LET hay_filas = FALSE
|
|
|
|
FOREACH busca4 INTO prod_dia.*
|
|
|
|
IF NOT hay_filas THEN
|
|
IF fgl_report_loadCurrentSettings(r_filename) THEN
|
|
LET preview=1
|
|
CALL selectoutput() RETURNING r_output
|
|
CALL fgl_report_selectDevice(r_output)
|
|
CALL fgl_report_selectPreview(preview)
|
|
LET handler = fgl_report_commitCurrentSettings()
|
|
END IF
|
|
START REPORT reporte_mensual TO XML HANDLER HANDLER
|
|
LET hay_filas = TRUE
|
|
END IF
|
|
|
|
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
|
|
|
|
IF hay_filas THEN
|
|
FINISH REPORT reporte_mensual
|
|
ELSE
|
|
CALL fgl_winmessage("INFO", "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS", "INFO")
|
|
END IF
|
|
|
|
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
|