642 lines
23 KiB
Plaintext
642 lines
23 KiB
Plaintext
{
|
|
------------------------------------------------------------------------
|
|
PROGRAMA : ADPRMT020
|
|
OBJETIVO : Capturar, Modificar, Eliminar registros de la
|
|
Tabla de Control de Entrada y Salida de Empleados
|
|
PROGRAMADOR : Ing. Betania Guerrero Perez
|
|
FECHA REALIZACION : Junio 11, 1993
|
|
------------------------------------------------------------------------
|
|
}
|
|
GLOBALS "adprgb000.4gl"
|
|
|
|
DEFINE usuario_c,usuario_m CHAR(9)
|
|
DEFINE fecha_c,fecha_m LIKE adtb00023.fech_crea
|
|
## DEFINICION DE VARIABLES PARA ORDENAMIENTO DE LOS REGISTROS
|
|
DEFINE reg2 ARRAY[200] OF INTEGER
|
|
DEFINE reg1 INTEGER
|
|
DEFINE descri CHAR(4)
|
|
DEFINE fecha1 DATE
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
CALL ARG_VAL(3) RETURNING impresor
|
|
let usuarios = "kpolanco"
|
|
let clave = "RevolutionX3"
|
|
CONNECT to "smarmotech" USER usuarios USING clave
|
|
SELECT a.* INTO p_companias.* FROM companias a
|
|
CALL adprmt020()
|
|
END MAIN
|
|
|
|
FUNCTION adprmt020()
|
|
|
|
CLEAR SCREEN
|
|
OPTIONS
|
|
FORM LINE 8,
|
|
ERROR LINE 24,
|
|
COMMENT LINE 23
|
|
|
|
OPEN FORM adfmmt020 FROM "adfmmt020"
|
|
DISPLAY FORM adfmmt020
|
|
|
|
DISPLAY "adprmt020" AT 4,3 ATTRIBUTE(RED)
|
|
DISPLAY "Control Entrada y Salida de Empleados" AT 6,24 ATTRIBUTE(BLACK)
|
|
|
|
MENU
|
|
ON ACTION nuevo
|
|
|
|
let int_flag = false
|
|
INITIALIZE emplea.* TO NULL
|
|
CALL adpcad020()
|
|
ON ACTION buscar
|
|
let int_flag = false
|
|
CALL adpcmf020()
|
|
ON ACTION Salir
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
|
|
FUNCTION adpcad020()
|
|
# WHENEVER ERROR CONTINUE
|
|
LET fecha1 = today using "dd/mm/yyyy"
|
|
|
|
## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO
|
|
LABEL vuelve:
|
|
INPUT BY NAME cont_emp.fecha,cont_emp.num_emp,cont_emp.departamento,
|
|
cont_emp.nivel_emp,cont_emp.cod_puesto
|
|
|
|
## VENTANA PARA DESPLEGAR LOS EMPLEADOS DE LA EMPRESA
|
|
ON KEY (CONTROL-W)
|
|
CASE
|
|
WHEN INFIELD (num_emp)
|
|
CALL busca_empleado()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
NEXT FIELD num_emp
|
|
END IF
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_emp
|
|
END IF
|
|
|
|
LET descrip1 = nombre
|
|
LET cont_emp.num_emp = despl_emp[curr1].num_emp
|
|
LET cont_emp.departamento = despl_emp[curr1].departamento
|
|
IF cont_emp.departamento IS NOT NULL THEN
|
|
SELECT nom_dpto INTO depto.nom_dpto FROM adtb00001
|
|
WHERE departamento = cont_emp.departamento
|
|
END IF
|
|
LET cont_emp.nivel_emp = despl_emp[curr1].nivel_emp
|
|
LET cont_emp.cod_puesto = despl_emp[curr1].cod_puesto
|
|
|
|
DISPLAY BY NAME cont_emp.num_emp,cont_emp.departamento,
|
|
cont_emp.nivel_emp,cont_emp.cod_puesto,
|
|
descrip1,depto.nom_dpto
|
|
NEXT FIELD hora_ent
|
|
END CASE
|
|
|
|
BEFORE FIELD fecha
|
|
{
|
|
IF fecha1 IS NULL THEN
|
|
LET cont_emp.fecha = today using "dd/mm/yyyy"
|
|
ELSE
|
|
LET cont_emp.fecha = fecha1 using "dd/mm/yyyy"
|
|
END IF
|
|
}
|
|
LET cont_emp.fecha = fecha1 using "dd/mm/yyyy"
|
|
|
|
DISPLAY BY NAME cont_emp.fecha
|
|
|
|
AFTER FIELD fecha
|
|
IF cont_emp.fecha IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
|
|
LET fecha1 = cont_emp.fecha
|
|
## VERIFICA QUE NO SE REPITA EL EMPLEADO PARA LA MISMA FECHA
|
|
AFTER FIELD num_emp
|
|
IF cont_emp.num_emp IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_emp
|
|
ELSE
|
|
SELECT UNIQUE convert(char(10),a.fecha,103),a.num_emp,a.departamento,
|
|
a.nivel_emp,a.cod_puesto
|
|
INTO cont_emp.fecha,cont_emp.num_emp,cont_emp.departamento,
|
|
cont_emp.nivel_emp,cont_emp.cod_puesto
|
|
FROM adtb00023 a
|
|
WHERE a.fecha=cont_emp.fecha and a.num_emp=cont_emp.num_emp and
|
|
a.status_t is null
|
|
|
|
IF status != NOTFOUND THEN
|
|
LET numero_msg = 12
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
END IF
|
|
|
|
## VERIFICA QUE EL EMPLEADO EXISTA EN LA TALA DE EMPLEAADOS
|
|
IF cont_emp.num_emp IS NOT NULL THEN
|
|
SELECT departamento,nivel_emp,cod_puesto,nom1_emp,nom2_emp,
|
|
apell1_emp,apell2_emp
|
|
INTO cont_emp.departamento,cont_emp.nivel_emp,cont_emp.cod_puesto,
|
|
nombre1,nombre2,apellido1,apellido2 FROM adtb00003
|
|
WHERE num_emp = cont_emp.num_emp and (status_t is null or
|
|
status_t = "I")
|
|
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_emp
|
|
END IF
|
|
|
|
## BUSCA EL NOMBRE DEL DEPARTAMENTO
|
|
SELECT nom_dpto INTO depto.nom_dpto FROM adtb00001
|
|
WHERE departamento = cont_emp.departamento and status_t is null
|
|
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_emp
|
|
END IF
|
|
|
|
LET descrip1 = nombre1 clipped," ",nombre2 clipped," ",
|
|
apellido1 clipped," ",apellido2 clipped
|
|
DISPLAY BY NAME cont_emp.departamento,cont_emp.nivel_emp,
|
|
cont_emp.cod_puesto,descrip1,depto.nom_dpto
|
|
END IF
|
|
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
RETURN
|
|
END IF
|
|
|
|
## CHEQUEO DE LAS HORAS DE ENTRADA Y SALIDA DE LOS EMPLEADOS
|
|
FOR idx = 1 to 5
|
|
LET arr_control[idx].hora_ent = NULL
|
|
LET arr_control[idx].hora_sal = NULL
|
|
|
|
DISPLAY arr_control[idx].hora_ent to consart[idx].hora_ent
|
|
DISPLAY arr_control[idx].hora_sal to consart[idx].hora_sal
|
|
END FOR
|
|
|
|
INPUT ARRAY arr_control FROM consart.*
|
|
|
|
BEFORE ROW
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
LET descr = NULL
|
|
LET descri = NULL
|
|
|
|
## CHEQUEA SI LA HORA DE ENTRADA FUE DE DIA O DE NOCHE
|
|
AFTER FIELD hora_ent
|
|
LET curr = arr_curr()
|
|
IF arr_control[curr].hora_ent >= "01:00" and
|
|
arr_control[curr].hora_ent <= "11:59" THEN
|
|
LET descr = "a.m."
|
|
END IF
|
|
IF arr_control[curr].hora_ent >= "12:01" and
|
|
arr_control[curr].hora_ent <= "23:59" THEN
|
|
LET descr = "p.m."
|
|
END IF
|
|
IF arr_control[curr].hora_ent = "00:00" THEN
|
|
LET descr = "m.n."
|
|
END IF
|
|
IF arr_control[curr].hora_ent = "12:00" THEN
|
|
LET descr = "m.d."
|
|
END IF
|
|
|
|
## CHEQUEA SI LA HORA DE SALIDA FUE DE DIA O DE NOCHE
|
|
AFTER FIELD hora_sal
|
|
LET curr = arr_curr()
|
|
IF arr_control[curr].hora_sal >= "01:00" and
|
|
arr_control[curr].hora_sal <= "11:59" THEN
|
|
LET descri = "a.m."
|
|
END IF
|
|
IF arr_control[curr].hora_sal >= "12:01" and
|
|
arr_control[curr].hora_sal <= "23:59" THEN
|
|
LET descri = "p.m."
|
|
END IF
|
|
IF arr_control[curr].hora_sal = "00:00" THEN
|
|
LET descri = "m.n."
|
|
END IF
|
|
IF arr_control[curr].hora_sal = "12:00" THEN
|
|
LET descri = "m.d."
|
|
END IF
|
|
|
|
## CHEQUEA QUE LA HORA DE ENTRADA Y SALIDA NO SEAN IGUALES
|
|
IF arr_control[curr].hora_sal = arr_control[curr].hora_ent THEN
|
|
LET numero_msg = 148
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD hora_sal
|
|
END IF
|
|
|
|
## CHEQUEA QUE LA HORA DE SALIDA NO SEA MENOR QUE LA HORA DE ENTRADA
|
|
IF arr_control[curr].hora_sal < arr_control[curr].hora_ent THEN
|
|
LET numero_msg = 150
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD hora_sal
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLEAR FORM
|
|
RETURN
|
|
END IF
|
|
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
## SI NO OCURRE NINGUN ERROR EN EL PROCESO SE PROCEDE A INSERTAR EL REGISTRO
|
|
## EN LA TABLA DE CONTROL DE ENTRADA Y SALIDA
|
|
FOR idx = 1 to arr_count()
|
|
IF arr_control[idx].hora_ent is not null or
|
|
arr_control[idx].hora_sal is not null THEN
|
|
|
|
INSERT INTO adtb00023
|
|
VALUES (cont_emp.fecha,cont_emp.num_emp,cont_emp.departamento,
|
|
cont_emp.nivel_emp,cont_emp.cod_puesto,
|
|
arr_control[idx].hora_ent,arr_control[idx].hora_sal,
|
|
null,SUSER_SNAME (),GETDATE (),null,null)
|
|
END IF
|
|
END FOR
|
|
|
|
LET numero_msg = 1
|
|
CALL msg(numero_msg)
|
|
CLEAR FORM
|
|
|
|
IF status < 0 THEN
|
|
|
|
CLEAR FORM
|
|
END IF
|
|
GOTO vuelve
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION adpcmf020()
|
|
|
|
## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA LA
|
|
## MODIFICACION DE REGISTROS
|
|
|
|
# # WHENEVER ERROR CONTINUE
|
|
## DEFINICION DEL CRITERIO DE BUSQUEDA PARA LA MODIFICACION/CONSULTA
|
|
CONSTRUCT criterio ON fecha,num_emp,departamento,nivel_emp,cod_puesto
|
|
FROM fecha,num_emp,departamento,nivel_emp,cod_puesto
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
RETURN
|
|
END IF
|
|
|
|
## SE SELECCIONAN LOS CAMPOS QUE SE DESEAN CONSULTAR/MODIFICAR
|
|
LET SELEC="SELECT UNIQUE convert(char(10),fecha,103),num_emp,departamento,nivel_emp,cod_puesto ",
|
|
"FROM adtb00023 ",
|
|
"WHERE status_t is null and ",criterio clipped," ORDER BY 1"
|
|
|
|
PREPARE busca FROM selec
|
|
DECLARE datos SCROLL CURSOR FOR busca
|
|
OPEN datos
|
|
|
|
## BUSCA LOS DATOS SELECCIONADOS
|
|
FETCH FIRST datos INTO cont_emp.*
|
|
|
|
IF status >= 0 THEN
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
END IF
|
|
|
|
SELECT nom_dpto INTO depto.nom_dpto FROM adtb00001
|
|
WHERE departamento = cont_emp.departamento
|
|
|
|
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
|
|
INTO nombre1,nombre2,apellido1,apellido2
|
|
FROM adtb00003
|
|
WHERE num_emp = cont_emp.num_emp and departamento = cont_emp.departamento and
|
|
nivel_emp = cont_emp.nivel_emp and cod_puesto = cont_emp.cod_puesto
|
|
|
|
LET descrip1 = nombre1 clipped," ",nombre2 clipped," ",
|
|
apellido1 clipped," ",apellido2 clipped
|
|
DISPLAY BY NAME cont_emp.fecha,cont_emp.num_emp,cont_emp.departamento,
|
|
cont_emp.nivel_emp,cont_emp.cod_puesto,depto.nom_dpto,
|
|
descrip1
|
|
CALL busca_us()
|
|
|
|
## BUSQUEDA DE LOS REGISTROS
|
|
MENU "OPCION"
|
|
COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado"
|
|
FETCH NEXT datos INTO cont_emp.*
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
SELECT nom_dpto INTO depto.nom_dpto FROM adtb00001
|
|
WHERE departamento = cont_emp.departamento
|
|
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
|
|
INTO nombre1,nombre2,apellido1,apellido2
|
|
FROM adtb00003
|
|
WHERE num_emp=cont_emp.num_emp and departamento=cont_emp.departamento and
|
|
nivel_emp = cont_emp.nivel_emp and cod_puesto = cont_emp.cod_puesto
|
|
LET descrip1 = nombre1 clipped," ",nombre2 clipped," ",
|
|
apellido1 clipped," ",apellido2 clipped
|
|
DISPLAY BY NAME cont_emp.fecha,cont_emp.num_emp,cont_emp.departamento,
|
|
cont_emp.nivel_emp,cont_emp.cod_puesto,depto.nom_dpto,
|
|
descrip1
|
|
CALL busca_us()
|
|
|
|
COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado"
|
|
FETCH PREVIOUS datos INTO cont_emp.*
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
SELECT nom_dpto INTO depto.nom_dpto FROM adtb00001
|
|
WHERE departamento = cont_emp.departamento
|
|
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
|
|
INTO nombre1,nombre2,apellido1,apellido2
|
|
FROM adtb00003
|
|
WHERE num_emp=cont_emp.num_emp and departamento=cont_emp.departamento and
|
|
nivel_emp = cont_emp.nivel_emp and cod_puesto=cont_emp.cod_puesto
|
|
|
|
LET descrip1 = nombre1 clipped," ",nombre2 clipped," ",
|
|
apellido1 clipped," ",apellido2 clipped
|
|
DISPLAY BY NAME cont_emp.fecha,cont_emp.num_emp,cont_emp.departamento,
|
|
cont_emp.nivel_emp,cont_emp.cod_puesto,depto.nom_dpto,
|
|
descrip1
|
|
CALL busca_us()
|
|
|
|
COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
|
|
FETCH FIRST datos INTO cont_emp.*
|
|
|
|
SELECT nom_dpto INTO depto.nom_dpto FROM adtb00001
|
|
WHERE departamento = cont_emp.departamento
|
|
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
|
|
INTO nombre1,nombre2,apellido1,apellido2
|
|
FROM adtb00003
|
|
WHERE num_emp=cont_emp.num_emp and departamento=cont_emp.departamento and
|
|
nivel_emp = cont_emp.nivel_emp and cod_puesto=cont_emp.cod_puesto
|
|
LET descrip1 = nombre1 clipped," ",nombre2 clipped," ",
|
|
apellido1 clipped," ",apellido2 clipped
|
|
DISPLAY BY NAME cont_emp.fecha,cont_emp.num_emp,cont_emp.departamento,
|
|
cont_emp.nivel_emp,cont_emp.cod_puesto,depto.nom_dpto,
|
|
descrip1
|
|
CALL busca_us()
|
|
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
|
|
COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
|
|
FETCH LAST datos INTO cont_emp.*
|
|
|
|
SELECT nom_dpto INTO depto.nom_dpto FROM adtb00001
|
|
WHERE departamento = cont_emp.departamento
|
|
SELECT nom1_emp,nom2_emp,apell1_emp,apell2_emp
|
|
INTO nombre1,nombre2,apellido1,apellido2
|
|
FROM adtb00003
|
|
WHERE num_emp=cont_emp.num_emp and departamento=cont_emp.departamento and
|
|
nivel_emp=cont_emp.nivel_emp and cod_puesto=cont_emp.cod_puesto
|
|
|
|
LET descrip1 = nombre1 clipped," ",nombre2 clipped," ",
|
|
apellido1 clipped," ",apellido2 clipped
|
|
DISPLAY BY NAME cont_emp.fecha,cont_emp.num_emp,cont_emp.departamento,
|
|
cont_emp.nivel_emp,cont_emp.cod_puesto,depto.nom_dpto,
|
|
descrip1
|
|
CALL busca_us()
|
|
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
|
|
COMMAND "Escoger" "<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
|
|
|
|
## SELECCION DEL REGISTRO QUE SE DESEA MODIFICAR
|
|
FOR idx = 1 to 5
|
|
LET arr_control[idx].hora_ent = NULL
|
|
LET arr_control[idx].hora_sal = NULL
|
|
|
|
DISPLAY arr_control[idx].hora_ent to consart[idx].hora_ent
|
|
DISPLAY arr_control[idx].hora_sal to consart[idx].hora_sal
|
|
END FOR
|
|
|
|
## DESPLEGA LOS DATOS DEL ARREGLO DEL REGISTRO ESCOGIDO
|
|
DECLARE controlar CURSOR FOR
|
|
SELECT rowid,a.hora_ent,a.hora_sal FROM adtb00023 a
|
|
WHERE a.fecha = cont_emp.fecha and a.num_emp = cont_emp.num_emp and
|
|
a.departamento = cont_emp.departamento and
|
|
a.nivel_emp = cont_emp.nivel_emp and
|
|
a.cod_puesto = cont_emp.cod_puesto and a.status_t is null
|
|
ORDER BY 1 DESC
|
|
LET idx = 1
|
|
|
|
FOREACH controlar INTO reg2[idx],arr_control[idx].*
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
EXIT FOREACH
|
|
END IF
|
|
|
|
IF arr_control[idx].hora_ent >= "01:00" and
|
|
arr_control[idx].hora_ent <= "11:59" THEN
|
|
LET descr = "a.m."
|
|
END IF
|
|
IF arr_control[idx].hora_ent >= "12:01" and
|
|
arr_control[idx].hora_ent <= "23:59" THEN
|
|
LET descr = "p.m."
|
|
END IF
|
|
IF arr_control[idx].hora_ent = "00:00" THEN
|
|
LET descr = "m.n."
|
|
END IF
|
|
IF arr_control[idx].hora_ent = "12:00" THEN
|
|
LET descr = "m.d."
|
|
END IF
|
|
|
|
IF arr_control[idx].hora_sal >= "01:00" and
|
|
arr_control[idx].hora_sal <= "11:59" THEN
|
|
LET descri = "a.m."
|
|
END IF
|
|
IF arr_control[idx].hora_sal >= "12:01" and
|
|
arr_control[idx].hora_sal <= "23:59" THEN
|
|
LET descri = "p.m."
|
|
END IF
|
|
IF arr_control[idx].hora_sal = "00:00" THEN
|
|
LET descri = "m.n."
|
|
END IF
|
|
IF arr_control[idx].hora_sal = "12:00" THEN
|
|
LET descri = "m.d."
|
|
END IF
|
|
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
CALL set_count(idx - 1)
|
|
|
|
INPUT ARRAY arr_control WITHOUT DEFAULTS FROM consart.*
|
|
|
|
BEFORE ROW
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
LET descr = NULL
|
|
LET descri = NULL
|
|
|
|
## CHEQUEA SI LA HORA DE ENTRADA ES DE DIA O DE NOCHE
|
|
AFTER FIELD hora_ent
|
|
IF arr_control[curr].hora_ent >= "01:00" and
|
|
arr_control[curr].hora_ent <= "11:59" THEN
|
|
LET descr = "a.m."
|
|
END IF
|
|
IF arr_control[curr].hora_ent >= "12:01" and
|
|
arr_control[curr].hora_ent <= "23:59" THEN
|
|
LET descr = "p.m."
|
|
END IF
|
|
IF arr_control[curr].hora_ent = "00:00" THEN
|
|
LET descr = "m.n."
|
|
END IF
|
|
IF arr_control[curr].hora_ent = "12:00" THEN
|
|
LET descr = "m.d."
|
|
END IF
|
|
|
|
## CHEQUEA SI LA HORA DE SALIDA ES DE DIA O DE NOCHE
|
|
AFTER FIELD hora_sal
|
|
IF arr_control[curr].hora_sal >= "01:00" and
|
|
arr_control[curr].hora_sal <= "11:59" THEN
|
|
LET descri = "a.m."
|
|
END IF
|
|
IF arr_control[curr].hora_sal >= "12:01" and
|
|
arr_control[curr].hora_sal <= "23:59" THEN
|
|
LET descri = "p.m."
|
|
END IF
|
|
IF arr_control[curr].hora_sal = "00:00" THEN
|
|
LET descri = "m.n."
|
|
END IF
|
|
IF arr_control[curr].hora_sal = "12:00" THEN
|
|
LET descri = "m.d."
|
|
END IF
|
|
|
|
## CHEQUEA QUE LA HORA DE SALIDA NO SEA IGUAL QUE LA DE ENTRADA
|
|
IF arr_control[curr].hora_sal = arr_control[curr].hora_ent THEN
|
|
LET numero_msg = 148
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD hora_sal
|
|
END IF
|
|
|
|
## CHEQUEA QUE LA HORA DE SALIDA NO SEA MENOR QUE LA HORA DE ENTRADA
|
|
IF arr_control[curr].hora_sal < arr_control[curr].hora_ent THEN
|
|
LET numero_msg = 150
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD hora_sal
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
IF status < 0 THEN
|
|
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
END IF
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLEAR FORM
|
|
RETURN
|
|
END IF
|
|
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
|
|
## ACTUALIZACION DEL REGISTRO MODIFICADO
|
|
FOR idx = 1 to arr_count()
|
|
IF arr_control[idx].hora_ent is not null or
|
|
arr_control[idx].hora_sal is not null THEN
|
|
|
|
UPDATE adtb00023 set hora_ent = arr_control[idx].hora_ent,
|
|
hora_sal = arr_control[idx].hora_sal,
|
|
us_mod = SUSER_SNAME (),
|
|
fech_mod = GETDATE ()
|
|
WHERE rowid = reg2[idx]
|
|
|
|
END IF
|
|
END FOR
|
|
|
|
LET numero_msg = 13
|
|
CALL msg(numero_msg)
|
|
|
|
IF status < 0 THEN
|
|
|
|
END IF
|
|
|
|
## ELIMINACION DEL REGISTRO ESCOGIDO
|
|
COMMAND KEY ("L") "eLiminar"
|
|
UPDATE adtb00023 SET status_t = "E"
|
|
WHERE fecha = cont_emp.fecha and
|
|
num_emp = cont_emp.num_emp and
|
|
departamento = cont_emp.departamento and
|
|
nivel_emp = cont_emp.nivel_emp and
|
|
cod_puesto = cont_emp.cod_puesto
|
|
|
|
LET numero_msg = 39
|
|
CALL msg(numero_msg)
|
|
|
|
COMMAND "Retornar"
|
|
"Retorna al menu anterior"
|
|
CLEAR FORM
|
|
|
|
FOR idx = 1 to 5
|
|
LET arr_control[idx].hora_ent = NULL
|
|
LET arr_control[idx].hora_sal = NULL
|
|
|
|
DISPLAY arr_control[idx].hora_ent to consart[idx].hora_ent
|
|
DISPLAY arr_control[idx].hora_sal to consart[idx].hora_sal
|
|
END FOR
|
|
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
|
|
FUNCTION busca_us()
|
|
# WHENEVER ERROR CONTINUE
|
|
SELECT UNIQUE us_crea,fech_crea,fech_mod,us_mod
|
|
INTO usuario_c, fecha_c,fecha_m,usuario_m
|
|
FROM adtb00023
|
|
WHERE num_emp = cont_emp.num_emp and
|
|
departamento = cont_emp.departamento and
|
|
nivel_emp = cont_emp.nivel_emp and
|
|
cod_puesto = cont_emp.cod_puesto and
|
|
fecha = cont_emp.fecha
|
|
IF status < 0 THEN
|
|
SELECT UNIQUE us_crea,us_mod
|
|
INTO usuario_c, usuario_m
|
|
FROM adtb00023
|
|
WHERE num_emp = cont_emp.num_emp and
|
|
departamento = cont_emp.departamento and
|
|
nivel_emp = cont_emp.nivel_emp and
|
|
cod_puesto = cont_emp.cod_puesto and
|
|
fecha = cont_emp.fecha
|
|
LET fecha_c = null
|
|
LET fecha_m = null
|
|
END IF
|
|
|
|
DISPLAY BY NAME usuario_c,usuario_m,fecha_c,fecha_m
|
|
END FUNCTION
|