Files
MBS/PROYECTOS/test/comparar_cantidad.4gl
T

266 lines
8.3 KiB
Plaintext

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 }