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

565 lines
19 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : CTPRRP004
OBJETIVO : Produccion Diaria
PROGRAMADOR : Ing. Elvis García
FECHA : Enero 28, 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 CHAR(4)
DEFINE jdx INTEGER
DEFINE fecha_inicio, fecha_corte, fecha1 DATE, reporte_tipo INT
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
num_doc INT,
fecha DATE,
departamento VARCHAR(100),
cod_prod LIKE cttb00008.cod_prod,
cp_desc VARCHAR(100),
medidas VARCHAR(75),
cantidad DECIMAL(12, 2),
costo_lab DECIMAL(12, 2),
valor DECIMAL(12, 2)
END RECORD
OPTIONS ERROR LINE 24, FORM LINE 8
OPEN FORM ctfmrp004 FROM "ctfmrp004"
DISPLAY FORM ctfmrp004
CONSTRUCT criterio ON c.departamento, c.cod_prod FROM departamento, cod_prod
BEFORE CONSTRUCT
CALL departamentos_produccion()
END CONSTRUCT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
INPUT BY NAME fecha_inicio, fecha_corte, reporte_tipo ATTRIBUTES(WITHOUT DEFAULTS, UNBUFFERED)
BEFORE INPUT
LET fecha_inicio = CURRENT
LET fecha_corte = CURRENT
LET reporte_tipo = 1
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET jdx = (fecha_corte - fecha_inicio) + 1
LET anos = YEAR(fecha_inicio) USING "&&&&"
SELECT a.fecha_inicio
INTO fecha1
FROM prdtable a
WHERE a.ano = anos AND a.mes = 1
IF reporte_tipo = 1 THEN
LET selec5 =
"SELECT DISTINCT c.num_doc, c.fecha, CONCAT('(',c.departamento,') ', f.nom_dpto) as departamento,c.cod_prod,Ltrim(e.descripcion) as semielaborado,
CONCAT(ISNULL(c.lado1,0),'x',ISNULL(c.lado2,0),'x',ISNULL(c.lado3,0)) as Medida,ISNULL(sum(cantidad),0) as cantidad,
CAST(ISNULL(a.costo_lab,0) as decimal(12,2)) as costo_lab, CAST(ISNULL((sum(cantidad) * a.costo_lab),0) as DECIMAL(12,2)) as VALOR
FROM cttb00003 c inner join cttb00001 e on c.cod_prod = e.cod_prod LEFT OUTER JOIN cttb00034 a ON a.cod_prod = c.cod_prod,iptb00022 d, adtb00001 f
WHERE e.cod_cia = d.cod_cia and c.cod_prod = a.cod_prod AND c.cod_prod is not null AND f.departamento = c.departamento AND
c.status_t IS NULL AND c.fecha BETWEEN '",
fecha_inicio USING 'yyyy-mm-dd',
"'
AND '",
fecha_corte USING 'yyyy-mm-dd',
"' AND ",
criterio CLIPPED, --" a.fecha = ? and ",
" GROUP BY c.departamento, f.nom_dpto, c.cod_prod, e.descripcion,
c.lado1,c.lado2,c.lado3, a.costo_lab, c.num_doc, c.fecha
ORDER BY departamento, c.cod_prod, c.num_doc, c.fecha "
ELSE
LET selec5 =
"WITH costo_actual AS (
SELECT
cod_prod,
costo_lab,
fecha,
ROW_NUMBER() OVER (
PARTITION BY cod_prod
ORDER BY fecha DESC
) AS rn
FROM cttb00034
)
SELECT DISTINCT NULL,NULL,
CONCAT('(',c.departamento,') ', f.nom_dpto) AS departamento,
c.cod_prod,
LTRIM(e.descripcion) AS semielaborado,
CONCAT(ISNULL(c.lado1,0),'x',ISNULL(c.lado2,0),'x',ISNULL(c.lado3,0)) AS Medida,
ISNULL(SUM(c.cantidad),0) AS cantidad,
CAST(ISNULL(a.costo_lab,0) AS DECIMAL(12,2)) AS costo_lab,
CAST(ISNULL(SUM(c.cantidad) * a.costo_lab,0) AS DECIMAL(12,2)) AS VALOR
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
, iptb00022 d
, adtb00001 f
WHERE
e.cod_cia = d.cod_cia
AND c.cod_prod IS NOT NULL
AND c.status_t IS NULL
AND c.fecha BETWEEN '",
fecha_inicio USING 'yyyy-mm-dd',
"'
AND '",
fecha_corte USING 'yyyy-mm-dd',
"' AND ",
criterio CLIPPED,"
AND f.departamento = c.departamento
GROUP BY
c.departamento,
f.nom_dpto,
c.cod_prod,
e.descripcion,
c.lado1,
c.lado2,
c.lado3,
a.costo_lab,
c.num_doc,
c.fecha;"
END IF
DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>"
AT 19, 14
ATTRIBUTE(REVERSE, BOLD)
LET r_filename = 'ctprrp004.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_detallado 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 reporte_tipo <> 1 THEN
LET prod_dia.num_doc = 0
LET prod_dia.fecha = CURRENT
END IF
OUTPUT TO REPORT reporte_detallado(
prod_dia.*, fecha_inicio, fecha_corte, fecha_actual)
END FOREACH
FINISH REPORT reporte_detallado
IF abortar_reporte THEN
RETURN
END IF
END FUNCTION
REPORT reporte_detallado(x, fech_inicio, fech_corte, fecha_actual)
DEFINE
x RECORD
num_doc INT,
fecha DATE,
departamento VARCHAR(100),
cod_prod LIKE cttb00008.cod_prod,
cp_desc VARCHAR(100),
medidas VARCHAR(75),
cantidad DECIMAL(12, 2),
costo_lab DECIMAL(12, 2),
valor DECIMAL(12, 2)
END RECORD,
fech_inicio DATE,
fech_corte DATE,
fecha_actual DATETIME YEAR TO FRACTION
DEFINE
cantidad_depto, costo_depto, valor_depto DECIMAL(12, 2),
registros_depto INT
DEFINE
total_cantidad, total_costo, total_valor DECIMAL(12, 2),
total_registros INT
FORMAT
FIRST PAGE HEADER
PRINTX fech_inicio, fech_corte, fecha_actual
AFTER GROUP OF x.departamento
LET cantidad_depto = GROUP SUM(x.cantidad)
LET costo_depto = GROUP SUM(x.costo_lab)
LET valor_depto = GROUP SUM(x.valor)
LET registros_depto = GROUP COUNT(*)
PRINTX cantidad_depto, costo_depto, valor_depto, registros_depto
ON EVERY ROW
PRINTX x.num_doc, x.fecha, x.departamento, x.cod_prod, x.cp_desc,
x.medidas, x.cantidad, x.costo_lab, x.valor
ON LAST ROW
LET total_cantidad = SUM(x.cantidad)
LET total_costo = SUM(x.costo_lab)
LET total_valor = SUM(x.valor)
LET total_registros = COUNT(*)
PRINTX total_cantidad, total_costo, total_valor, total_registros
END REPORT
######## Preparando formato en la salida de informacion impresa ########
--REPORT reporte_4(x)
--DEFINE x RECORD
-- origen CHAR(30),
-- departamento LIKE cttb00008.departamento,
-- cod_prod LIKE cttb00008.cod_prod,
-- valor_labor LIKE cttb00008.valor_labor,
-- gasto_ind LIKE cttb00029.gasto_ind,
-- fecha DATE,
-- cantidad DECIMAL(12,2)
--END RECORD
--DEFINE dia DYNAMIC ARRAY OF SMALLINT
--DEFINE fecha3,fecha4,fecha5 DATE
--DEFINE i INTEGER
--DEFINE cantidad1,labor,gasto,labor1,gasto1 DECIMAL(12,2)
--
--DEFINE unidad,descrp1,nomb,nombre CHAR(20)
--DEFINE descr CHAR(20)
--DEFINE total,total2,total3,total4,total5,total6,total7,total8,total9
-- DECIMAL(13,8)
--DEFINE fact_hombre,valor_labor,hora_hombre,valor_real,factor_conv
-- DECIMAL(13,8)
--DEFINE j,total1 INTEGER
--DEFINE doce,comp_on,comp_off,normal,negrillas_on,negrillas_off CHAR(2)
--
--OUTPUT
-- LEFT MARGIN 00
-- ORDER BY x.origen,x.departamento,x.cod_prod,x.fecha
--
--FORMAT
-- PAGE HEADER
-- LET comp_on = ASCII 15
-- LET comp_off = ASCII 18
-- LET normal = ASCII 27,ASCII 80
-- LET negrillas_on = ASCII 27, ASCII 69
-- LET negrillas_off = ASCII 27, ASCII 70
-- LET doce = ASCII 27, ASCII 77
-- LET l = (127 - LENGTH(p_compania.nombre CLIPPED)) /2
-- PRINT doce,comp_on,negrillas_on
-- PRINT COLUMN 1,"ctprrp004",
-- COLUMN l,p_compania.nombre CLIPPED,
-- COLUMN 120, "Pag. ",pageno using "###"
-- LET l = (127 - LENGTH("INVENTARIO DE PRODUCTOS EN PROCESO")) /2
-- PRINT COLUMN l, "INVENTARIO DE PRODUCTOS EN PROCESO",
-- COLUMN 120, today using "dd/mm/yyyy"
-- LET l = (127 - LENGTH("Reporte de Produccion Diaria")) /2
-- PRINT COLUMN l, "Reporte de Produccion Diaria",
-- COLUMN 120, time
-- PRINT COLUMN 51, "DEL ",fecha_inicio USING "dd/mm/yyyy", " Al ",
-- fecha_corte USING "dd/mm/yyyy",comp_on
-- SKIP 1 LINE
--
-- PRINT COLUMN 1,
-- "----------------------------------------------------------------------------",
-- "----------------------------------------------------------------------------",
-- "--------------------------------------------------------------------"
-- PRINT COLUMN 29,"|";
-- LET i = 30
-- FOR idx = 1 to jdx
--
-- PRINT COLUMN i, " |";
-- LET i = i + 11
-- END FOR
-- PRINT COLUMN i, " Total |",
-- COLUMN i+14, " Std |",
-- COLUMN i+24, " |",
-- COLUMN i+38, " Std |",
-- COLUMN i+48, " |"
-- PRINT COLUMN 29, "|";
-- LET i = 30
-- LET fecha1 = fecha_inicio
-- FOR idx = 1 to jdx
-- PRINT COLUMN i, " Dia(",DAY(fecha1) USING "&&",") |";
-- LET i = i + 11
-- LET fecha1 = fecha1 + 1
-- END FOR
-- PRINT COLUMN i, " Semana |",
-- COLUMN i+14, " Labor |",
-- COLUMN i+24, " Valor |",
-- COLUMN i+38, " Gasto |",
-- COLUMN i+48, " Valor |"
--
-- PRINT COLUMN 1,
-- "----------------------------------------------------------------------------",
-- "----------------------------------------------------------------------------",
-- "--------------------------------------------------------------------"
-- PRINT negrillas_off
--BEFORE GROUP OF x.origen
-- SKIP 1 LINE
-- PRINT "ORIGEN: ",x.origen
-- SKIP 1 LINE
--BEFORE GROUP OF x.departamento
-- PRINT COLUMN 29,"|";
-- LET i = 30
-- FOR idx = 1 to jdx
-- PRINT COLUMN i, " |";
-- LET i = i + 11
-- END FOR
-- PRINT COLUMN i, " |",
-- COLUMN i+14, " |",
-- COLUMN i+24, " |",
-- COLUMN i+38, " |",
-- COLUMN i+48, " |"
--
-- SELECT b.nom_dpto INTO nomb FROM adtb00001 b
-- WHERE b.departamento = x.departamento
--
-- PRINT COLUMN 1, negrillas_on,x.departamento USING "&&&&"," ",
-- nomb clipped,negrillas_off;
--
-- PRINT COLUMN 33, "|";
-- LET i = 34
-- FOR idx = 1 to jdx
-- PRINT COLUMN i, " |";
-- LET i = i + 11
-- END FOR
-- PRINT COLUMN i, " |",
-- COLUMN i+14, " |",
-- COLUMN i+24, " |",
-- COLUMN i+38, " |",
-- COLUMN i+48, " |"
--
-- IF total1 IS NULL THEN
-- LET total1 = 0
-- END IF
--
--BEFORE GROUP OF x.cod_prod
-- LET idx = 1
-- LET nombre = NULL
-- SELECT a.descripcion INTO nombre FROM cttb00001 a
-- WHERE a.cod_prod = x.cod_prod
--
-- PRINT COLUMN 2, x.cod_prod USING "&&&&"," ",
-- nombre clipped,
-- COLUMN 29,"|";
--
-- LET i = 30
--ON EVERY ROW
-- PRINT COLUMN i,x.cantidad USING "###,##&.&&","|";
-- LET i = i + 11
--
--AFTER GROUP OF x.cod_prod
-- PRINT COLUMN i, GROUP SUM(x.cantidad) USING "##,###,##&.&&","|",
-- COLUMN i+14, x.valor_labor USING "##,##&.&&","|",
-- COLUMN i+24, (GROUP SUM(x.cantidad))*x.valor_labor
-- USING "##,###,##&.&&","|",
-- COLUMN i+38, x.gasto_ind USING "##,##&.&&","|",
-- COLUMN i+48, (GROUP SUM(x.cantidad))*x.gasto_ind
-- USING "##,###,##&.&&","|"
--
-- IF labor IS NULL THEN
-- LET labor = 0
-- END IF
-- IF gasto IS NULL THEN
-- LET gasto = 0
-- END IF
-- LET labor = labor+((GROUP SUM(x.cantidad))* GROUP AVG(x.valor_labor))
-- LET gasto = gasto+((GROUP SUM(x.cantidad))* GROUP AVG(x.gasto_ind))
--AFTER GROUP OF x.origen
-- PRINT COLUMN 10, x.origen,"---> ",
-- COLUMN i, GROUP SUM(x.cantidad) USING "##,###,##&.&&","|",
-- COLUMN i+14, x.valor_labor USING "##,##&.&&","|",
-- COLUMN i+24, (GROUP SUM(x.cantidad))*x.valor_labor
-- USING "##,###,##&.&&","|",
-- COLUMN i+38, x.gasto_ind USING "##,##&.&&","|",
-- COLUMN i+48, (GROUP SUM(x.cantidad))*x.gasto_ind
-- USING "##,###,##&.&&","|"
--
--
--ON LAST ROW
--
-- PRINT COLUMN 1,negrillas_on
-- PRINT COLUMN 1,
-- "----------------------------------------------------------------------------",
-- "----------------------------------------------------------------------------",
-- "--------------------------------------------------------------------"
-- PRINT COLUMN 10,"Totales --->";
-- LET j = 30
-- FOR idx = 1 TO jdx
-- PRINT COLUMN j, " "; #total_1[idx] USING " ";
-- LET j = j + 11
-- END FOR
-- PRINT COLUMN j+2, " ",#SUM(x.cantidad) USING "#,###,###,##&.&&","|",
-- COLUMN j+24, labor USING "##,###,##&.&&",
-- COLUMN j+48, gasto USING "##,###,##&.&&"
-- LET labor = 0
-- LET gasto = 0
--
-- PRINT COLUMN 1,
-- "============================================================================",
-- "============================================================================",
-- "===================================================================="
-- FOR idx = 1 to jdx
-- LET total_1[idx] = 0
-- END FOR
-- PRINT COLUMN 1,negrillas_off,normal,comp_off
--END REPORT
--FUNCTION busca_semana()
--
-- OPEN WINDOW b_semana AT 10,10 WITH FORM "ctfmwd001"
-- ATTRIBUTE(BORDER,FORM LINE FIRST + 1)
--
-- INPUT BY NAME ano,mes
--
-- AFTER FIELD ano
-- IF ano IS NULL THEN
-- LET numero_msg = 16
-- CALL msg(numero_msg)
-- NEXT FIELD ano
-- END IF
--
-- AFTER FIELD mes
-- IF mes IS NULL THEN
-- LET numero_msg = 16
-- CALL msg(numero_msg)
-- NEXT FIELD mes
-- END IF
-- END INPUT
--
-- DECLARE buscar CURSOR FOR
-- SELECT a.num_semana,a.semana_del,a.semana_al FROM prtb00002 a
-- WHERE a.mes = mes AND a.ano = ano
--
-- LET idx = 1
-- FOREACH buscar INTO datos_semana[idx].*
-- LET idx = idx + 1
-- END FOREACH
--
-- CALL SET_COUNT(idx - 1)
--
-- DISPLAY ARRAY datos_semana TO scr_seman.*
-- LET curr = scr_line()
-- CLOSE WINDOW b_semana
-- RUN "type C:\\archivo > %USPRINT%" END FUNCTION
FUNCTION departamentos_produccion()
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 AND a.tipo_departamento = 'PRODUCCION'
ORDER BY a.nom_dpto
FOREACH busca_dpto INTO pdepartamento, pdescripcion
CALL kdepto.additem(pdepartamento, pdescripcion)
END FOREACH
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
#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 configureOutput(tipo_file)
DEFINE tipo_file CHAR(3)
IF NOT fgl_report_loadCurrentSettings(NULL) THEN
RETURN NULL
END IF
# CALL fgl_report_selectLogicalPageMapping("multipage")
# CALL fgl_report_configureMultipageOutput(2, 4, TRUE)
CALL fgl_report_setPageMargins("0.5cm", "0.5cm", "0.5cm", "0.5cm")
--CALL fgl_report_selectDevice("XLS")
# CALL fgl_report_selectDevice(getPreviewDevice())
# CALL fgl_report_configureCompatibilityOutput(1,'Franklin Gothic Heavy',false,'existencia',NULL,NULL)
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