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