{ 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