{ ------------------------------------------------------------------ PROGRAMA : NOPRMT024 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Puestos PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Mayo 20, 1993 ------------------------------------------------------------------ } GLOBALS "noprgb000.4gl" DEFINE nombre_p LIKE adtb00004.nom_puesto, cod_p LIKE adtb00004.cod_puesto MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL noprmt024() END MAIN FUNCTION noprmt024() CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 OPEN FORM nofmmt024 FROM "nofmmt024" DISPLAY FORM nofmmt024 MENU ON ACTION nuevo let int_flag = false CLEAR FORM CALL adpcad023() ON ACTION buscar let int_flag = false CALL adpcmf023() ON ACTION salir EXIT MENU END MENU END FUNCTION FUNCTION adpcad023() # WHENEVER ERROR CONTINUE ## Aqui se procede a la captura de los datos que va a contener el registro INPUT BY NAME puesto.* ## Verifica que el codigo no exista en el catalogo de puestos. Si existe, ## entonces despliega los dato del registro existente. BEFORE INPUT SELECT MAX(a.cod_puesto) INTO puesto.cod_puesto FROM adtb00004 a IF puesto.cod_puesto IS NOT NULL THEN LET puesto.cod_puesto = puesto.cod_puesto +1 ELSE LET puesto.cod_puesto = 1 END IF DISPLAY puesto.cod_puesto NEXT FIELD nom_puesto AFTER FIELD nom_puesto IF puesto.nom_puesto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nom_puesto END IF ## CHEQUEA QUE SE DESCRIBAN LAS FUNCIONES DEL PUESTO { AFTER FIELD funciones IF puesto.funciones IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD funciones END IF} ## CHEQUEA QUE SE DESCRIBAN LAS FUNCIONES DEL PUESTO { AFTER FIELD funcion1 IF puesto.funcion1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD funcion1 END IF ## CHEQUEA QUE SE INDIQUE EL NIVEL SALARIAL CORRESPONDIENTE AL PUESTO AFTER FIELD nivel_sal IF puesto.nivel_sal IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nivel_sal END IF ## CHEQUEA QUE SE INDIQUE EL SALARIO MININO CORRESPONDIENTE AL PUESTO AFTER FIELD salario_min IF puesto.salario_min IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD salario_min END IF ## CHEQUEA QUE SE INDIQUE EL SALARIO MAXIMO CORRESPONDIENTE AL PUESTO AFTER FIELD salario_max IF puesto.salario_max IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD salario_max END IF} AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF IF puesto.tipo_puesto IS NULL THEN CALL msg(16) NEXT FIELD tipo_puesto END IF ## SI NO OCURRE NINGUN ERROR SE PROCEDE A INSERTAR EL REGISTRO SELECT MAX(a.cod_puesto) INTO puesto.cod_puesto FROM adtb00004 a IF puesto.cod_puesto IS NOT NULL THEN LET puesto.cod_puesto = puesto.cod_puesto +1 ELSE LET puesto.cod_puesto = 1 END IF DISPLAY puesto.cod_puesto IF puesto.cod_puesto_sirla IS NULL THEN CALL msg(16) NEXT FIELD cod_puesto_sirla END IF INSERT INTO adtb00004 (cod_puesto ,nom_puesto ,otra_descripcion ,funciones ,funcion1 ,nivel_sal ,salario_min ,salario_max ,us_crea ,fech_crea ,tipo_puesto ,supervisor ,cod_puesto_sirla) VALUES (puesto.cod_puesto,puesto.nom_puesto, puesto.otra_descripcion, puesto.funciones,puesto.funcion1,puesto.nivel_sal, puesto.salario_min,puesto.salario_max,usuarios, GETDATE(),puesto.tipo_puesto,puesto.supervisor, puesto.cod_puesto_sirla) LET numero_msg = 1 CALL msg(numero_msg) NEXT FIELD nom_puesto AFTER FIELD fech_mod EXIT INPUT END INPUT END FUNCTION FUNCTION adpcmf023() ## Aqui se prepara para la captura del criterio de seleccion para ## modificar/actualizar los registros # WHENEVER ERROR CONTINUE CONSTRUCT criterio ON adtb00004.cod_puesto,adtb00004.nom_puesto,adtb00004.otra_descripcion FROM cod_puesto,nom_puesto,otra_descripcion IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET SELEC = " SELECT UNIQUE * FROM adtb00004 where ", " status_t is null and ", criterio clipped, " ORDER BY 1" PREPARE busca FROM selec CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF DECLARE dato SCROLL CURSOR FOR busca OPEN dato FETCH FIRST dato INTO puesto.* IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF ELSE CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF DISPLAY BY NAME puesto.* MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT dato INTO puesto.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME puesto.* COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS dato INTO puesto.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME puesto.* COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST dato INTO puesto.* DISPLAY BY NAME puesto.* LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST dato INTO puesto.* DISPLAY BY NAME puesto.* LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" IF puesto.status_t = "E" THEN LET numero_msg = 39 CALL msg(numero_msg) RETURN END IF ## SE SELECCIONAN LOS CAMPOS MODIFICABLES INPUT BY NAME puesto.nom_puesto, puesto.otra_descripcion, puesto.funciones, puesto.funcion1, puesto.nivel_sal, puesto.salario_min, puesto.salario_max, puesto.tipo_puesto, puesto.supervisor, puesto.cod_puesto_sirla WITHOUT DEFAULTS AFTER FIELD nom_puesto IF puesto.nom_puesto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nom_puesto END IF #### Verifica si el usuario presiono la tecla AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF IF puesto.tipo_puesto IS NULL THEN CALL msg(16) NEXT FIELD tipo_puesto END IF CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF IF puesto.cod_puesto_sirla IS NULL THEN CALL msg(16) NEXT FIELD cod_puesto_sirla END IF ## Aqui se actualizan los registros UPDATE adtb00004 SET nom_puesto = puesto.nom_puesto, otra_descripcion = puesto.otra_descripcion, funciones = puesto.funciones, funcion1 = puesto.funcion1, nivel_sal = puesto.nivel_sal, salario_min = puesto.salario_min, salario_max = puesto.salario_max, adtb00004.tipo_puesto = puesto.tipo_puesto, adtb00004.supervisor = puesto.supervisor, us_mod = suser_sname(), fech_mod = GETDATE(), cod_puesto_sirla = puesto.cod_puesto_sirla WHERE cod_puesto = puesto.cod_puesto LET numero_msg = 13 CALL msg(numero_msg) EXIT INPUT END INPUT ## AQUI SE ELIMINAN LOS REGISTROS COMMAND KEY ("L") "eLiminar" UPDATE adtb00004 SET status_t = "E", us_mod = usuarios, fech_mod = getdate() WHERE cod_puesto = puesto.cod_puesto LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION