Files
MBS/PROYECTO/addir/adprmt032.4gl
T

280 lines
7.8 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : ADPRMT032
OBJETIVO : Capturar, Modificar registros de la
Tabla de adtb00045 (Control de entrada y
salida de empleados)
PROGRAMADOR : Lic. oscar castillo
FECHA REALIZACION : Thursday, 15 August, 2002
------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
DEFINE entrada RECORD
fecha date,
h_trans LIKE adtb00045.h_trans,
num_emp SMALLINT,
nom_emp CHAR(60)
END RECORD,
empleado CHAR(60)
FUNCTION adprmt032()
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM adfmmt028 FROM "adfmmt028"
DISPLAY FORM adfmmt028
CALL pantalla()
DISPLAY "adprmt032" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Maestra de entrada y Salida Empleados" AT 6,33 ATTRIBUTE(BLACK)
MENU "OPCIONES"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Ctrl-C> Cancela Operacion"
let int_flag = false
CLEAR FORM
CALL adpcad032()
COMMAND "Consultar-modificar"
"<Esc> Realiza Busqueda <Ctrl-C> Cancela Operacion"
let int_flag = false
CALL adpcmf032()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION adpcad032()
# WHENEVER ERROR CONTINUE
## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO
INPUT BY NAME entrada.num_emp
AFTER FIELD num_emp
IF entrada.num_emp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
SELECT a.num_emp
FROM adtb00003 a
WHERE a.num_emp = entrada.num_emp
IF STATUS != NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
CLEAR FORM
NEXT FIELD num_emp
END IF
SELECT a.nom1_emp,a.nom2_emp,a.apell1_emp,a.apell2_emp
INTO m_nom1_emp,m_nom2_emp,m_apell1_emp,m_apell2_emp
FROM adtb00003 a
WHERE a.num_emp = entrada.num_emp
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
CLEAR FORM
NEXT FIELD num_emp
END IF
LET entrada.nom_emp = m_nom1_emp clipped," ",m_nom2_emp clipped," ",
m_apell1_emp clipped," ",m_apell2_emp clipped
DISPLAY BY NAME entrada.nom_emp
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
## SI NO HAY NINGUN PROBLEMA SE PROCEDE A INSERTAR EL REGISTRO
SELECT a.departamento,a.nivel_emp,a.cod_puesto
INTO entra_depto,entra_nivel,entra.puesto
FROM adtb00003 a
WHERE a.num_emp = entrada.num_emp
AND a.status_t IS NULL
IF (primera vez) THEN
INSERT INTO adtb00023 VALUES (entrada.fecha,entrada.num_emp,entra.depto,
entra.nivel,entra.puesto,entrada.h_trans,null,
null,user,current,null,null)
INSERT INTO adtb00045 VALUES (entrada.fecha,entrada.h_trans,
entrada.num_emp,entrada.nom_emb)
ELSE
INSERT INTO adtb00023 VALUES (entrada.fecha,entrada.num_emp,entra.depto,
entra.nivel,entra.puesto,null,entrada.h_trans,
null,user,current,null,null)
INSERT INTO adtb00045 VALUES (entrada.fecha,entrada.h_trans,
entrada.num_emp,entrada.nom_emb)
END IF
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
EXIT INPUT
END INPUT
END FUNCTION
FUNCTION adpcmf032()
## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA LA
## MODIFICACION DE REGISTROS
#WHENEVER ERROR CONTINUE
CONSTRUCT BY NAME criterio ON a.num_emp
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC = " SELECT a.* ",
" FROM adtb00045 a ",
" WHERE ",
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 entrada.*
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 entrada.*
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT dato INTO entrada.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
DISPLAY BY NAME entrada.*
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS dato INTO entrada.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
DISPLAY BY NAME entrada.*
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST dato INTO entrada.*
DISPLAY BY NAME entrada.*
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST dato INTO entrada.*
DISPLAY BY NAME entrada.*
LET numero_msg = 4
CALL msg(numero_msg)
{
COMMAND "Escoger"
"<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
IF depto.status_t = "E" THEN
LET numero_msg = 39
CALL msg(numero_msg)
RETURN
END IF
## SE SELECCIONAN LOS CAMPOS QUE SON MODIFICABLES
INPUT BY NAME entrada.m_entrada WITHOUT DEFAULTS
#### 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
CALL integridad()
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
## AQUI SE ACTUALIZA EL REGISTRO
UPDATE adtb00038 SET entrada_n = entrada.m_entrada
WHERE @num_emp = entrada.num_emp
LET numero_msg = 13
CALL msg(numero_msg)
EXIT INPUT
END INPUT
}
{
## AQUI SE ELIMINAN LOS REGISTROS
COMMAND KEY ("L") "eLiminar"
UPDATE adtb00001 SET status_t = "E"
WHERE departamento = depto.departamento
LET numero_msg = 39
CALL msg(numero_msg)
}
COMMAND "Retornar"
"Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION