Files
MBS/PROYECTOS/tests/ciclo_conteo.4gl
T

111 lines
3.7 KiB
Plaintext

{
A- conseguir los numeros de ITEMS por categoria. Con los numeros de semanas. lOS QUE NO SE CONTARON DEBE IR A LA PROXIMOA
B- Conseguir los numeros de los B pero mensual
}
MAIN
DEFINE pcategoria CHAR(2),
pfecha DATE
CONNECT TO "smarmotech" USER 'jsoto' USING 'lmmjvsd2014'
DECLARE ciclo CURSOR FOR SELECT a.categoria INTO pcategoria FROM intb00016 a
WHERE a.categoria = 'A'
ORDER BY a.categoria
FOREACH ciclo
IF pcategoria = 'A' THEN
LET pfecha = '02/17/2025'
END IF
IF pcategoria = 'B' THEN
LET pfecha = '03/17/2025'
END IF
IF pcategoria = 'C' THEN
LET pfecha = '04/21/2025'
END IF
CALL generar_ciclo_conteo(pcategoria,pfecha)
END FOREACH
END MAIN
FUNCTION generar_ciclo_conteo(kcategoria,fecha_proceso)
DEFINE categoria RECORD
categoria CHAR(1),
dias_contar INTEGER,
ciclo INTEGER
END RECORD,
kcategoria CHAR(2),
fecha_proceso DATE,
almacen int
# DEFINE categoria_a categoria
# DEFINE categoria_b categoria
# DEFINE categoria_c categoria
DEFINE producto RECORD
cod_n CHAR(10),
cod_grupo CHAR(10),
cod_tipo CHAR(10),
cod_sec CHAR(10),
categoria CHAR(1)
END RECORD
DEFINE semana_actual DATE
DEFINE semana_inicio DATE
DEFINE semana_fin DATE
DEFINE dias_contar INTEGER
DEFINE ciclo,cuenta,cantidad,cuenta_ciclo,cuentaReg,dia_libre INTEGER
LET almacen = 4
DELETE FROM intb00015 WHERE intb00015.CATEGORIA = kcategoria AND estado = 'Pendiente' AND
bodega = almacen
LET cuenta = 1
LET dia_libre = 1
-- Obtener parámetros de la tabla intb00016
SELECT a.categoria, a.dias, a.ciclo,COUNT(*)
INTO categoria.categoria, categoria.dias_contar, categoria.ciclo,cuenta
FROM intb00016 a INNER JOIN iptb00002 b ON b.categoria = a.categoria AND a.categoria = kcategoria
GROUP BY a.categoria, a.dias, a.ciclo
LET cantidad = (cuenta / categoria.ciclo) USING "<<<<"
LET cuentaReg = 0
-- Obtener la fecha actual para calcular semanas
LET semana_actual = TODAY
LET semana_inicio = fecha_proceso
-- Procesar productos según categoría
DECLARE buscar CURSOR FOR
SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.categoria INTO producto.*
FROM iptb00002 a
WHERE a.categoria = kcategoria
ORDER BY categoria,cod_n, cod_grupo, cod_tipo, cod_sec
FOREACH buscar
LET dias_contar = categoria.dias_contar
LET ciclo = categoria.ciclo
LET cuenta_ciclo = cantidad
-- Generar ciclos de conteo
# WHILE semana_inicio + dias_contar <= semana_inicio + ciclo
LET semana_fin = semana_inicio + (dias_contar)
INSERT INTO intb00015 (cod_n, cod_grupo, cod_tipo, cod_sec, semana_del, semana_al,categoria,estado,bodega)
VALUES (producto.cod_n, producto.cod_grupo, producto.cod_tipo, producto.cod_sec,
semana_inicio, semana_fin,producto.categoria,'Pendiente',almacen)
DISPLAY "data: ",cuenta, " cuenta ciclo: ",cuenta_ciclo," semana_inicia: ",semana_inicio, " fecha ",fecha_proceso
IF cuentaReg <= cuenta_ciclo THEN
LET cuentaReg = cuentaReg + 1
ELSE
-- Reiniciar el contador y avanzar a la próxima semana
LET semana_inicio = semana_fin + 1+dia_libre
LET cuentaReg = 1
END IF
# END WHILE
END FOREACH
END FUNCTION