DEFINE usuarios, clave STRING MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" USER usuarios USING clave CALL Ajustar_Cantidad2() END MAIN FUNCTION Ajustar_Cantidad() DEFINE Data DYNAMIC ARRAY OF RECORD bodega TINYINT, cod_n, cod_grupo, cod_tipo, cod_sec INT, cantidad_2_62, cantidad_2_06 DECIMAL(12, 5) END RECORD, Data2 DYNAMIC ARRAY OF RECORD idrow INT, cod_n, cod_grupo, cod_tipo, cod_sec INT, cantidad_2_62 DECIMAL(12, 5), cod_mov INT END RECORD, Data3 DYNAMIC ARRAY OF RECORD idrow INT, cod_n, cod_grupo, cod_tipo, cod_sec INT, cantidad_2_62 DECIMAL(12, 5), cod_mov INT END RECORD, i, j, x INT, query, query2, query3 STRING DEFINE checking INT PREPARE query FROM "SELECT t1.bodega, t1.cod_n, t1.cod_grupo, t1.cod_tipo, t1.cod_sec, t1.cantidad_iptb00062, t2.cantidad_iptb00006 FROM(SELECT bodega, cod_n, cod_grupo, cod_tipo, cod_sec, SUM(cantidad2) AS cantidad_iptb00062 FROM iptb00062 WHERE status_t IS NULL GROUP BY bodega, cod_n, cod_grupo, cod_tipo, cod_sec) t1 INNER JOIN(SELECT bodega, cod_n, cod_grupo, cod_tipo, cod_sec, SUM(cantidad_2) AS cantidad_iptb00006 FROM iptb00006 WHERE status_t IS NULL GROUP BY bodega, cod_n, cod_grupo, cod_tipo, cod_sec) t2 ON t1.cod_n = t2.cod_n AND t1.cod_grupo = t2.cod_grupo AND t1.cod_tipo = t2.cod_tipo AND t1.cod_sec = t2.cod_sec AND t1.bodega = t2.bodega WHERE t1.cantidad_iptb00062 <> t2.cantidad_iptb00006 AND t2.bodega = 5 AND t1.bodega = 5 AND t1.cod_n NOT IN (12, 5, 25)" DECLARE buscar CURSOR FOR query LET i = 1 FOREACH buscar INTO Data[i].* INITIALIZE data2 TO NULL LET j = 1 PREPARE query2 FROM 'SELECT idrow, cod_n,cod_grupo,cod_tipo,cod_sec, cantidad2, cod_mov FROM iptb00062 WHERE cod_n = ' || data[i].cod_n || ' AND cod_grupo = ' || data[i].cod_grupo || ' AND cod_tipo =' || data[i].cod_tipo || ' AND cod_sec =' || data[i].cod_sec || ' AND bodega =' || data[i].bodega || ' AND status_t IS NULL ' DECLARE buscar2 CURSOR FOR query2 FOREACH buscar2 INTO data2[j].* IF data[i].cantidad_2_06 = data2[j].cantidad_2_62 AND data2[j].cod_mov = 99 THEN DISPLAY "Encontró registro con igualdad de existencia en mov 99" LET x = 1 WHILE x <= data2.getLength() IF data2[x].cod_mov <> 99 THEN DELETE FROM iptb00062 WHERE idrow = data2[x].idrow DISPLAY "ejecutó query (?" END IF LET x = x + 1 END WHILE END IF LET j = j + 1 END FOREACH LET i = i + 1 END FOREACH END FUNCTION FUNCTION Ajustar_Cantidad2() DEFINE Data DYNAMIC ARRAY OF RECORD bodega TINYINT, cod_n, cod_grupo, cod_tipo, cod_sec INT, cantidad_2_62, cantidad_2_06 DECIMAL(12, 5) END RECORD, Data2 DYNAMIC ARRAY OF RECORD idrow INT, cod_n, cod_grupo, cod_tipo, cod_sec INT, cantidad_2_62 DECIMAL(12, 5), cod_mov INT END RECORD, Data3 DYNAMIC ARRAY OF RECORD idrow INT, cod_n, cod_grupo, cod_tipo, cod_sec INT, cantidad_2_62 DECIMAL(12, 5), cod_mov INT END RECORD, i, j, x INT, query, query2, query3 STRING DEFINE checking INT, container DECIMAL(12,2) PREPARE query FROM "SELECT t1.bodega, t1.cod_n, t1.cod_grupo, t1.cod_tipo, t1.cod_sec, t1.cantidad_iptb00062, t2.cantidad_iptb00006 FROM(SELECT bodega, cod_n, cod_grupo, cod_tipo, cod_sec, SUM(cantidad2) AS cantidad_iptb00062 FROM iptb00062 WHERE status_t IS NULL GROUP BY bodega, cod_n, cod_grupo, cod_tipo, cod_sec) t1 INNER JOIN(SELECT bodega, cod_n, cod_grupo, cod_tipo, cod_sec, SUM(cantidad_2) AS cantidad_iptb00006 FROM iptb00006 WHERE status_t IS NULL GROUP BY bodega, cod_n, cod_grupo, cod_tipo, cod_sec) t2 ON t1.cod_n = t2.cod_n AND t1.cod_grupo = t2.cod_grupo AND t1.cod_tipo = t2.cod_tipo AND t1.cod_sec = t2.cod_sec AND t1.bodega = t2.bodega WHERE t1.cantidad_iptb00062 <> t2.cantidad_iptb00006 AND t1.cantidad_iptb00062 < t2.cantidad_iptb00006 AND t2.bodega = 5 AND t1.bodega = 5 AND t1.cod_n NOT IN (12, 5, 25)" DECLARE buscar3 CURSOR FOR query LET i = 1 FOREACH buscar3 INTO Data[i].* INITIALIZE data2 TO NULL LET j = 1 PREPARE query2 FROM 'SELECT idrow, cod_n,cod_grupo,cod_tipo,cod_sec, cantidad2, cod_mov FROM iptb00062 WHERE cod_n = ' || data[i].cod_n || ' AND cod_grupo = ' || data[i].cod_grupo || ' AND cod_tipo =' || data[i].cod_tipo || ' AND cod_sec =' || data[i].cod_sec || ' AND bodega =' || data[i].bodega || ' AND status_t IS NULL ' DECLARE buscar4 CURSOR FOR query2 FOREACH buscar4 INTO data2[j].* IF data2[j].cod_mov = 99 THEN LET container = data[i].cantidad_2_06 - data[i].cantidad_2_62 UPDATE iptb00062 SET cantidad2 = data2[j].cantidad_2_62 + container EXIT FOREACH END IF LET j = j + 1 END FOREACH LET i = i + 1 END FOREACH END FUNCTION { Query para buscar el area en la 06 select b.idrow, a.area, a.cod_mov,a.num_doc,a.bodega,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec, a.cantidad_1,a.cantidad_2, b.cantidad2, b.fech_crea, a.status_t as estadoiptb06, b.status_t as estado62 from iptb00006 a inner join iptb00062 b on 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.cod_mov = b.cod_mov and a.bodega = b.bodega and a.num_doc = b.num_doc where a.cantidad_2 = b.cantidad2 and a.cantidad_1 = b.cantidad and a.area is not null and b.cod_mov <> 99 order by a.area, a.bodega,a.cod_mov,a.num_Doc }