379 lines
17 KiB
Plaintext
379 lines
17 KiB
Plaintext
{
|
|
PROGRAMA : ubicacionH.4gl
|
|
FECHA DESARROLLO: 10/01/2024
|
|
DESARROLLADO POR: ELVIS
|
|
OBJETIVO : CONTROLAR LA GESTION DE LAS TRANSACCIONES EN LAS UBICACIONES
|
|
NO HACE TRANSFERENCIA DE UBICACIONES, ES EL ubicacionDH.4gl
|
|
|
|
}
|
|
|
|
GLOBALS "ipprgb000.4gl"
|
|
|
|
DEFINE medida DECIMAL(12,5)
|
|
|
|
FUNCTION insertaUbicacion(moviD,num_doc_tmp)
|
|
DEFINE moviD RECORD
|
|
|
|
area,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_fila,id_pos INT,
|
|
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,
|
|
codigo STRING
|
|
|
|
END RECORD,
|
|
idz,num_doc_tmp,p_arr1,idx10 SMALLINT,
|
|
tmp_cantidad2,tmp_cantidad DEC(12,5),
|
|
producto,mensaje CHAR(50)
|
|
DEFINE movi10 DYNAMIC ARRAY OF RECORD
|
|
|
|
area,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_fila,id_pos INT,
|
|
id_producto VARCHAR(25),
|
|
tipo_material VARCHAR(30),
|
|
cantidad1,cantidad2,factor_conv DECIMAL(12,5),
|
|
cod_mov INT,
|
|
de_seccion,de_tramo INT,
|
|
codigo STRING
|
|
END RECORD, control_exis STRING
|
|
|
|
DEFINE movi DYNAMIC ARRAY OF RECORD
|
|
cod_n LIKE iptb00006.cod_n,
|
|
cod_grupo LIKE iptb00006.cod_grupo,
|
|
cod_tipo LIKE iptb00006.cod_tipo,
|
|
cod_sec LIKE iptb00006.cod_sec,
|
|
cantidad_1 DECIMAL(12,3),
|
|
cantidad_2 DECIMAL(12,3),
|
|
cod_mov SMALLINT,
|
|
no_embarque CHAR(08),
|
|
pendiente DECIMAL(12,3),
|
|
desglose CHAR(1),
|
|
descrip_esp VARCHAR(180)
|
|
END RECORD
|
|
|
|
DEFINE movi4 DYNAMIC ARRAY OF RECORD
|
|
seccion INT,
|
|
tramo,fila,posicion INT,
|
|
|
|
disponible DECIMAL(12,5),
|
|
cantidad_1,cantidad_2 DECIMAL(12,5),
|
|
|
|
factor_conv DECIMAL(12,5)
|
|
END RECORD,
|
|
u ui.Dialog,
|
|
lleneArray BOOLEAN
|
|
|
|
OPEN WINDOW w1 WITH FORM "ipfmmt045"
|
|
|
|
DIALOG ATTRIBUTE(UNBUFFERED)
|
|
|
|
INPUT BY NAME descripcion
|
|
|
|
BEFORE INPUT
|
|
|
|
DISPLAY "en before input: ",moviD.cantidad1
|
|
LET medida = moviD.cantidad1
|
|
LET tmp_cantidad=0
|
|
LET tmp_cantidad2=0
|
|
|
|
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,")"
|
|
|
|
SELECT a.status_mov INTO status_m FROM iptb00005 a
|
|
WHERE a.cod_mov = moviD.cod_mov
|
|
|
|
IF status_m = "2" THEN
|
|
|
|
SELECT control_existencia INTO control_exis FROM iptb00002
|
|
WHERE cod_n = moviD.cod_n AND cod_grupo = moviD.cod_Grupo
|
|
AND cod_tipo = moviD.cod_tipo AND cod_sec = moviD.cod_sec
|
|
|
|
CALL existenciaTramos(moviD.cod_n,moviD.cod_grupo,moviD.cod_tipo,moviD.cod_sec,moviD.id_bodega,
|
|
num_doc_tmp)
|
|
RETURNING movi4
|
|
|
|
IF control_exis = "SI" THEN
|
|
IF movi4.getLength() IS NULL OR movi4.getLength() =1 THEN
|
|
CALL fgl_winmessage("INFO","ESTE PRODUCTO NO TIENE EXISTENCIA EN EL ALMACEN ESPECIFICADO","INFO")
|
|
EXIT DIALOG
|
|
END IF
|
|
|
|
END IF
|
|
|
|
ELSE
|
|
SELECT a.cod_seccion,a.cod_tramo,a.cod_fila,a.cod_pos INTO
|
|
movi4[1].seccion,movi4[1].tramo,movi4[1].fila,movi4[1].posicion
|
|
FROM companias a
|
|
|
|
|
|
LET movi4[1].cantidad_1=movid.cantidad1
|
|
END IF
|
|
|
|
LET movi4[1].cantidad_1=movid.cantidad1
|
|
LET movi[1].cantidad_2 = movi4[1].cantidad_1 * movi4[1].factor_conv
|
|
END INPUT
|
|
|
|
|
|
|
|
INPUT ARRAY movi4 FROM recordd.* ATTRIBUTE(WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
LET movi4[arr_curr()].cantidad_1 = moviD.cantidad1
|
|
LET movi4[arr_curr()].cantidad_2 = movi4[arr_curr()].cantidad_1 * movi4[arr_curr()].factor_conv
|
|
CALL init_seccion(moviD.id_bodega)
|
|
|
|
IF status_m = "2" THEN
|
|
|
|
CALL Dialog.setFieldActive("seccion",FALSE)
|
|
CALL Dialog.setFieldActive("tramo",FALSE)
|
|
CALL Dialog.setFieldActive("fila",FALSE)
|
|
CALL Dialog.setFieldActive("posicion",FALSE)
|
|
|
|
ELSE
|
|
CALL Dialog.setFieldActive("seccion",TRUE)
|
|
CALL Dialog.setFieldActive("tramo",TRUE)
|
|
CALL Dialog.setFieldActive("fila",TRUE)
|
|
CALL Dialog.setFieldActive("posicion",TRUE)
|
|
END IF
|
|
BEFORE ROW
|
|
LET p_arr1 = arr_curr()
|
|
LET scr_l = scr_line()
|
|
LET movi4[p_arr1].factor_conv = movid.factor_conv
|
|
|
|
CALL init_tramo(moviD.id_bodega,movi4[p_arr1].seccion)
|
|
CALL init_fila(moviD.id_bodega,movi4[p_arr1].seccion,movi4[p_arr1].tramo)
|
|
CALL init_posicion(moviD.id_bodega,movi4[p_arr1].seccion,movi4[p_arr1].tramo,movi4[p_arr1].fila)
|
|
AFTER FIELD seccion
|
|
IF movi4[p_arr1].tramo IS NOT NULL THEN
|
|
CALL init_tramo(moviD.id_bodega,movi4[p_arr1].seccion)
|
|
END IF
|
|
AFTER FIELD tramo
|
|
IF movi4[p_arr1].fila IS NOT NULL THEN
|
|
CALL init_fila(moviD.id_bodega,movi4[p_arr1].seccion,movi4[p_arr1].tramo)
|
|
END IF
|
|
AFTER FIELD fila
|
|
IF movi4[p_arr1].posicion IS NOT NULL THEN
|
|
CALL init_posicion(moviD.id_bodega,movi4[p_arr1].seccion,movi4[p_arr1].tramo,movi4[p_arr1].fila)
|
|
END IF
|
|
|
|
AFTER FIELD cantidad_1
|
|
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 status_m = "2" THEN
|
|
IF movi4[p_arr1].cantidad_1 > 0 AND movi4[p_arr1].tramo IS NOT NULL THEN
|
|
|
|
SELECT a.control_existencia INTO control_exis FROM iptb00002 a
|
|
WHERE 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
|
|
|
|
|
|
IF control_exis = 'SI' THEN
|
|
IF movi4[p_arr1].disponible < 0 THEN
|
|
CALL fgl_winmessage("EXISTENCIA","EXISTENCIA ESTA EN NEGATIVO, NO PUEDES AFECTAR UBICACION","INFO")
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
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
|
|
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
|
|
}
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET int_flag = FALSE
|
|
|
|
CALL fgl_winmessage("ATENCION",
|
|
"SALIO SIN GUARDAR LA UBICACION. EL ITEM QUEDARA SIN UBICACION ASIGNADA.",
|
|
"INFO")
|
|
|
|
CLOSE WINDOW w1
|
|
LET tmp_cantidad =0
|
|
LET tmp_cantidad2 =0
|
|
|
|
INITIALIZE movi10 TO NULL
|
|
RETURN tmp_cantidad,tmp_cantidad2,num_doc_tmp,movi10
|
|
END IF
|
|
FOR idx = 1 TO movi4.getLength()
|
|
IF movi4[idx].cantidad_1 IS NOT NULL THEN
|
|
IF movi4[idx].seccion IS NULL THEN
|
|
CALL msg(1022)
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
IF tmp_cantidad2 <> movid.cantidad2 THEN
|
|
CALL msg(16)
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
END INPUT
|
|
|
|
ON ACTION solicitar ATTRIBUTE(TEXT="Guardar",IMAGE="save")
|
|
LET tmp_cantidad = 0
|
|
LET tmp_cantidad2 =0
|
|
|
|
|
|
LET lleneArray = TRUE
|
|
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 status_m = "2" THEN
|
|
|
|
SELECT a.control_existencia INTO control_exis FROM iptb00002 a
|
|
WHERE 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
|
|
|
|
DISPLAY "control: ",movid.cod_sec," disponible: ",movi4[idx].disponible
|
|
IF control_exis = 'SI' THEN
|
|
IF movi4[idx].disponible < 0 THEN
|
|
DISPLAY "disponible: ",movi4[idx].disponible
|
|
CALL fgl_winmessage("EXISTENCIA","EXISTENCIA ESTA EN NEGATIVO, NO PUEDES AFECTAR UBICACION","INFO")
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
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 IF
|
|
END IF
|
|
IF movi4[idx].cantidad_2 IS NOT NULL THEN
|
|
DISPLAY "seccion: ",movi4[idx].seccion," tramo: ",movi4[idx].tramo,
|
|
" pos: ",movi4[idx].posicion," fila:",movi4[idx].fila," llene: ",lleneArray
|
|
IF movi4[idx].seccion IS NULL OR movi4[idx].tramo IS NULL OR
|
|
movi4[idx].posicion IS NULL OR movi4[idx].fila IS NULL THEN
|
|
|
|
LET lleneArray = FALSE
|
|
EXIT FOR
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
IF lleneArray = FALSE THEN
|
|
CALL msg(1668)
|
|
CONTINUE DIALOG
|
|
END IF
|
|
|
|
LET idx10 = 1
|
|
FOR idx =1 TO movi4.getLength()
|
|
IF movi4[idx].cantidad_1 IS NOT NULL THEN
|
|
LET movi10[idx10].area = moviD.area
|
|
LET movi10[idx10].cod_n = moviD.cod_n
|
|
LET movi10[idx10].cod_grupo = moviD.cod_grupo
|
|
LET movi10[idx10].cod_tipo = moviD.cod_tipo
|
|
LET movi10[idx10].cod_sec = moviD.cod_sec
|
|
LET movi10[idx10].id_bodega = moviD.id_bodega
|
|
LET movi10[idx10].cod_mov = moviD.cod_mov
|
|
LET movi10[idx10].codigo = moviD.area USING "<<<","-",
|
|
moviD.cod_n USING "<<<<","-",
|
|
moviD.cod_grupo USING "<<<<<","-",
|
|
moviD.cod_tipo USING "<<<<<<","-",
|
|
moviD.cod_sec USING "<<<<<<","-"
|
|
LET movi10[idx10].id_seccion1 = movi4[idx].seccion
|
|
LET movi10[idx10].id_tramo1 = movi4[idx].tramo
|
|
LET movi10[idx10].id_fila = movi4[idx].fila
|
|
LET movi10[idx10].id_pos = movi4[idx].posicion
|
|
|
|
LET movi10[idx10].de_seccion = 0
|
|
LET movi10[idx10].de_tramo = 0
|
|
|
|
LET movi10[idx10].cantidad1 = movi4[idx].cantidad_1
|
|
LET movi10[idx10].cantidad2 = movi4[idx].cantidad_2
|
|
|
|
LET idx10 = idx10 + 1
|
|
END IF
|
|
END FOR
|
|
|
|
EXIT DIALOG
|
|
|
|
ON ACTION CANCEL
|
|
LET tmp_cantidad=0
|
|
LET tmp_cantidad2=0
|
|
|
|
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,fila,posicion INT,
|
|
|
|
disponible DECIMAL(12,5),
|
|
cantidad_1,cantidad_2 DECIMAL(12,5),
|
|
|
|
factor_conv DECIMAL(12,5)
|
|
END RECORD,
|
|
i INT
|
|
|
|
DISPLAY "datos: ",xbodega," ",pcodn," ",pcodgrupo," ",pcodtipo," ",pcodsec
|
|
DECLARE busca_ex CURSOR FOR
|
|
|
|
SELECT a.cod_seccion,a.cod_tramo,a.cod_fila,a.cod_pos,ISNULL(SUM(a.cantidad2),0),ISNULL(SUM(a.cantidad),0),ISNULL(SUM(a.cantidad2),0),ISNULL(AVG(b.factor_conv),0)
|
|
FROM iptb00062 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
|
|
GROUP BY a.cod_seccion,a.cod_tramo,a.cod_fila,a.cod_pos
|
|
# HAVING SUM(a.cantidad2) >= 0
|
|
|
|
LET i = 1
|
|
FOREACH busca_ex INTO movi4[i].seccion,movi4[i].tramo,movi4[i].fila,movi4[i].posicion,movi4[i].disponible,
|
|
movi4[i].cantidad_1,movi4[i].cantidad_2, movi4[i].factor_conv
|
|
|
|
LET movi4[i].cantidad_1 = medida
|
|
LET movi4[i].cantidad_2 = medida * movi4[i].factor_conv
|
|
LET i = i + 1
|
|
END FOREACH
|
|
|
|
RETURN movi4
|
|
|
|
END FUNCTION |