Files
MBS/PROYECTOS/ipdir/piking_3.4gl
T

621 lines
18 KiB
Plaintext

{
FUNCTION : piking.4gl
DESARROLLADO POR: ING. JUAN SOTO
FECHA : 1/10/20218
OBJETIVO : Visualizar las transferencias que se realizan
}
SCHEMA smarmotech
DEFINE
piking DYNAMIC ARRAY OF RECORD
transportista STRING,
bodega SMALLINT,
nombre_b CHAR(25),
bodega2 SMALLINT,
nombre_b2 CHAR(25),
num_doc INTEGER,
fecha DATE,
cod_mov SMALLINT,
nombre VARCHAR(100),
usuario CHAR(60),
recibo CHAR(1),
impresion CHAR(1),
cod_mov_transferencia SMALLINT,
cod_transp SMALLINT,
sec_transp SMALLINT,
placa VARCHAR(50),
numero_doc INT
END RECORD,
ximpresion CHAR(1)
DEFINE
movi2 DYNAMIC ARRAY OF RECORD
area SMALLINT,
descripcion_area VARCHAR(30),
cod_n LIKE intb00003.cod_n,
cod_grupo LIKE intb00003.cod_grupo,
cod_tipo LIKE intb00003.cod_tipo,
cod_sec LIKE intb00003.cod_sec,
cantidad_1 DEC(12, 5),
cantidad_2 DEC(12, 5),
cantidad_p DEC(12, 5),
unidad_med LIKE iptb00002.unidad_med,
descrip_esp CHAR(80),
existencia DEC(12, 5),
disponible DEC(12, 5),
codigo_bloque CHAR(15),
id_kit INT
END RECORD,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
NORMAL
CHAR(3),
imprime, gclave, gusuario, archivo, DESCRIP_TRANSP, copia CHAR(100),
gimpresor, idx1, idx, p_act, numero_msg SMALLINT,
tituloBodega STRING,
otros_mov1 RECORD
num_doc INT,
cod_cia SMALLINT,
cod_mov SMALLINT,
fact_no CHAR(25),
cod_transp SMALLINT,
sec_transp SMALLINT,
cod_tarifa SMALLINT,
placa CHAR(25),
conduce_no CHAR(25),
fecha DATE,
descrip_mov CHAR(30),
bodega SMALLINT,
bodega2 SMALLINT,
bodega_d CHAR(30),
num_bultos SMALLINT,
detalle CHAR(30),
cod_sp SMALLINT,
cod_sp_sec INT,
descrip4 CHAR(30),
cod_mov_transferencia INT
END RECORD
DEFINE otros_mov RECORD
num_doc LIKE iptb00006.num_doc,
cod_cia LIKE iptb00006.cod_cia,
cod_mov LIKE iptb00006.cod_mov,
fact_no LIKE iptb00006.fact_no,
cod_transp LIKE iptb00006.cod_transp,
sec_transp LIKE iptb00006.sec_transp,
cod_tarifa LIKE iptb00006.cod_tarifa,
placa LIKE iptb00006.placa,
fecha LIKE iptb00006.fecha,
conduce_no LIKE iptb00006.conduce_no,
descrip_mov CHAR(80),
bodega LIKE iptb00006.bodega,
bodega_destino SMALLINT,
detalle LIKE iptb00006.detalle,
cod_sp LIKE iptb00006.cod_sp,
cod_sp_sec LIKE iptb00006.cod_sp_sec,
departamento SMALLINT,
nombre_depto CHAR(30),
cod_mov1 SMALLINT,
entrada INT,
descrip_mov1 CHAR(40),
descrip4 CHAR(30),
factura INT
END RECORD
FUNCTION piking(usuario, clave, impresor, xbodega, sucursal)
DEFINE
letras RECORD
negrillas_on CHAR(6),
negrillas_off CHAR(6),
doble_on CHAR(6),
doble_off CHAR(6),
comp_on CHAR(6),
comp_off CHAR(6),
doce CHAR(6),
normal CHAR(6)
END RECORD,
usuario, clave CHAR(50),
impresor, xbodega, sucursal SMALLINT
LET gusuario = usuario
LET gclave = clave
LET gimpresor = impresor
DECLARE busca_piking CURSOR FOR
SELECT DISTINCT d.nombre,
a.bodega,
e.descripcion,
a.bodega_d,
' ',
a.num_doc,
a.fecha,
a.cod_mov,
c.descrip_mov,
a.us_crea,
a.cond_recep,
'N',
c.codigo_mov_transferencia,
a.cod_transp,
a.sec_transp,
a.placa,
a.numero_doc
FROM iptb00033 a
LEFT OUTER
JOIN vetb00015 d
ON a.cod_transp = d.cod_transp
AND a.sec_transp = d.sec_transp,
iptb00005 c,
intb00009 e,
iptb00048 b
WHERE a.bodega_d = b.bodega
AND b.usuario = usuario
AND e.cod_bodega = a.bodega_d
AND a.cond_recep = 'N'
AND a.cod_mov = c.cod_mov
AND c.control_transferencia = "SI"
AND a.status_t IS NULL
LET idx = 1
FOREACH busca_piking INTO piking[idx].*
SELECT a.descripcion
INTO piking[idx].nombre_b2
FROM intb00009 a
WHERE a.cod_bodega = piking[idx].bodega2
#BRIAN LO PUSO
SELECT a.descripcion
INTO piking[idx].nombre_b
FROM intb00009 a
WHERE a.cod_bodega = piking[idx].bodega
LET otros_mov1.cod_mov_transferencia = piking[idx].cod_mov_transferencia
LET idx = idx + 1
END FOREACH #fin foreach busca_piking
IF idx > 1 THEN
# FORMULARIO RELACION DE TRANSFERENCIA POR RECIBIR
OPEN WINDOW ipfmwd007 AT 1, 1 WITH FORM "ipfmwd013"
LET int_flag = FALSE
INPUT ARRAY piking WITHOUT DEFAULTS FROM spiking.*
ON ACTION visualiza
LET p_Act = arr_curr()
CALL buscadata(p_act)
CALL itemsTransferencia()
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT INPUT
END IF
END INPUT
IF int_flag THEN
LET int_flag = FALSE
CLOSE WINDOW ipfmwd007
RETURN
END IF
FOR idx1 = 1 TO piking.getLength()
LET ximpresion = 'N'
IF piking[idx1].recibo = "S" THEN
CALL buscadata(idx1)
IF piking[idx1].impresion = 'S' THEN
LET ximpresion = 'S'
END IF
CALL adicionaTransf()
END IF
END FOR
CLOSE WINDOW ipfmwd007
END IF
LET int_flag = FALSE
END FUNCTION
FUNCTION itemsTransferencia()
DEFINE
xcodmov, xbodega STRING,
xnumdoc INT
DISPLAY "BUSCA DATA ",
otros_mov1.num_doc,
" ",
otros_mov.cod_mov,
" ",
otros_mov.bodega
OPEN WINDOW w1 WITH FORM "ipfmwd013a"
DECLARE busca_items CURSOR FOR
SELECT a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
a.cantidad_1,
a.cantidad_2,
b.unidad_med,
b.descrip_esp,
a.costo,
a.bodega_d
FROM iptb00033 a, iptb00002 b
WHERE a.num_doc = otros_mov1.num_doc
AND a.cod_mov = otros_mov.cod_mov
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.bodega = otros_mov.bodega
AND a.bodega_d = otros_mov.bodega_destino
AND a.status_t IS NULL
AND a.cond_recep = 'N'
LET idx = 1
LET xcodmov =
"(", otros_mov.cod_mov USING "&&&&", ")", otros_mov.descrip_mov CLIPPED
LET xnumdoc = otros_mov1.num_doc
LET xbodega =
"(", otros_mov.bodega USING "<<<", ")", otros_mov.descrip4 CLIPPED
DISPLAY BY NAME xcodmov, xnumdoc, xbodega
FOREACH busca_items
INTO movi2[idx].cod_n,
movi2[idx].cod_grupo,
movi2[idx].cod_tipo,
movi2[idx].cod_sec,
movi2[idx].cantidad_1,
movi2[idx].cantidad_2,
movi2[idx].unidad_med,
movi2[idx].descrip_esp,
otros_mov1.bodega2
LET idx = idx + 1
END FOREACH #fin del foreach busca_items into movi2
DISPLAY ARRAY movi2 TO detallepiking.*
ON ACTION imprimir ATTRIBUTE(TEXT = "Imprime", IMAGE = "printer2")
CALL defecto(
gusuario, gclave, gimpresor)
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia
START REPORT formu4 TO archivo
FOR idx = 1 TO movi2.getLength()
OUTPUT TO REPORT formu4(otros_mov.*, movi2[idx].*)
END FOR
FINISH REPORT formu4
RUN imprime
CALL fgl_winmessage("INFO", "IMPRESION TERMINADA", "INFO")
AFTER DISPLAY
EXIT DISPLAY
END DISPLAY
CLOSE WINDOW w1
END FUNCTION
FUNCTION adicionaTransf()
DEFINE
selec STRING,
idseccion, idtramo, idfila, idpos INT
SELECT a.cod_seccion, a.cod_tramo, a.cod_fila, a.cod_pos
INTO idseccion, idtramo, idfila, idpos
FROM companias a
SELECT a.num_doc
INTO otros_mov.num_doc
FROM iptb00007 a
WHERE a.bodega = otros_mov.bodega_destino
AND a.cod_mov = otros_mov1.cod_mov_transferencia
IF otros_mov.num_doc IS NULL THEN
LET otros_mov.num_doc = 0
INSERT INTO iptb00007(
num_doc, cod_mov, bodega)
VALUES(0,
otros_mov1.cod_mov_transferencia,
otros_mov.bodega_destino)
END IF
LET otros_mov.num_doc = otros_mov.num_doc + 1
WHENEVER ERROR CONTINUE
BEGIN WORK
UPDATE iptb00007
SET num_doc = otros_mov.num_doc
WHERE cod_mov = otros_mov1.cod_mov_transferencia
AND bodega = otros_mov.bodega_destino
LET selec =
"INSERT INTO iptb00006 (cod_cia,num_doc,fecha,
cod_transp,sec_transp,
placa,cod_tarifa,
cod_mov,detalle,
cod_n,cod_grupo,cod_tipo,
cod_sec,cantidad_1,cantidad_2,
bodega,us_crea,fech_crea,
cod_mov_transferencia,
num_doc_transferencia,bodega_procedencia,numero_doc,num_oc,cod_sp,cod_sp_sec)
SELECT a.cod_cia, ",
otros_mov.num_doc,
", getdate(),a.cod_transp,a.sec_transp,",
"a.placa,a.cod_tarifa,",
otros_mov1.cod_mov_transferencia,
",a.detalle,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,
a.cantidad_1,a.cantidad_2*-1,",
otros_mov.bodega_destino,
",'",
gusuario CLIPPED,
"',getdate(),",
otros_mov.cod_mov,
",",
otros_mov1.num_doc,
",",
otros_mov.bodega,
",a.numero_doc,a.num_oc,a.cod_sp,a.cod_sp_Sec ",
" FROM iptb00033 a WHERE a.num_doc =",
otros_mov1.num_doc,
" and a.bodega = ",
otros_mov.bodega,
" AND a.cod_mov = ",
otros_mov.cod_mov,
" AND a.bodega_d = ",
otros_mov.bodega_destino,
" AND a.cond_recep = 'N' "
PREPARE comando FROM selec
EXECUTE comando
IF STATUS <> 0 THEN
ROLLBACK WORK
CALL msg(1679)
RETURN
END IF
LET selec =
"INSERT INTO iptb00062
(num_doc
,fecha
,cod_n
,cod_grupo
,cod_tipo
,cod_sec
,cod_mov
,bodega
,cod_seccion
,cod_tramo
,cod_fila
,cod_pos
,cantidad
,cantidad2
,us_crea
,fech_crea)
SELECT
",
otros_mov.num_doc,
"
,getdate()
,a.cod_n
,a.cod_grupo
,a.cod_tipo
,a.cod_sec,
",
otros_mov1.cod_mov_transferencia,
"
,",
otros_mov.bodega_destino,
"
,",
idseccion,
"
,",
idtramo,
"
,",
idfila,
"
,",
idpos,
"
,a.cantidad_1
,a.cantidad_2 * -1
,'",
gusuario CLIPPED,
"'
,getdate()
FROM iptb00033 a WHERE a.num_doc =",
otros_mov1.num_doc,
" and a.bodega = ",
otros_mov.bodega,
" AND a.cod_mov = ",
otros_mov.cod_mov,
" AND a.bodega_d = ",
otros_mov.bodega_destino,
" AND a.cond_recep = 'N'
"
PREPARE entrada FROM selec
EXECUTE entrada
IF STATUS <> 0 THEN
ROLLBACK WORK
CALL msg(1679)
RETURN
END IF
UPDATE iptb00033
SET cond_recep = "S", us_mod = gusuario, fech_mod = getdate()
WHERE cod_mov = otros_mov.cod_mov
AND num_doc = otros_mov1.num_doc
AND bodega = otros_mov.bodega
IF STATUS <> 0 THEN
ROLLBACK WORK
CALL msg(1679)
RETURN
END IF
COMMIT WORK
IF ximpresion = 'S' THEN
# IMPRESION
DECLARE busca_data CURSOR FOR
SELECT a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_Sec,
a.cantidad_1,
a.cantidad_2,
b.descrip_Esp,
b.unidad_med,
a.num_doc,
a.fecha,
a.cod_mov,
c.descrip_mov,
a.bodega,
a.placa,
a.cod_transp,
a.sec_transp
FROM iptb00006 a, iptb00002 b, iptb00005 c
WHERE a.num_doc = otros_mov.num_doc
AND a.cod_mov = otros_mov1.cod_mov_transferencia
AND a.bodega = otros_mov.bodega_destino
AND a.cod_mov = c.cod_mov
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
LET idx = 1
CALL defecto(
gusuario, gclave, gimpresor)
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia
START REPORT formu4 TO archivo
FOREACH busca_data
INTO movi2[idx].cod_n,
movi2[idx].cod_grupo,
movi2[idx].cod_tipo,
movi2[idx].cod_sec,
movi2[idx].cantidad_1,
movi2[idx].cantidad_2,
movi2[idx].descrip_esp,
movi2[idx].unidad_med,
otros_mov.num_doc,
otros_mov.fecha,
otros_mov.cod_mov,
otros_mov.descrip_mov,
otros_mov.bodega,
otros_mov.placa,
otros_mov.cod_transp,
otros_mov.sec_transp
OUTPUT TO REPORT formu4(otros_mov.*, movi2[idx].*)
END FOREACH
FINISH REPORT formu4
RUN imprime
END IF
CALL fgl_Winmessage("INFO", "TRANSFERENCIA ADICIONADA CON EXITO", "INFO")
END FUNCTION
FUNCTION buscadata(i)
DEFINE i INT
SELECT UNIQUE a.detalle,
b.descrip_mov,
a.cod_cia,
a.bodega,
a.bodega_d,
c.nombre,
a.cod_transp,
a.sec_transp,
b.codigo_mov_transferencia,
a.placa
INTO otros_mov.detalle,
otros_mov.descrip_mov,
otros_mov.cod_cia,
otros_mov.bodega,
otros_mov.bodega_destino,
DESCRIP_TRANSP,
otros_mov.cod_transp,
otros_mov.sec_transp,
otros_mov1.cod_mov_transferencia,
otros_mov.placa
FROM iptb00033 a, iptb00005 b, vetb00015 c
WHERE a.num_doc = piking[i].num_doc
AND a.cod_mov = piking[i].cod_mov
AND a.cod_mov = b.cod_mov
AND a.bodega = piking[i].bodega
AND a.status_t IS NULL
AND a.cond_recep = 'N'
AND c.cod_transp = a.cod_transp
AND c.sec_transp = a.sec_transp
LET otros_mov.detalle = otros_mov1.detalle
LET otros_mov.cod_cia = otros_mov1.cod_cia
LET otros_mov1.num_Doc = piking[i].num_doc
LET otros_mov.fecha = piking[i].fecha
LET otros_mov.cod_mov = piking[i].cod_mov
LET otros_mov.bodega = piking[i].bodega
LET otros_mov.bodega_destino = piking[i].bodega2
LET tituloBodega = piking[i].nombre_b2
END FUNCTION
FUNCTION pendienteRecibir(xbodega)
DEFINE xbodega, j INT
DECLARE cuenta CURSOR FOR
SELECT DISTINCT d.nombre,
a.bodega,
e.descripcion,
a.bodega_d,
' ',
a.num_doc,
a.fecha,
a.cod_mov,
c.descrip_mov,
a.us_crea,
a.cond_recep,
c.codigo_mov_transferencia,
a.cod_transp,
a.sec_transp,
a.placa
FROM iptb00033 a, iptb00005 c, intb00009 e, vetb00015 d
WHERE a.bodega_d = xbodega
AND e.cod_bodega = a.bodega_d
AND a.cond_recep = 'N'
AND a.cod_mov = c.cod_mov
AND c.control_transferencia = "SI"
AND a.cod_transp = d.cod_transp
AND a.sec_transp = d.sec_transp
AND a.status_t IS NULL
LET j = 0
FOREACH cuenta
LET j = j + 1
END FOREACH
RETURN j
END FUNCTION