Files
MBS/PROYECTOS/ipdir/ipprrp052.4gl
T

309 lines
12 KiB
Plaintext

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