Files
MBS/PROYECTO/nodir/noprmt024.4gl
T

344 lines
10 KiB
Plaintext

{
------------------------------------------------------------------
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"
"<Esc> Actualiza Registro <Ctrl-C> 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 <Ctrl-C>
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