{ 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