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

482 lines
16 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : NOPRMT018
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Control de Recibos En Efectivos
PROGRAMADOR : Ing. Tadeo Ferreras
FECHA REALIZACION : Septiembre 09, 1993
------------------------------------------------------------------
}
GLOBALS "noprgb000.4gl"
DEFINE descrip_mov CHAR(30)
DEFINE monto1 DECIMAL(10,2)
DEFINE p_nomina CHAR(1)
DEFINE prestamo18 RECORD
num_emp LIKE notb00008.num_emp,
departamento LIKE notb00008.departamento,
nivel_emp LIKE notb00008.nivel_emp,
cod_puesto LIKE notb00008.cod_puesto,
num_doc LIKE notb00008.num_nomi,
fecha DATE,
cod_mov SMALLINT,
monto DECIMAL(12,2),
status_t CHAR(1),
us_crea CHAR(50),
fech_crea CHAR(16),
us_mod CHAR(50),
fech_mod CHAR(16)
END RECORD
DEFINE nombre18,apellido18 CHAR(14)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
# LET usuarios = 'jsoto'
# LET clave = 'lmmjvsd2009'
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL noprmt018()
END MAIN
FUNCTION noprmt018()
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM nofmmt018 FROM "nofmmt018"
DISPLAY FORM nofmmt018
MENU "OPCIONES"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <CTRL-C> Cancela Operacion"
let int_flag = false
CLEAR FORM
CALL nopcad018()
COMMAND "Consultar-modificar"
"<Esc> Realiza Busqueda <CTRL-C> Cancela Operacion"
let int_flag = false
CALL nopcmf018()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION nopcad018()
# WHENEVER ERROR CONTINUE
## Captura los datos que va a contener el registro
INPUT BY NAME prestamo18.*
## Verifica que el registro no exista. Si existe, entonces despliega los
## datos del registro existente.
AFTER FIELD num_emp
IF prestamo18.num_emp IS NOT NULL THEN
SELECT departamento,nivel_emp,cod_puesto,nom1_emp,apell1_emp,
nomina
INTO prestamo18.departamento,prestamo18.nivel_emp,
prestamo18.cod_puesto,nombre18,apellido18,p_nomina
FROM adtb00003
WHERE num_emp = prestamo18.num_emp and
(status_t IS NULL OR status_t NOT IN ("T","E"))
IF status = NOTFOUND THEN
LET numero_msg = 159
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_puesto
END IF
LET descrip1 = nombre18 clipped," ",apellido18 clipped
DISPLAY BY NAME prestamo18.departamento,prestamo18.nivel_emp,
prestamo18.cod_puesto,descrip1
AFTER FIELD num_doc
IF prestamo18.num_doc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
AFTER FIELD cod_mov
IF prestamo18.cod_mov IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
SELECT unique a.num_nomi FROM notb00008 a
WHERE a.num_emp = prestamo18.num_emp and
a.num_nomi= prestamo18.num_doc and
a.cod_mov = prestamo18.cod_mov AND
a.clase_mov = 'P'
IF status != NOTFOUND THEN
IF prestamo18.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
SELECT a.descrip_mov INTO descrip_mov FROM notb00002 a
WHERE a.cod_mov = prestamo18.cod_mov and a.status_t is null AND
a.clase_mov = "D"
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
DISPLAY BY NAME descrip_mov
SELECT SUM(a.valor) INTO monto1 FROM notb00008 a
WHERE a.num_emp = prestamo18.num_emp AND
a.status_t IS NULL AND
a.cod_mov = prestamo18.cod_mov
IF monto1 <= 0 THEN
LET numero_msg = 202
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
AFTER FIELD fecha
IF prestamo18.fecha IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
AFTER FIELD monto
IF prestamo18.monto IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD monto
END IF
IF prestamo18.monto > monto1 THEN
LET numero_msg = 202
CALL msg(numero_msg)
NEXT FIELD monto
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF prestamo18.num_emp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
IF prestamo18.num_doc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
IF prestamo18.cod_mov IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
IF prestamo18.fecha IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
IF prestamo18.monto IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD monto
ELSE
# Inserta en nomina los prestamo18mos de los empleados
IF prestamo18.monto > 0 THEN
LET prestamo18.monto = prestamo18.monto * -1
END IF
IF prestamo18.monto < 0 THEN
INSERT INTO notb00008 (num_emp,departamento,nivel_emp,cod_puesto,
cod_mov,valor,fecha,num_nomi,tipo_emp,
us_crea,fech_crea,clase_mov)
VALUES (prestamo18.num_emp,prestamo18.departamento,
prestamo18.nivel_emp,prestamo18.cod_puesto,
prestamo18.cod_mov,prestamo18.monto,prestamo18.fecha,
prestamo18.num_doc,p_nomina,SUSER_SNAME(),GETDATE(),'P')
END IF
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
LET prestamo18.num_emp = NULL
LET prestamo18.departamento = NULL
LET prestamo18.nivel_emp = NULL
LET prestamo18.cod_puesto = NULL
LET prestamo18.num_doc = NULL
LET prestamo18.cod_mov = NULL
LET prestamo18.fecha = NULL
LET prestamo18.monto = NULL
LET p_nomina = NULL
NEXT FIELD num_emp
END IF
AFTER FIELD fech_mod
EXIT INPUT
END INPUT
END FUNCTION
FUNCTION nopcmf018()
## Aqui se prepara para la captura del criterio de selenoion
# WHENEVER ERROR CONTINUE
CONSTRUCT criterio ON a.num_emp,a.num_nomi,a.cod_mov
FROM num_emp,num_doc,cod_mov
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC =
{ " SELECT DISTINCT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ",
" a.num_nomi,CONVERT(CHAR(10),a.fecha,103),a.cod_mov,a.valor*-1,a.status_t,a.us_crea, ",
" a.fech_crea",
" FROM notb00008 a where a.status_t is null and a.clase_mov = 'P' AND ",
criterio clipped," ORDER BY a.num_emp,a.departamento,a.num_nomi"
}
" SELECT DISTINCT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ",
" a.num_nomi,CONVERT(CHAR(10),a.fecha,103),a.cod_mov,a.valor*-1,a.status_t,a.us_crea, ",
"cast(a.fech_crea as varchar(20)) ",
" FROM notb00008 a where a.status_t is null and a.clase_mov = 'P' AND ",
criterio clipped," ORDER BY a.num_emp,a.departamento,a.num_nomi"
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 prestamo18.*
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_mov INTO descrip_mov FROM notb00002 a
WHERE a.cod_mov = prestamo18.cod_mov
SELECT a.nom1_emp,a.apell1_emp INTO nombre18,apellido18 FROM adtb00003 a
WHERE a.num_emp = prestamo18.num_emp
LET descrip1 = nombre18 clipped," ",apellido18 clipped
DISPLAY BY NAME prestamo18.*,descrip1,descrip_mov
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO prestamo18.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT a.descrip_mov INTO descrip_mov FROM notb00002 a
WHERE a.cod_mov = prestamo18.cod_mov
SELECT a.nom1_emp,a.apell1_emp INTO nombre18,apellido18 FROM adtb00003 a
WHERE a.num_emp = prestamo18.num_emp
LET descrip1 = nombre18 clipped," ",apellido18 clipped
DISPLAY BY NAME prestamo18.*,descrip1,descrip_mov
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO prestamo18.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT a.descrip_mov INTO descrip_mov FROM notb00002 a
WHERE a.cod_mov = prestamo18.cod_mov
SELECT a.nom1_emp,a.apell1_emp INTO nombre18,apellido18 FROM adtb00003 a
WHERE a.num_emp = prestamo18.num_emp
LET descrip1 = nombre18 clipped," ",apellido18 clipped
DISPLAY BY NAME prestamo18.*,descrip1,descrip_mov
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO prestamo18.*
SELECT a.descrip_mov INTO descrip_mov FROM notb00002 a
WHERE a.cod_mov = prestamo18.cod_mov
SELECT a.nom1_emp,a.apell1_emp INTO nombre18,apellido18 FROM adtb00003 a
WHERE a.num_emp = prestamo18.num_emp
LET descrip1 = nombre18 clipped," ",apellido18 clipped
DISPLAY BY NAME prestamo18.*,descrip1,descrip_mov
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO prestamo18.*
SELECT a.descrip_mov INTO descrip_mov FROM notb00002 a
WHERE a.cod_mov = prestamo18.cod_mov
SELECT a.nom1_emp,a.apell1_emp INTO nombre18,apellido18 FROM adtb00003 a
WHERE a.num_emp = prestamo18.num_emp
LET descrip1 = nombre18 clipped," ",apellido18 clipped
DISPLAY BY NAME prestamo18.*,descrip1,descrip_mov
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
"<Esc> Actualiza Registro <CTRL-C> Cancela Operacion"
IF prestamo18.status_t = "E" THEN
LET numero_msg = 39
CALL msg(numero_msg)
RETURN
END IF
INPUT BY NAME prestamo18.num_doc,prestamo18.fecha,prestamo18.cod_mov,
prestamo18.monto WITHOUT DEFAULTS
AFTER FIELD num_doc
IF prestamo18.num_doc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
AFTER FIELD cod_mov
IF prestamo18.cod_mov is not null THEN
SELECT a.descrip_mov INTO descrip_mov FROM notb00002 a
WHERE a.cod_mov = prestamo18.cod_mov and a.status_t is null AND
a.clase_mov = "D"
IF status = NOTFOUND THEN
LET numero_msg = 34
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
DISPLAY BY NAME descrip_mov
AFTER FIELD monto
IF prestamo18.monto IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD monto
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
# Inserta en nomina los prestamo18mos de los empleados
SELECT nomina INTO p_nomina FROM adtb00003
WHERE num_emp = prestamo18.num_emp AND (status_t IS NULL OR
status_t NOT IN ("E","T"))
DELETE FROM notb00008
WHERE num_emp = prestamo18.num_emp and clase_mov= "P" and
num_nomi = prestamo18.num_doc
IF prestamo18.monto > 0 THEN
LET prestamo18.monto = prestamo18.monto * -1
END IF
IF prestamo18.monto < 0 THEN
INSERT INTO notb00008 (num_emp,departamento,nivel_emp,cod_puesto,
cod_mov,valor,fecha,num_nomi,tipo_emp,
us_crea,fech_crea,clase_mov)
VALUES (prestamo18.num_emp,prestamo18.departamento,
prestamo18.nivel_emp,prestamo18.cod_puesto,
prestamo18.cod_mov,prestamo18.monto,prestamo18.fecha,
prestamo18.num_doc,p_nomina,SUSER_SNAME(),GETDATE(),'P')
END IF
CALL integridad()
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
LET numero_msg = 13
CALL msg(numero_msg)
EXIT INPUT
END INPUT
COMMAND KEY ("L") "eLiminar"
UPDATE notb00008 set status_t = "E",
us_mod = suser_sname(),
fech_mod = getdate()
WHERE num_emp = prestamo18.num_emp AND num_nomi = prestamo18.num_doc
AND cod_mov = prestamo18.cod_mov AND clase_mov = 'P'
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar" "Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION