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

208 lines
6.4 KiB
Plaintext

{
===============================================================================
PROGRAMA : NOPRCS004
SISTEMA : Sistema de Nomina
OBJETIVO : Consulta de los datos concerniente al acumulado por tipo
de movimiento y por cada empleado.
PROGRAMADOR : Tadeo A. Ferreras F.
FECHA : Agosto 23, 1993
===============================================================================
}
GLOBALS "noprgb000.4gl"
DEFINE empl RECORD
tipo VARCHAR(1),
num_emp SMALLINT,
departamento SMALLINT,
nivel_emp SMALLINT,
cod_puesto SMALLINT,
nombre CHAR(30),
apellido CHAR(30),
nom_dpto CHAR(30),
fecha_entrada DATE
END RECORD
DEFINE empl1 RECORD
num_emp SMALLINT,
departamento SMALLINT,
nivel_emp SMALLINT,
cod_puesto SMALLINT,
nombre CHAR(30),
nom_dpto CHAR(30)
END RECORD
DEFINE acumul DYNAMIC ARRAY OF RECORD
cod_mov INTEGER,
descrip_mov CHAR(30),
valor DECIMAL(12,2)
END RECORD,
pfecha1,pfecha2 DATE,
psueldo,psalario_dia DEC(12,2)
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 noprcs004()
END MAIN
FUNCTION noprcs004()
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM nofmcs004 FROM "nofmcs004"
DISPLAY FORM nofmcs004
DISPLAY "noprcs004" AT 4,3
DISPLAY "Acumulado Por Empleados" AT 6,28
MENU "OPCIONES"
COMMAND "Consultar"
"<Esc> Realiza Busqueda <CTRL-C> Cancela Operacion"
let int_flag = false
CALL consulta4()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION consulta4()
CLEAR FORM
## Aqui se prepara para la captura del criterio de seleccion
INPUT BY NAME pfecha1,pfecha2
BEFORE INPUT
LET pfecha2 = TODAY
DISPLAY BY NAME pfecha2
AFTER INPUT
IF INT_FLAG THEN
CALL msg(2)
LET INT_FLAG=FALSE
RETURN
END IF
END INPUT
CONSTRUCT criterio ON a.num_emp,a.departamento FROM num_emp,departamento
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET selec =
"SELECT DISTINCT a.tipo_emp,a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ",
" b.nom1_emp,b.apell1_emp,c.nom_dpto,CONVERT(CHAR(10),b.fech_efec,103) ",
"FROM notb00008 a,adtb00003 b,adtb00001 c ",
"WHERE a.num_emp = b.num_emp ",
"AND a.departamento = c.departamento ",
"AND a.status_t IS NULL AND ",
criterio CLIPPED, " ORDER BY a.num_emp"
PREPARE comando FROM selec
DECLARE busco SCROLL CURSOR FOR comando
OPEN busco
FETCH FIRST busco INTO empl.*
LET empl1.num_emp = empl.num_emp
LET empl1.departamento = empl.departamento
LET empl1.nivel_emp = empl.nivel_emp
LET empl1.cod_puesto = empl.cod_puesto
LET empl1.nombre = empl.nombre CLIPPED," ",empl.apellido CLIPPED
LET empl1.nom_dpto = empl.nom_dpto
CALL calcula_salarios(empl.tipo,empl.num_emp,pfecha2) RETURNING psalario_dia,psueldo
DISPLAY BY NAME empl1.*,psalario_dia,empl.fecha_entrada
MENU "OPCIONES"
COMMAND "Siguiente" "Ver Sigte. Registro"
FETCH NEXT busco INTO empl.*
LET empl1.num_emp = empl.num_emp
LET empl1.departamento = empl.departamento
LET empl1.nivel_emp = empl.nivel_emp
LET empl1.cod_puesto = empl.cod_puesto
LET empl1.nombre = empl.nombre CLIPPED," ",empl.apellido CLIPPED
LET empl1.nom_dpto = empl.nom_dpto
CALL calcula_salarios(empl.tipo,empl.num_emp,pfecha2) RETURNING psalario_dia,psueldo
DISPLAY BY NAME empl1.*,psalario_dia,empl.fecha_entrada
COMMAND "Anterior" "Ver Registro Anterior"
FETCH PREVIOUS busco INTO empl.*
LET empl1.num_emp = empl.num_emp
LET empl1.departamento = empl.departamento
LET empl1.nivel_emp = empl.nivel_emp
LET empl1.cod_puesto = empl.cod_puesto
LET empl1.nombre = empl.nombre CLIPPED," ",empl.apellido CLIPPED
LET empl1.nom_dpto = empl.nom_dpto
CALL calcula_salarios(empl.tipo,empl.num_emp,pfecha2) RETURNING psalario_dia,psueldo
DISPLAY BY NAME empl1.*,psalario_dia,empl.fecha_entrada
COMMAND "Primero" "Ver Primer Registro"
FETCH FIRST busco INTO empl.*
LET empl1.num_emp = empl.num_emp
LET empl1.departamento = empl.departamento
LET empl1.nivel_emp = empl.nivel_emp
LET empl1.cod_puesto = empl.cod_puesto
LET empl1.nombre = empl.nombre CLIPPED," ",empl.apellido CLIPPED
LET empl1.nom_dpto = empl.nom_dpto
CALL calcula_salarios(empl.tipo,empl.num_emp,pfecha2) RETURNING psalario_dia,psueldo
DISPLAY BY NAME empl1.*,psalario_dia,empl.fecha_entrada
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo" "Ver Ultimo Registro"
FETCH LAST busco INTO empl.*
LET empl1.num_emp = empl.num_emp
LET empl1.departamento = empl.departamento
LET empl1.nivel_emp = empl.nivel_emp
LET empl1.cod_puesto = empl.cod_puesto
LET empl1.nombre = empl.nombre CLIPPED," ",empl.apellido CLIPPED
LET empl1.nom_dpto = empl.nom_dpto
CALL calcula_salarios(empl.tipo,empl.num_emp,pfecha2) RETURNING psalario_dia,psueldo
DISPLAY BY NAME empl1.*,psalario_dia,empl.fecha_entrada
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Ver" "Presione ESC o CTRL-C para volver al menu"
DECLARE busca CURSOR FOR
SELECT UNIQUE a.cod_mov,b.descrip_mov,SUM(a.valor),a.clase_mov
FROM notb00008 a,notb00002 b
WHERE a.cod_mov = b.cod_mov AND
a.status_t IS NULL AND
a.num_emp = empl.num_emp AND
a.fecha BETWEEN pfecha1 AND pfecha2
GROUP BY a.cod_mov,b.descrip_mov,a.clase_mov ORDER BY a.clase_mov DESC,a.cod_mov
LET idx =1
FOREACH busca INTO acumul[idx].*
LET idx = idx + 1
END FOREACH
CALL SET_COUNT(idx - 1)
DISPLAY ARRAY acumul TO acumul1.*
COMMAND "Retornar"
EXIT MENU
CLEAR FORM
END MENU
END FUNCTION