{ FUNCTION: programar_proximo_conteo OBJETIVO: GENERAR LOS CICLOS DE LOS CONTEOS A PARTIR DE UNA FECHA FECHA 3, FEBRERO 2025 DESARROLLADO POR: ING. JUAN SOTO } MAIN DEFINE bodega INT, fecha DATE LET bodega = 4 LET fecha = '02/10/2025' CONNECT TO "smarmotech" USER 'jusoto' USING 'lmmjvsd2014' CALL programar_proximo_conteo(bodega,fecha) END MAIN FUNCTION programar_proximo_conteo(v_fecha_nueva,v_bodega) DEFINE v_categoria CHAR(2) DEFINE v_dias INTEGER DEFINE v_fecha_nueva DATE DEFINE v_codid INTEGER DEFINE v_cod_n INTEGER DEFINE v_cod_grupo INTEGER DEFINE v_cod_tipo INTEGER DEFINE v_cod_sec INTEGER DEFINE v_bodega INTEGER -- Cursor para obtener productos con transacciones en almacén DECLARE c_productos CURSOR FOR SELECT p.codid, t.cod_n, t.cod_grupo, t.cod_tipo, t.cod_sec, t.bodega, p.categoria FROM iptb00006 t INNER JOIN iptb00002 p ON t.cod_n = p.cod_n AND t.cod_grupo = p.cod_grupo AND t.cod_tipo = p.cod_tipo AND t.cod_sec = p.cod_sec WHERE t.bodega IS NOT NULL GROUP BY p.codid, t.cod_n, t.cod_grupo, t.cod_tipo, t.cod_sec, t.bodega, p.categoria OPEN c_productos FOREACH c_productos INTO v_codid, v_cod_n, v_cod_grupo, v_cod_tipo, v_cod_sec, v_bodega, v_categoria -- Obtener los días correspondientes según la categoría SELECT dias INTO v_dias FROM intb00016 WHERE categoria = v_categoria IF SQLCA.SQLCODE = 0 THEN -- Calcular la nueva fecha de conteo LET v_fecha_nueva = v_fecha_nueva + v_dias -- Marcar el conteo actual como realizado (para esta bodega y producto) UPDATE iptb00075 SET estado_conteo = 'Realizado', fecha_ultimo_conteo = TODAY WHERE codid = v_codid AND bodega = v_bodega AND estado_conteo = 'Pendiente' -- Eliminar registros pendientes con la misma fecha para evitar duplicados DELETE FROM iptb00075 WHERE codid = v_codid AND bodega = v_bodega AND fecha_proximo_conteo = v_fecha_nueva AND estado_conteo = 'Pendiente' -- Insertar un nuevo registro de conteo por bodega INSERT INTO iptb00075 (codid, cod_n, cod_grupo, cod_tipo, cod_sec, bodega, fecha_proximo_conteo, categoria, estado_conteo, fecha_ultimo_conteo) VALUES (v_codid, v_cod_n, v_cod_grupo, v_cod_tipo, v_cod_sec, v_bodega, v_fecha_nueva, v_categoria, 'Pendiente', TODAY) END IF END FOREACH CLOSE c_productos END FUNCTION