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

366 lines
11 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : NOPRMT009
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Control Periodos del Seguro Social
PROGRAMADOR : Oscar Castillo
FECHA REALIZACION : Wednesday, 22 November, 2000
------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
DEFINE per_aseg RECORD LIKE adtb00041.*,
nom_mes LIKE mestable.descrip
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 adprmt030()
END MAIN
FUNCTION adprmt030()
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
#LET formulario = formulario CLIPPED,"nofmmt009"
OPEN FORM adfmmt030 FROM "adfmmt030"
DISPLAY FORM adfmmt030
DISPLAY "adprmt030" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Control Periodos del Seguro Social" AT 6,25 ATTRIBUTE(BLACK)
MENU
ON ACTION nuevo
let int_flag = false
INITIALIZE emplea.* TO NULL
CALL adpcad030()
ON ACTION buscar
let int_flag = false
CALL adpcmf030()
ON ACTION Salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION adpcad030()
# WHENEVER ERROR CONTINUE
## Captura los datos que va a contener el registro
INPUT BY NAME per_aseg.*
## Verifica que el periodo de la nomina no exista en el catalogo de periodos.
## Si existe entonces despliega los dato del registro existente.
AFTER FIELD mes
IF per_aseg.mes IS NOT NULL THEN
SELECT a.descrip INTO nom_mes FROM mestable a
WHERE a.mes = per_aseg.mes and
a.status_t is null
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD mes
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD mes
END IF
DISPLAY BY NAME nom_mes
AFTER FIELD ano
IF per_aseg.ano IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ano
END IF
SELECT a.*
FROM adtb00041 a
WHERE a.mes = per_aseg.mes
AND a.ano = per_aseg.ano
IF STATUS != NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD mes
END IF
AFTER FIELD num_sem
IF per_aseg.num_sem IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_sem
END IF
AFTER FIELD fecha_del
IF per_aseg.fecha_del IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_del
END IF
AFTER FIELD fecha_al
IF per_aseg.fecha_al IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_al
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF per_aseg.mes IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD mes
END IF
IF per_aseg.ano IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ano
END IF
IF per_aseg.num_sem IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_sem
END IF
IF per_aseg.fecha_del IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_del
END IF
IF per_aseg.fecha_al IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_al
ELSE
INSERT INTO adtb00041 VALUES (per_aseg.mes,per_aseg.ano,
per_aseg.num_sem,
per_aseg.fecha_del,per_aseg.fecha_al,
null, SUSER_SNAME (),GETDATE (),null,null)
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
#NEXT FIELD tipo_emp
END IF
END INPUT
END FUNCTION
FUNCTION adpcmf030()
## Aqui se prepara para la captura del criterio de seleccion para modificar
## el registro
# WHENEVER ERROR CONTINUE
CONSTRUCT BY NAME criterio ON a.mes,a.ano
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC = " SELECT UNIQUE convert(char(10),a.mes,103) FROM adtb00041 a ",
" where a.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 datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO per_aseg.*
#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
SELECT a.descrip INTO nom_mes FROM mestable a
WHERE a.mes = per_aseg.mes
DISPLAY BY NAME per_aseg.*,nom_mes
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO per_aseg.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT a.descrip INTO nom_mes FROM mestable a
WHERE a.mes = per_aseg.mes
DISPLAY BY NAME per_aseg.*,nom_mes
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO per_aseg.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT a.descrip INTO nom_mes FROM mestable a
WHERE a.mes = per_aseg.mes
DISPLAY BY NAME per_aseg.*,nom_mes
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO per_aseg.*
SELECT a.descrip INTO nom_mes FROM mestable a
WHERE a.mes = per_aseg.mes
DISPLAY BY NAME per_aseg.*,nom_mes
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO per_aseg.*
SELECT a.descrip INTO nom_mes FROM mestable a
WHERE a.mes = per_aseg.mes
DISPLAY BY NAME per_aseg.*,nom_mes
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
"<Esc> Actualiza Registro <CTRL-C> Cancela Operacion"
{
IF per_aseg.status_t = "P" THEN
LET numero_msg = 199
CALL msg(numero_msg)
RETURN
END IF
IF per_aseg.status_t = "E" THEN
LET numero_msg = 39
CALL msg(numero_msg)
RETURN
END IF
IF per_aseg.status_t = "P" THEN
LET numero_msg = 199
CALL msg(numero_msg)
RETURN
END IF
}
INPUT BY NAME per_aseg.num_sem,
per_aseg.fecha_del,per_aseg.fecha_al
WITHOUT DEFAULTS
AFTER FIELD num_sem
IF per_aseg.num_sem IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_sem
END IF
AFTER FIELD fecha_del
IF per_aseg.fecha_del IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_del
END IF
AFTER FIELD fecha_al
IF per_aseg.fecha_al IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_al
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
{
CALL integridad()
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
}
UPDATE adtb00041 SET num_sem = per_aseg.num_sem,
fecha_del = per_aseg.fecha_del,
fecha_al = per_aseg.fecha_al,
us_mod = SUSER_SNAME (),
fech_mod = GETDATE ()
WHERE @mes = per_aseg.mes and
@ano = per_aseg.ano
LET numero_msg = 13
CALL msg(numero_msg)
EXIT INPUT
END INPUT
COMMAND KEY ("L") "eLiminar"
UPDATE adtb00041 SET status_t = "E"
WHERE @mes = per_aseg.mes and
@ano = per_aseg.ano
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
"Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION