Files
DECOMARMOL/PROYECTOS/ipdir/ubicacionDH.4gl
T
2026-09-22 20:38:51 -04:00

266 lines
10 KiB
Plaintext

GLOBALS "ipprgb000.4gl"
DEFINE xnum_doc_tmp INT,
tmp_cantidad,tmp_cantidad1 DECIMAL(12,5),
producto CHAR(30),
xcodn,xcodgrupo,xcodtipo,xcodsec INT
DEFINE movi4 DYNAMIC ARRAY OF RECORD
id_seccion INT,
d_seccion VARCHAR(50),
id_tramo INT,
d_tramo VARCHAR(50),
cantidad DECIMAL(12,5),
cantidad_o DECIMAL(12,5)
END RECORD
DEFINE movi5 DYNAMIC ARRAY OF RECORD
id_seccion1 INT,
d_seccion1 VARCHAR(50),
id_tramo1 INT,
d_tramo1 VARCHAR(50),
cantidad1,cantidad2 DECIMAL(12,5),
de_seccion,de_tramo int
END RECORD
FUNCTION insertaUbicacionDH(moviD,num_doc_tmp)
DEFINE moviD RECORD
cod_n,cod_Grupo,cod_tipo,cod_sec INT,
descripcion,observacion STRING,
book varchar(50)
,tipos varchar(50)
,lado_1 decimal(12,5)
,lado_2 decimal(12,5)
,lado_3 decimal(12,5)
,id_bodega, id_seccion1 INT
,d_seccion1 VARCHAR(50)
,id_tramo1 INT
,d_tramo1 VARCHAR(50),
id_producto VARCHAR(25),
tipo_material VARCHAR(30)
,cantidad1,cantidad2,factor_conv DECIMAL(12,5),
cod_mov INT,
control_transferencia_ubicaciones VARCHAR(2),
cod_mov_transferencia INT
END RECORD,
num_doc_tmp,se_seccion,se_tramo INT
DEFINE movi10 DYNAMIC ARRAY OF RECORD
cod_n,cod_Grupo,cod_tipo,cod_sec INT,
descripcion,observacion STRING,
book varchar(50)
,tipos varchar(50)
,lado_1 decimal(12,5)
,lado_2 decimal(12,5)
,lado_3 decimal(12,5)
,id_bodega, id_seccion1 INT
,d_seccion1 VARCHAR(50)
,id_tramo1 INT
,d_tramo1 VARCHAR(50),
id_producto VARCHAR(25),
tipo_material VARCHAR(30),
cantidad1,cantidad2,factor_conv DECIMAL(12,5),
cod_mov INT,
de_seccion,de_tramo int
END RECORD
DEFINE p_arr,p_arr2,scr_l2 INT,
total_c1,total_c2,se_cantidad1,se_cantidad2 DEC(12,5)
OPEN WINDOW w1 WITH FORM "ipfmmt046"
DIALOG ATTRIBUTE(UNBUFFERED)
INPUT BY NAME descripcion
BEFORE INPUT
LET producto = moviD.cod_n USING "<<<&",
"-",moviD.cod_grupo USING "<<<<&",
"-",moviD.cod_tipo USING "<<<<&",
"-",moviD.cod_sec USING "<<<<&"
LET xcodn = moviD.cod_n
LET xcodgrupo = moviD.cod_grupo
LET xcodtipo = moviD.cod_tipo
LET xcodsec = moviD.cod_sec
LET descripcion = moviD.descripcion CLIPPED,"-(",producto CLIPPED,")"
LET tmp_cantidad = 0
LET tmp_Cantidad1 = 0
CALL movi5.clear()
CALL movi4.clear()
LET xnum_Doc_tmp = num_doc_tmp
CALL cseccionesDH(moviD.*) RETURNING movi4
END INPUT
DISPLAY ARRAY movi4 TO recordd.*
BEFORE ROW
LET scr_l = scr_line()
ON SELECTION CHANGE
LET p_arr = arr_curr()
LET se_seccion =movi4[p_arr].id_seccion
LET se_tramo =movi4[p_arr].id_tramo
LET se_cantidad1 = movi4[p_arr].cantidad
LET se_cantidad2 = movi4[p_arr].cantidad_o
CALL ctramosDH(moviD.id_bodega, p_arr,movi4[p_arr].id_seccion,movi4[p_arr].id_tramo,se_seccion,se_tramo,moviD.cod_mov)
END DISPLAY
INPUT ARRAY movi5 FROM recordh.* ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE ROW
LET p_arr2 = arr_curr()
LET scr_l2 = scr_line()
LET moviD.descripcion = moviD.descripcion CLIPPED
AFTER FIELD cantidad1
IF movi5[p_arr2].id_seccion1 IS NOT NULL THEN
IF movi5[p_arr2].cantidad1 >0 THEN
LET movi5[p_arr2].cantidad2 = movi5[p_arr2].cantidad1*movid.factor_conv
IF movi5[p_arr2].cantidad2 > se_cantidad2 THEN
CALL msg(1004)
NEXT FIELD cantidad1
END IF
END IF
END IF
AFTER ROW
LET tmp_cantidad1 =0
FOR idx = 1 TO movi5.getLength()
IF movi5[idx].cantidad1 >0 THEN
LET tmp_cantidad1 = tmp_cantidad1 +movi5[idx].cantidad2
CALL insertTemporal(moviD.cod_n,moviD.cod_grupo,moviD.cod_tipo,moviD.cod_sec,moviD.cod_mov,
moviD.id_bodega,movi5[idx].cantidad1,movi5[idx].cantidad2, movi5[idx].id_seccion1, movi5[idx].id_tramo1,
se_seccion,se_tramo,'0',xnum_Doc_tmp)
IF tmp_cantidad1 > se_cantidad2 THEN
ROLLBACK WORK
CALL msg(1004)
NEXT FIELD cantidad1
ELSE
COMMIT WORK
END IF
END IF
END FOR
END INPUT
ON ACTION ubicar
SELECT ISNULL(SUM(a.cantidad_1),0),ISNULL(SUM(a.cantidad_2),0) INTO total_c1,total_c2 FROM tmpubicacionTramos a
WHERE (a.num_doc = xnum_doc_tmp AND
a.bodega = moviD.id_bodega AND
a.cod_mov = moviD.cod_mov) AND
(a.cod_n = moviD.cod_n AND a.cod_grupo = moviD.cod_Grupo AND a.cod_tipo = moviD.cod_tipo AND
a.cod_Sec = moviD.cod_sec) AND
a.us_crea = suser_sname()
EXIT DIALOG
ON ACTION CANCEL
LET int_flag = TRUE
EXIT DIALOG
CLOSE WINDOW w1
END DIALOG
CLOSE WINDOW w1
FOR idx =1 TO movi5.getLength()
LET movi10[idx].cod_n = moviD.cod_n
LET movi10[idx].cod_grupo = moviD.cod_grupo
LET movi10[idx].cod_tipo = moviD.cod_tipo
LET movi10[idx].cod_sec = moviD.cod_sec
LET movi10[idx].id_bodega = moviD.id_bodega
LET movi10[idx].cod_mov = moviD.cod_mov
LET movi10[idx].id_seccion1 = movi5[idx].id_seccion1
LET movi10[idx].id_tramo1 = movi5[idx].id_tramo1
LET movi10[idx].de_seccion = movi5[idx].de_seccion
LET movi10[idx].de_tramo = movi5[idx].de_tramo
LET movi10[idx].cantidad1 = movi5[idx].cantidad1
LET movi10[idx].cantidad2 = movi5[idx].cantidad2
END FOR
RETURN total_c1,total_c2,movi10
END FUNCTION
FUNCTION cseccionesDH(moviD)
DEFINE moviD RECORD
cod_n,cod_Grupo,cod_tipo,cod_sec int,
descripcion,observacion STRING,
book varchar(50)
,tipos varchar(50)
,lado_1 decimal(12,5)
,lado_2 decimal(12,5)
,lado_3 decimal(12,5)
,id_bodega, id_seccion1 INT
,d_seccion1 VARCHAR(50)
,id_tramo1 INT
,d_tramo1 VARCHAR(50),
id_producto VARCHAR(25),
tipo_material VARCHAR(30)
,cantidad1,cantidad2,factor_conv DECIMAL(12,5),
cod_mov INT,
control_transferencia_ubicaciones VARCHAR(2),
cod_mov_transferencia INT
END RECORD,
idz INT
LET idz = 1
DECLARE bseccionesDH CURSOR FOR
select b.cod_seccion, b.descripcion,c.cod_tramo, c.descripcion, sum(a.cantidad), sum(a.cantidad2)
from iptb00050 a
inner join intb00010 b ON (a.bodega = b.cod_bodega and a.cod_seccion = b.cod_seccion)
inner join intb00043 c ON (a.bodega = c.cod_bodega AND b.cod_seccion = c.cod_seccion and a.cod_tramo = c.cod_tramo)
where a.bodega = moviD.id_bodega and a.cod_n = moviD.cod_n and a.cod_grupo = moviD.cod_grupo AND
a.cod_tipo = moviD.cod_tipo and a.cod_sec = moviD.cod_sec
group by b.cod_seccion, b.descripcion, c.cod_tramo, c.descripcion
ORDER BY b.cod_seccion,c.cod_tramo
FOREACH bseccionesDH INTO movi4[idz].*
LET idz = idz +1
END FOREACH
RETURN movi4
END FUNCTION
--**********************************************--
--**********************************************--
FUNCTION ctramosDH(bodega, indice,seccion,tramo,de_seccion,de_tramo,xcod_mov)
DEFINE bodega,indice,seccion,tramo,de_seccion,de_tramo,xcod_mov INT,
idz INT
LET idz = 1
DECLARE btramosDHtmp CURSOR FOR
select b.cod_seccion, b.descripcion,c.cod_tramo, c.descripcion, isnull(sum(a.cantidad_1),0),isnull(SUM(a.cantidad_2),0)
from intb00010 b inner join intb00043 c ON b.cod_bodega = bodega and b.cod_bodega = c.cod_bodega AND
b.cod_seccion = c.cod_seccion
left outer join tmpubicacionTramos a ON
(a.bodega=b.cod_bodega AND
a.de_seccion = seccion AND
a.de_tramo = tramo) and
(a.num_doc = xnum_doc_tmp AND
a.bodega = bodega AND
a.cod_mov = xcod_mov) AND (a.seccion = b.cod_seccion and a.tramo = c.cod_tramo) AND
(a.cod_n = xcodn AND a.cod_grupo = xcodgrupo AND a.cod_tipo = xcodtipo AND a.cod_sec = xcodtipo)
group by b.cod_seccion, b.descripcion, c.cod_tramo, c.descripcion
ORDER BY b.cod_seccion,c.cod_tramo
FOREACH btramosDHtmp INTO movi5[idz].*
LET movi5[idz].de_seccion = seccion
LET movi5[idz].de_tramo = tramo
LET idz = idz +1
END FOREACH
END FUNCTION