Files
DECOMARMOL/PROYECTOS/ipdir - Copy (2)/ubicacionH.4gl
T
2026-09-22 20:38:51 -04:00

199 lines
8.7 KiB
Plaintext

GLOBALS "ipprgb000.4gl"
FUNCTION insertaUbicacion(moviD,num_doc_tmp)
DEFINE moviD RECORD
cod_n,cod_Grupo,cod_tipo,cod_sec,
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,num_doc_tmp,p_arr1,statusMov SMALLINT,
tmp_cantidad2,tmp_cantidad DEC(12,5),
producto,mensaje CHAR(50)
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 movi4 DYNAMIC ARRAY OF RECORD
seccion INT,
tramo INT,
disponible DECIMAL(12,5),
cantidad_1,cantidad_2 DECIMAL(12,5),
factor_conv DECIMAL(12,5)
END RECORD
OPEN WINDOW w1 WITH FORM "ipfmmt045"
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 descripcion = moviD.descripcion CLIPPED,"-(",producto CLIPPED,")"
CALL existenciaTramos(moviD.cod_n,moviD.cod_grupo,moviD.cod_tipo,moviD.cod_sec,moviD.id_bodega,
num_doc_tmp)
RETURNING movi4
IF movi4.getLength() IS NULL OR movi4.getLength() =1 THEN
CALL fgl_winmessage("INFO","ESTE PRODUCTO NO TIENE EXISTENCIA EN EL ALMACEN ESPECIFICADO","INFO")
LET tmp_cantidad=0
LET tmp_cantidad2=0
EXIT DIALOG
END IF
END INPUT
INPUT ARRAY movi4 FROM recordd.* ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
CALL cseccion(moviD.id_bodega)
BEFORE ROW
LET p_arr1 = arr_curr()
LET scr_l = scr_line()
AFTER FIELD seccion
IF movi4[p_arr1].tramo IS NOT NULL THEN
CALL ctramo(moviD.id_bodega,movi4[p_arr1].seccion)
END IF
AFTER FIELD cantidad_1
DISPLAY "data ",movi4[p_arr1].factor_conv
IF movi4[p_arr1].cantidad_1 > 0 AND movi4[p_arr1].tramo IS NOT NULL THEN
LET movi4[p_arr1].cantidad_2 = movi4[p_arr1].cantidad_1 * movi4[p_arr1].factor_conv
DISPLAY movi4[p_arr1].cantidad_2 TO recordd[scr_l].cantidad_2
IF movi4[p_arr1].cantidad_2 > movi4[p_arr1].disponible THEN
CALL fgl_winmessage("EXISTENCIA","CANTIDAD A SOLICITAR ES MAYOR A LA DISPONIBLE EN EL TRAMO DE ORIGEN","INFO")
NEXT FIELD cantidad_1
END IF
END IF
AFTER ROW
FOR idx = 1 TO movi4.getLength()
IF movi4[idx].cantidad_1 > 0 THEN
LET tmp_cantidad2 = tmp_cantidad2 +movi4[idx].cantidad_2
CALL insertTemporal(moviD.cod_n,moviD.cod_grupo,moviD.cod_tipo,moviD.cod_sec,moviD.cod_mov,
moviD.id_bodega,movi4[idx].cantidad_1,movi4[idx].cantidad_2, movi4[idx].seccion, movi4[idx].tramo,
'0','0',movi4[idx].disponible,num_doc_tmp)
COMMIT WORK
END IF
END FOR
END INPUT
ON ACTION solicitar ATTRIBUTE(TEXT="Guardar",IMAGE="save")
LET tmp_cantidad = 0
LET tmp_cantidad2 =0
FOR idx = 1 TO movi4.getLength()
IF movi4[idx].cantidad_2 >0 THEN
LET tmp_cantidad = tmp_cantidad + movi4[idx].cantidad_1
LET tmp_cantidad2 = tmp_cantidad2 + movi4[idx].cantidad_2
LET movi4[idx].cantidad_2 = movi4[idx].cantidad_1 * movi4[idx].factor_conv
IF movi4[idx].cantidad_2 > movi4[idx].disponible THEN
CALL fgl_winmessage("EXISTENCIA","CANTIDAD A SOLICITAR ES MAYOR A LA DISPONIBLE EN EL TRAMO DE ORIGEN","INFO")
NEXT FIELD cantidad_1
END IF
END IF
END FOR
FOR idx =1 TO movi4.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 = movi4[idx].seccion
LET movi10[idx].id_tramo1 = movi4[idx].tramo
LET movi10[idx].de_seccion = 0
LET movi10[idx].de_tramo = 0
LET movi10[idx].cantidad1 = movi4[idx].cantidad_1
LET movi10[idx].cantidad2 = movi4[idx].cantidad_2
END FOR
EXIT DIALOG
ON ACTION CANCEL
LET tmp_cantidad=0
LET tmp_cantidad2=0
DELETE FROM tmpubicacionTramos WHERE us_crea = suser_sname() AND num_Doc = num_doc_tmp
EXIT DIALOG
CLOSE WINDOW w1
END DIALOG
CLOSE WINDOW w1
RETURN tmp_cantidad,tmp_cantidad2,num_doc_tmp,movi10
END FUNCTION
FUNCTION existenciaTramos(pcodn,pcodgrupo,pcodtipo,pcodsec,xbodega,num_doc_tmp)
DEFINE num_doc_tmp,pcodn,pcodgrupo,pcodtipo,pcodsec,xbodega INT
DEFINE movi4 DYNAMIC ARRAY OF RECORD
seccion INT,
tramo INT,
disponible DECIMAL(12,5),
cantidad_1,cantidad_2 DECIMAL(12,5),
factor_conv DECIMAL(12,5)
END RECORD,
i INT
DECLARE busca_ex CURSOR FOR
SELECT a.cod_seccion,a.cod_tramo,ISNULL(SUM(a.cantidad2),0),ISNULL(AVG(c.cantidad_1),0),ISNULL(AVG(c.cantidad_2),0),ISNULL(AVG(b.factor_conv),0)
FROM iptb00050 a INNER JOIN iptb00001 b on
(a.bodega = xbodega AND a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND
a.cod_sec = pcodsec AND
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.status_t IS NULL
LEFT OUTER JOIN tmpubicacionTramos c ON ( c.cod_n = a.cod_n AND c.cod_grupo = a.cod_grupo AND
c.cod_tipo = a.cod_tipo AND c.cod_sec = a.cod_sec) and
(c.bodega = a.bodega AND
c.num_doc = num_doc_tmp AND c.cod_mov =c.cod_mov) and
c.seccion= a.cod_seccion and c.tramo =a.cod_tramo and c.us_crea = suser_sname()
GROUP BY a.cod_seccion,a.cod_tramo
LET i = 1
FOREACH busca_ex INTO movi4[i].seccion,movi4[i].tramo,movi4[i].disponible,movi4[i].cantidad_1,movi4[i].cantidad_2, movi4[i].factor_conv
LET i = i + 1
END FOREACH
RETURN movi4
END FUNCTION