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