Files
MBS/PROYECTO/ipdir/ipprmt021.4gl
T

118 lines
5.1 KiB
Plaintext

{
PROGRAMA: ipprmt021.4gl
OBJETIVO: AUTORIZAR REQUISICIONES A ALMACENES
DESARROLLADO POR: ING. JUAN SOTO
FECHA : MAYO 5, 2022
}
GLOBALS
"ipprgb000.4gl"
DEFINE arr_busqueda DYNAMIC ARRAY OF RECORD
estado VARCHAR(50),
idestado int,
tipo_documento VARCHAR(100),
numeroid INT,
fechadoc DATE,
nombre VARCHAR(100),
observacion,usuario VARCHAR(200),
cod_mov INT ,
us_crea VARCHAR(50)
END RECORD
DEFINE nombreUsuario,email,etiqueta STRING
DEFINE cacheUsuarios DICTIONARY OF STRING
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "smarmotech" USER usuarios USING clave
CALL ipprmt021()
END MAIN
FUNCTION ipprmt021()
OPEN WINDOW w1 WITH FORM "ipfmmt021"
DIALOG ATTRIBUTE(UNBUFFERED)
CONSTRUCT criterio ON b.estado,b.idestado FROM estado1,idestado1
BEFORE CONSTRUCT
LET etiqueta = "AUTORIZACIONES REQUISICIONES A ALMACENES"
DISPLAY BY NAME etiqueta
CALL estadosprocesos(2)
CALL arr_busqueda.clear()
ON ACTION buscar ATTRIBUTE(TEXT="Buscar",IMAGE="find")
CALL arr_busqueda.clear()
LET selec =
"SELECT TOP 500 b.estado,b.idestado,CAST(a.cod_mov AS VARCHAR(10))||' '||a.descrip_mov,b.numero_doc,b.fecha,c.nombre,
b.observacion,' ',b.cod_mov,b.us_crea
FROM iptb00005 a,iptb00057 b INNER JOIN iptb00061 d ON b.idestado = d.idestado
LEFT OUTER JOIN vetb00004 c ON c.tipo_cliente = b.tipo_cliente AND
c.sec_cliente = b.sec_cliente
WHERE a.cod_mov = b.cod_mov AND
b.status_t IS NULL AND
", criterio CLIPPED,
" ORDER BY b.fecha DESC, b.numero_doc DESC"
PREPARE comando FROM selec
DECLARE buscardata CURSOR FOR comando
LET idx = 1
FOREACH buscardata INTO arr_busqueda[idx].*
# Nombre del usuario: se consulta una sola vez por usuario
IF NOT cacheUsuarios.contains(arr_busqueda[idx].us_crea) THEN
CALL usuarioSistema(arr_busqueda[idx].us_crea) RETURNING nombreUsuario,email
LET cacheUsuarios[arr_busqueda[idx].us_crea] = nombreUsuario
END IF
LET arr_busqueda[idx].usuario = cacheUsuarios[arr_busqueda[idx].us_crea]
LET idx = idx + 1
END FOREACH
IF idx = 1 THEN
CALL msg(3)
CALL arr_busqueda.clear()
END IF
# Limite de 500: la consulta trae solo las mas recientes
IF idx = 501 THEN
CALL fgl_winmessage("INFO",
"Se muestran las 500 requisiciones mas recientes." || ASCII 10 ||
"Use los filtros para acotar la busqueda.","info")
END IF
END CONSTRUCT
INPUT ARRAY arr_busqueda FROM sautoriza.* ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
CALL estadosprocesos(1)
ON CHANGE estado
UPDATE iptb00057 SET estado = arr_busqueda[arr_curr()].estado,us_mod=usuarios,fech_mod=getdate()
WHERE numero_doc = arr_busqueda[arr_curr()].numeroid AND
cod_mov = arr_busqueda[arr_curr()].cod_mov
ON CHANGE observacion
UPDATE iptb00057 SET us_mod=usuarios,fech_mod=getdate(),
observacion = arr_busqueda[arr_curr()].observacion
WHERE numero_doc = arr_busqueda[arr_curr()].numeroid AND
cod_mov = arr_busqueda[arr_curr()].cod_mov
ON CHANGE idestado
UPDATE iptb00057 SET us_mod=usuarios,fech_mod=getdate(),
idestado = arr_busqueda[arr_curr()].idestado
WHERE numero_doc = arr_busqueda[arr_curr()].numeroid AND
cod_mov = arr_busqueda[arr_curr()].cod_mov
ON ACTION imprime ATTRIBUTE(TEXT="Imprimir", IMAGE="printer")
CALL impdocumento(arr_busqueda[arr_curr()].numeroid,arr_busqueda[arr_curr()].cod_mov)
AFTER INPUT
END INPUT
ON ACTION CANCEL ATTRIBUTE(TEXT="Cancelar",IMAGE="quit")
EXIT PROGRAM
END DIALOG
CLOSE WINDOW w1
END FUNCTION