Files
MBS/PROYECTOS/test/ipfrencuencas.4gl
T

423 lines
17 KiB
Plaintext

DEFINE datos RECORD
cod_n int,cod_grupo int,cod_tipo int,cod_Sec int,
sku varchar(50) ,
descripcion varchar(255) ,
frecuencia_compra decimal(18, 2) ,
frecuencia_ventas decimal(18, 2) ,
volumen_compra decimal(18, 2) ,
volumen_venta decimal(18, 2) ,
frecuencia_transacciones_entrada decimal(18, 2) ,
volumen_transaccion_entrada decimal(18, 2) ,
frecuencia_transaccion_salida,volumen_transaccion_salida decimal(18, 2) ,
ano INT,
unidad_med VARCHAR(4),
existencia DEC(12,5),
bodega VARCHAR(100),
categoria VARCHAR(10)
END RECORD
DEFINE pano INT,
fecha_ini,fecha_fin DATE
MAIN
CALL ARG_VAL(1) RETURNING pano
CONNECT TO "smarmotech" USER 'jsoto' USING 'lmmjvsd2014'
SELECT MIN(fecha_inicio),MAX(fecha_corte) INTO fecha_ini,fecha_fin FROM prdtable WHERE ano = pano
LET fecha_ini = '01/01/2024'
LET fecha_fin = '06/30/2025'
DISPLAY "RANGO FECHA ",fecha_ini," ",fecha_fin
CALL frecuencia()
END MAIN
FUNCTION frecuencia()
DELETE FROM tmpdata_inventario WHERE ano = pano
# FRECUENCIA COMPRAS
DECLARE f1 CURSOR FOR
select
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
count(*),'0','0','0','0','0','0','0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
from iptb00006 a,iptb00002 b
where
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
a.fecha between fecha_ini and fecha_fin
and a.status_t is NULL AND a.cod_mov IN (10,35) AND a.bodega = 4 AND
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
DISPLAY "INSERTANDO FRECUENCIA COMPRAS..."
FOREACH f1 INTO datos.*
LET datos.ano = pano
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
"-",datos.cod_Sec USING "&&&&&&&&"
INSERT INTO tmpdata_inventario VALUES (datos.*)
END FOREACH
# VOLUMEN COMPRA
DECLARE f2 CURSOR FOR
select
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
'0','0',SUM(a.cantidad_2),'0','0','0','0','0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
from iptb00006 a,iptb00002 b where
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
a.fecha between fecha_ini and fecha_fin AND a.cod_mov IN (10,35) and
a.status_t is null AND a.bodega =4 AND
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
DISPLAY "INSERTANDO VOLUMEN COMPRAS..."
FOREACH f2 INTO datos.*
LET datos.ano = pano
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
"-",datos.cod_Sec USING "&&&&&&&&"
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
WHERE a.cod_n = datos.cod_n AND
a.cod_grupo = datos.cod_grupo AND
a.cod_tipo = datos.cod_tipo AND
a.cod_sec = datos.cod_sec AND
a.ano = pano
IF STATUS = NOTFOUND THEN
INSERT INTO tmpdata_inventario VALUES (datos.*)
ELSE
UPDATE tmpdata_inventario SET volumen_compra = datos.volumen_compra
WHERE cod_n = datos.cod_n AND
cod_grupo = datos.cod_grupo AND
cod_tipo = datos.cod_tipo AND
cod_sec = datos.cod_sec AND
ano = pano
END IF
END FOREACH
#FRECUENCIA VENTAS
DECLARE f3 CURSOR FOR
select
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
'0',count(*),'0','0','0','0','0','0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
from iptb00006 a,iptb00002 b where
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
a.fecha between fecha_ini and fecha_fin
and a.status_t is null AND a.cod_mov IN (30,31,55,56) and
a.bodega=4 AND
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
DISPLAY "INSERTANDO FRECUENCIA VENTAS..."
FOREACH f3 INTO datos.*
LET datos.ano = pano
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
"-",datos.cod_Sec USING "&&&&&&&&"
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
WHERE a.cod_n = datos.cod_n AND
a.cod_grupo = datos.cod_grupo AND
a.cod_tipo = datos.cod_tipo AND
a.cod_sec = datos.cod_sec AND
a.ano = pano
IF STATUS = NOTFOUND THEN
INSERT INTO tmpdata_inventario VALUES (datos.*)
ELSE
UPDATE tmpdata_inventario SET frecuencia_ventas = datos.frecuencia_ventas
WHERE cod_n = datos.cod_n AND
cod_grupo = datos.cod_grupo AND
cod_tipo = datos.cod_tipo AND
cod_sec = datos.cod_sec AND
ano = pano
END IF
END FOREACH
DECLARE f4 CURSOR FOR
#VOLUMEN VENTAS
select
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
'0','0','0',SUM(a.cantidad_2),'0','0','0','0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
from iptb00006 a,iptb00002 b where
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
a.fecha between fecha_ini and fecha_fin
and a.status_t is null AND a.cod_mov IN (30,31,55,56) and
a.bodega=4 AND
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
DISPLAY "INSERTANDO VOLUMEN VENTAS..."
FOREACH f4 INTO datos.*
LET datos.ano = pano
LET datos.volumen_venta = datos.volumen_venta * -1
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
"-",datos.cod_Sec USING "&&&&&&&&"
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
WHERE a.cod_n = datos.cod_n AND
a.cod_grupo = datos.cod_grupo AND
a.cod_tipo = datos.cod_tipo AND
a.cod_sec = datos.cod_sec AND
a.ano = pano
IF STATUS = NOTFOUND THEN
INSERT INTO tmpdata_inventario VALUES (datos.*)
ELSE
UPDATE tmpdata_inventario SET volumen_venta = datos.volumen_venta
WHERE cod_n = datos.cod_n AND
cod_grupo = datos.cod_grupo AND
cod_tipo = datos.cod_tipo AND
cod_sec = datos.cod_sec AND
ano = pano
END IF
END FOREACH
#FRECUENCIA TRANSFERENCIA ENTRADAS
# COD MOV 80
DECLARE f5 CURSOR FOR
select
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
'0','0','0','0',count(*),'0','0','0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
from iptb00006 a,iptb00002 b where
a.cod_n = b.cod_n and a.cod_grupo = a.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
a.fecha between fecha_ini and fecha_fin
and a.status_t is null and
a.bodega=4 AND a.cod_mov = 80 AND
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
DISPLAY "INSERTANDO FRECUENCIA TRANSFERENCIA ENTRADAS..."
FOREACH f5 INTO datos.*
LET datos.ano = pano
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
"-",datos.cod_Sec USING "&&&&&&&&"
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
WHERE a.cod_n = datos.cod_n AND
a.cod_grupo = datos.cod_grupo AND
a.cod_tipo = datos.cod_tipo AND
a.cod_sec = datos.cod_sec AND
a.ano = pano
IF STATUS = NOTFOUND THEN
INSERT INTO tmpdata_inventario VALUES (datos.*)
ELSE
UPDATE tmpdata_inventario SET frecuencia_transacciones_entrada = datos.frecuencia_transacciones_entrada
WHERE cod_n = datos.cod_n AND
cod_grupo = datos.cod_grupo AND
cod_tipo = datos.cod_tipo AND
cod_sec = datos.cod_sec AND
ano = pano
END IF
END FOREACH
#VOLUMEN TRANSFERENCIA ENTRADAS
#COD MOV 80
DECLARE f6 CURSOR FOR
select
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
'0','0','0','0','0',SUM(a.cantidad_2),'0','0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
from iptb00006 a,iptb00002 b where
a.cod_n = b.cod_n and a.cod_grupo = a.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
a.fecha between fecha_ini and fecha_fin
and a.status_t is null and
a.bodega=4 AND a.cod_mov = 80 AND
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
DISPLAY "INSERTANDO VOLUMEN TRANSFERENCIA ENTRADAS..."
FOREACH f6 INTO datos.*
LET datos.ano = pano
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
"-",datos.cod_Sec USING "&&&&&&&&"
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
WHERE a.cod_n = datos.cod_n AND
a.cod_grupo = datos.cod_grupo AND
a.cod_tipo = datos.cod_tipo AND
a.cod_sec = datos.cod_sec AND
a.ano = pano
IF STATUS = NOTFOUND THEN
INSERT INTO tmpdata_inventario VALUES (datos.*)
ELSE
UPDATE tmpdata_inventario SET volumen_transaccion_entrada = datos.volumen_transaccion_entrada
WHERE cod_n = datos.cod_n AND
cod_grupo = datos.cod_grupo AND
cod_tipo = datos.cod_tipo AND
cod_sec = datos.cod_sec AND
ano = pano
END IF
END FOREACH
#FRECUENCIA TRANSFERENCIA SALIDAS
# COD MOV 79
DECLARE f7 CURSOR FOR
select
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
'0','0','0','0','0','0',count(*),'0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
from iptb00006 a,iptb00002 b where
a.cod_n = b.cod_n and a.cod_grupo = a.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
a.fecha between fecha_ini and fecha_fin
and a.status_t is null and
a.bodega=4 AND a.cod_mov = 79 AND
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
DISPLAY "INSERTANDO FRECUENCIA TRANSFERENCIA SALIDAS..."
FOREACH f7 INTO datos.*
LET datos.ano = pano
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
"-",datos.cod_Sec USING "&&&&&&&&"
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
WHERE a.cod_n = datos.cod_n AND
a.cod_grupo = datos.cod_grupo AND
a.cod_tipo = datos.cod_tipo AND
a.cod_sec = datos.cod_sec AND
a.ano = pano
IF STATUS = NOTFOUND THEN
INSERT INTO tmpdata_inventario VALUES (datos.*)
ELSE
UPDATE tmpdata_inventario SET frecuencia_transaccion_salida = datos.frecuencia_transaccion_salida
WHERE cod_n = datos.cod_n AND
cod_grupo = datos.cod_grupo AND
cod_tipo = datos.cod_tipo AND
cod_sec = datos.cod_sec AND
ano = pano
END IF
END FOREACH
#VOLUMEN TRANSFERENCIA SALIDAS
#COD MOV 79
DECLARE f8 CURSOR FOR
select
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
'0','0','0','0','0','0','0',SUM(a.cantidad_2),'0',b.unidad_med ,'0','ALM GENERAL',b.categoria
from iptb00006 a,iptb00002 b where
a.cod_n = b.cod_n and a.cod_grupo = a.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
a.fecha between fecha_ini and fecha_fin
and a.status_t is null and
a.bodega=4 AND a.cod_mov = 79 AND
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
DISPLAY "INSERTANDO VOLUMEN TRANSFERENCIA SALIDAS..."
FOREACH f8 INTO datos.*
LET datos.ano = pano
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
"-",datos.cod_Sec USING "&&&&&&&&"
LET datos.volumen_transaccion_salida = datos.volumen_transaccion_salida * -1
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
WHERE a.cod_n = datos.cod_n AND
a.cod_grupo = datos.cod_grupo AND
a.cod_tipo = datos.cod_tipo AND
a.cod_sec = datos.cod_sec AND
a.ano = pano
IF STATUS = NOTFOUND THEN
INSERT INTO tmpdata_inventario VALUES (datos.*)
ELSE
UPDATE tmpdata_inventario SET volumen_transaccion_salida = datos.volumen_transaccion_salida
WHERE cod_n = datos.cod_n AND
cod_grupo = datos.cod_grupo AND
cod_tipo = datos.cod_tipo AND
cod_sec = datos.cod_sec AND
ano = pano
END IF
END FOREACH
#EXISTENCIA
DECLARE f10 CURSOR FOR
select
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
'0','0','0','0','0','0','0','0','0',b.unidad_med ,SUM(a.cantidad_2),'ALM GENERAL',b.categoria
from iptb00006 a,iptb00002 b where
a.cod_n = b.cod_n and a.cod_grupo = a.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
a.fecha <= fecha_fin
and a.status_t is null and
a.bodega=4 AND
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
DISPLAY "EXISTENCIAS..."
FOREACH f10 INTO datos.*
UPDATE tmpdata_inventario SET existencia = datos.existencia
WHERE cod_n = datos.cod_n AND
cod_grupo = datos.cod_grupo AND
cod_tipo = datos.cod_tipo AND
cod_sec = datos.cod_sec AND
ano = pano
END FOREACH
DISPLAY "PROCESO TERMINADO"
END FUNCTION