{ ------------------------------------------------------------------------------- PROGRAMA : IPPRRP052 OBJETIVO : CATALOGO DE PRODUCTOS TERMINADOS PARA CONTEO CICLICO CATEGORIZADOS PROGRAMADOR : JUAN SOTO FECHA REALIZACION : 3 Febrero, 2025 ------------------------------------------------------------------------------- } GLOBALS "ipprgb000.4gl" DEFINE tipo_info VARCHAR(30), formato VARCHAR(3), cod_lista SMALLINT, bodega,cuenta,cantidad_imprime,porc_imprimiendo INT, titulo_bodega,aimprimir,tipoinventario,tituloInventario STRING, porciento DEC(12,2) 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 * INTO p_companias.* FROM companias CALL ipprrp002() END MAIN FUNCTION ipprrp002() DEFINE producto RECORD cod_cia SMALLINT, cod_n LIKE iptb00002.cod_n, cod_grupo LIKE iptb00002.cod_grupo, cod_tipo LIKE iptb00002.cod_tipo, cod_sec LIKE iptb00002.cod_sec, descrip_esp LIKE iptb00002.descrip_esp, unidad_med LIKE iptb00002.unidad_med, categoria LIKE iptb00002.categoria, semana_del, semana_al DATE, existencia DEC(12,4), estado VARCHAR(50) END RECORD, codigo CHAR(4), codigo_n smallint, nombre_imp CHAR(11), fecha2 DATE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN OPEN FORM ipfmrp050 FROM "ipfmrp052" DISPLAY FORM ipfmrp050 DISPLAY "ipprrp002" AT 4,3 DISPLAY "Catalogo Productos " AT 6,33 LET nombre_ant = "E" DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME tipoinventario, bodega,fecha1,fecha2 AFTER FIELD tipoinventario IF tipoinventario IS NULL THEN CALL msg(16) NEXT FIELD tipoinventario END IF IF tipoinventario = "RP" THEN LET titulo_bodega = 'REPUESTOS' NEXT FIELD cod_n END IF BEFORE FIELD bodega IF tipoinventario = 'PT' THEN CALL bodegas("1") END IF AFTER FIELD bodega IF tipoinventario = 'PT' THEN IF bodega IS NULL THEN CALL msg(16) NEXT FIELD bodega END IF SELECT a.descripcion INTO titulo_bodega FROM intb00009 a WHERE a.cod_bodega = bodega END IF BEFORE FIELD fecha1 SELECT MIN(a.semana_del) INTO fecha1 FROM intb00015 a WHERE a.semana_del >= TODAY AND a.estado = 'Pendiente' DISPLAY BY NAME fecha1 BEFORE FIELD fecha2 SELECT MIN(a.semana_al) INTO fecha2 FROM intb00015 a WHERE a.semana_al >= TODAY AND a.estado = 'Pendiente' DISPLAY BY NAME fecha2 AFTER INPUT IF tipoinventario ="PT" AND bodega IS NULL THEN CALL msg(16) NEXT FIELD bodega END IF IF fecha1 > fecha2 THEN CALL msg(64) NEXT FIELD fecha1 END IF END INPUT CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec FROM cod_n,cod_grupo,cod_tipo,cod_sec ON ACTION generar ATTRIBUTE(TEXT="Genera Reporte",IMAGE="printer") # CALL cuentaitems() IF tipoinventario = 'PT' THEN LET SELEC = "SELECT a.cod_cia,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ", " a.unidad_med,a.categoria,c.semana_del,c.semana_al, ISNULL(SUM(b.cantidad_2),0),c.estado FROM iptb00002 a INNER JOIN intb00015 c ON c.cod_n = a.cod_n AND c.cod_grupo = a.cod_grupo AND c.cod_tipo = a.cod_tipo AND c.cod_sec = a.cod_Sec AND c.bodega = ",bodega, " LEFT OUTER JOIN iptb00006 b ON ", " a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_Sec and b.bodega = ",bodega , " and b.status_t is null ", "WHERE a.status_t is NULL ", " AND c.semana_del = '",fecha1 USING "mm/dd/yyyy","' AND c.semana_al='",fecha2 USING "mm/dd/yyyy","' ", " AND ",criterio CLIPPED, " GROUP BY a.categoria,a.cod_cia,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med,c.semana_del,c.semana_al,c.estado ", " ORDER BY a.cod_cia,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec" END IF --run the report -- configure report engine; the functions prefixed fgl that are called here are part of the GRW API CALL seleccionarSalida() RETURNING r_output LET r_filename = "ipprrp052.4rp" iF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file LET preview=1 CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes ELSE EXIT PROGRAM END IF #LET handler= fgl_report_createProcessLevelDataFile("datos.xml") --run the report IF handler IS NOT NULL THEN -- report engine was configured ok PREPARE busca FROM selec DECLARE accion CURSOR FOR busca LET idx = 1 FOREACH accion INTO producto.* IF idx = 1 THEN START REPORT catalogo TO XML HANDLER HANDLER END IF { IF porc_imprimiendo >= porciento THEN EXIT FOREACH END IF} OUTPUT TO REPORT catalogo(producto.*) LET idx = idx + 1 LET porc_imprimiendo = (idx /cuenta) *100 END FOREACH IF idx = 1 THEN CALL fgl_winmessage("info","NO EXISTEN REGISTROS","stop") ELSE FINISH REPORT catalogo END IF END IF AFTER CONSTRUCT END CONSTRUCT ON ACTION CANCEL EXIT PROGRAM END DIALOG END FUNCTION REPORT catalogo(x) DEFINE x RECORD cod_cia SMALLINT, cod_n LIKE iptb00002.cod_n, cod_grupo LIKE iptb00002.cod_grupo, cod_tipo LIKE iptb00002.cod_tipo, cod_sec LIKE iptb00002.cod_sec, descrip_esp LIKE iptb00002.descrip_esp, unidad_med LIKE iptb00002.unidad_med, categoria LIKE iptb00002.categoria, semana_del, semana_al DATE, existencia DEC(12,4), estado VARCHAR(50) END RECORD, fecha_venta CHAR(10), ttipo DEC(12,3), etiqueta CHAR(30) DEFINE pgrupo,pproducto CHAR(30), hora CHAR(5), prec_rd,prec_local_usd,prec_exp_usd,prec_euro,total_inv,valor_inv DECIMAL(12,2), cuenta_grupo SMALLINT, cuenta_total INT, pcodigo CHAR(25), fecha DATE ORDER BY x.cod_n,x.cod_grupo,x.cod_tipo FORMAT FIRST PAGE HEADER LET hora = time LET cuenta_grupo = 0 LET cuenta_total = 0 LET fecha = today LET ttipo = 0 LET total_inv=0 PRINTX titulo_bodega ON EVERY ROW # LET ttipo = ttipo + x.existencia LET prec_rd = 0 LET prec_local_usd = 0 LET prec_exp_usd =0 LET prec_euro = 0 LET fecha_venta = NULL LET pcodigo = x.cod_n USING "&&&&","-", x.cod_grupo USING "&&&&","-", x.cod_tipo USING "&&&&","-", x.cod_sec USING "&&&&&&" LET pproducto = 'NO TIENE' LET cuenta_total = cuenta_total + 1 PRINTX x.*,p_companias.*,hora,p_iptb20.producto, prec_rd,prec_local_usd,prec_exp_usd,prec_euro, cuenta_total,cuenta_grupo,pcodigo,pproducto, fecha,tipo_info,pgrupo,fecha_venta,etiqueta,total_inv,valor_inv,aimprimir,porciento, tituloinventario ON LAST ROW LET ttipo = SUM(x.existencia) PRINTX ttipo END REPORT FUNCTION cuentaitems() DEFINE pcodn,pcodgrupo,pcodtipo,pcodsec INT IF tipoinventario = "PT" THEN LET tituloInventario = 'PRODUCTOS TERMINADOS' IF aimprimir = 'TODOS' THEN LET selec = "SELECT DISTINCT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec FROM iptb00006 a WHERE a.status_t IS NULL AND ",criterio CLIPPED, " AND a.bodega = ",bodega ELSE LET selec = "SELECT DISTINCT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,SUM(a.cantidad_2) FROM iptb00006 a WHERE a.status_t IS NULL AND ",criterio CLIPPED, "and a.bodega = ",bodega, " GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec ", " HAVING sum(a.cantidad_2) > 0.0015" END IF ELSE LET tituloInventario = 'REPUESTOS' IF aimprimir = 'TODOS' THEN LET selec = "SELECT DISTINCT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec FROM irtb00006 a WHERE a.status_t IS NULL AND ",criterio CLIPPED, " AND a.bodega = ",bodega ELSE LET selec = "SELECT DISTINCT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,SUM(a.cantidad_2) FROM irtb00006 a WHERE a.status_t IS NULL AND ",criterio CLIPPED, "and a.bodega = ",bodega, " GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec ", " HAVING sum(a.cantidad_2) > 0.0015" END IF END IF PREPARE ccuenta FROM selec DECLARE bcuenta CURSOR FOR ccuenta IF porciento IS NULL THEN LET porciento = 100 END IF LET cantidad_imprime = cuenta * (porciento/100) LET cuenta = 1 FOREACH bcuenta INTO pcodn,pcodgrupo,pcodtipo,pcodsec LET cuenta = cuenta + 1 END FOREACH END FUNCTION