{ ------------------------------------------------------------------ PROGRAMA : IPPRMT014 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla Medidas iptb00030. PROGRAMADOR : Ing. Juan Soto. FECHA REALIZACION : Enero 20, 2010. ------------------------------------------------------------------ } GLOBALS "ipprgb000.4gl" DEFINE iptb30 RECORD LIKE iptb00030.* MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT * INTO p_companias.* FROM companias CALL ipprmt014() END MAIN FUNCTION ipprmt014() CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 OPEN FORM ipfmmt014 FROM "ipfmmt014" DISPLAY FORM ipfmmt014 MENU ON ACTION nuevo let int_flag = false CLEAR FORM let int_flag = false CALL ippcad012() ON ACTION buscar CALL ippcmf012() ON ACTION salir EXIT MENU END MENU END FUNCTION FUNCTION ippcad012() ## Captura los datos que va a contener el registro #WHENEVER ERROR CONTINUE INPUT BY NAME iptb30.* AFTER INPUT IF int_flag THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF END INPUT SELECT MAX(a.cod_sec) INTO iptb30.cod_sec FROM iptb00030 a IF iptb30.cod_sec IS NULL THEN LET iptb30.cod_sec = 0 END IF LET iptb30.cod_sec = iptb30.cod_sec + 1 DISPLAY iptb30.cod_sec TO cod_sec INSERT INTO iptb00030 VALUES (iptb30.*) UPDATE iptb00030 set us_crea = SUSER_SNAME(), fech_crea = GETDATE() WHERE cod_sec = iptb30.cod_sec LET numero_msg = 1 CALL msg(numero_msg) END FUNCTION FUNCTION ippcmf012() DEFINE encontrados INTEGER ## Aqui se prepara para la captura del criterio de seleccion #WHENEVER ERROR CONTINUE CONSTRUCT BY NAME criterio ON iptb00030.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET SELEC = " SELECT DISTINCT * FROM iptb00030 ", " WHERE ", criterio clipped, " ORDER BY cod_sec" PREPARE busca FROM selec DECLARE datos SCROLL CURSOR WITH HOLD FOR busca OPEN datos FETCH FIRST datos INTO iptb30.* IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF ELSE END IF DISPLAY BY NAME iptb30.* MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO iptb30.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME iptb30.* COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO iptb30.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME iptb30.* COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO iptb30.* DISPLAY BY NAME iptb30.* LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO iptb30.* DISPLAY BY NAME iptb30.* LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" # Verifica que el movimiento sea del usuario creador INPUT BY NAME iptb30.descripcion WITHOUT DEFAULTS AFTER INPUT #### Verifica si el usuario presiono la tecla IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE EXIT INPUT END IF UPDATE iptb00030 SET descripcion = iptb30.descripcion, us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE cod_sec = iptb30.cod_sec LET numero_msg = 13 CALL msg(numero_msg) EXIT INPUT END INPUT COMMAND KEY ("L") "eLiminar" LET encontrados = 0 SELECT count(*) INTO encontrados FROM iptb00002 WHERE cod_sec = iptb30.cod_sec AND status_t IS NULL IF encontrados = 0 THEN UPDATE iptb00030 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE cod_sec = iptb30.cod_sec LET numero_msg = 39 CALL msg(numero_msg) ELSE LET numero_msg = 383 CALL msg(numero_msg) END IF COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION