{ =============================================================================== 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" " Realiza Busqueda 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