{ ------------------------------------------------------------------------------- PROGRAMA : ADPRRP017 OBJETIVO : AUSENCIAS DEL PERSONAL E INDICE DE AUSENTISMO PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Julio 06, 1993 ------------------------------------------------------------------------------- } GLOBALS "adprgb000.4gl" FUNCTION adprrp017() ## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE DEFINE ausencia RECORD num_emp LIKE adtb00020.num_emp, departamento LIKE adtb00020.departamento, nivel_emp LIKE adtb00020.nivel_emp, cod_puesto LIKE adtb00020.cod_puesto, fech_efec LIKE adtb00020.fech_efec, desc_mto LIKE adtb00009.desc_mto, cantidad_d INTEGER, depto CHAR(4), depart CHAR(4) END RECORD, cod_mto LIKE adtb00020.cod_mto, sec_mto LIKE adtb00020.sec_mto # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN OPEN FORM adfmrp007 FROM "adfmrp007" DISPLAY FORM adfmrp007 CALL pantalla() DISPLAY "adprrp017" AT 4,3 ATTRIBUTE(RED) DISPLAY "Ausentismos" AT 6,37 ATTRIBUTE(BLACK) ## INDICA EL TIPO DE PAPEL NECESARIO PARA EL REPORTE. 1 - PAPEL 9 1/2 X 11 ## 2 - PAPEL 14 7/8 X 11 LET tipo_papel = 1 CALL msgrp000(tipo_papel) CALL defecto(impresor) RETURNING imprime, letras.*, archivo ## SE INDICA EL RANGO DE FECHA DESEADO PARA LISTAR LAS AUSENCIAS LET datos.fech_ini = NULL LET datos.fech_fin = NULL INPUT BY NAME datos.fech_ini,datos.fech_fin WITHOUT DEFAULTS ON KEY(CONTROL-P) CALL busca_printer() RETURNING imprime,letras.*, archivo AFTER FIELD fech_ini IF datos.fech_ini IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_ini END IF AFTER FIELD fech_fin IF datos.fech_fin IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_fin END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF EXIT INPUT END INPUT ## DEFINICION DEL CRITERIO DE BUSQUEDA PARA IMPRIMIR EL REPORTE CONSTRUCT criterio ON a.departamento,a.num_emp,a.cod_mto,a.sec_mto FROM departamento,num_emp,cod_mto,sec_mto ON KEY(CONTROL-P) CALL busca_printer() RETURNING imprime,letras.*, archivo AFTER CONSTRUCT EXIT CONSTRUCT END CONSTRUCT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF ## SE SELECCIONAN LOS CAMPOS NECESARIOS PARA EL REPORTE LET SELEC = "SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto,a.fech_efec, ", " d.desc_mto,c.num_dia ", "FROM adtb00020 a,adtb00009 d,OUTER adtb00032 c ", "WHERE ",criterio CLIPPED," AND a.num_trx = c.num_trx AND ", " a.cod_mto=c.cod_mov AND a.sec_mto=c.sec_mov AND ", " a.cod_mto=d.cod_mto AND a.sec_mto=d.sec_mto AND a.cod_mto=3 AND ", " a.sec_mto between 2 and 17 AND a.status_t is null AND ", " a.status_t is null AND ", " a.fech_efec BETWEEN ? AND ? ORDER BY 2,1" DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) ## SE PREPARA LA INFORMACION SELECCIONADA PREPARE busca FROM selec CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF ## SE DECLARA UN CURSOR PARA BUSCAR LA INFORMACION SELECCIONADA DECLARE accion CURSOR FOR busca OPEN accion USING datos.fech_ini,datos.fech_fin DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) START REPORT ausente TO archivo ## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE ## SALIDA AL REPORTE WHILE STATUS != NOTFOUND FETCH accion INTO ausencia.* IF STATUS = NOTFOUND THEN EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET ausencia.depto = ausencia.departamento LET ausencia.depart = ausencia.depto[1,1] OUTPUT TO REPORT ausente(ausencia.*) END WHILE FINISH REPORT ausente RUN imprime CLEAR SCREEN END FUNCTION ## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE REPORT ausente(x) DEFINE x RECORD num_emp LIKE adtb00020.num_emp, departamento LIKE adtb00020.departamento, nivel_emp LIKE adtb00020.nivel_emp, cod_puesto LIKE adtb00020.cod_puesto, fech_efec LIKE adtb00020.fech_efec, desc_mto LIKE adtb00009.desc_mto, cantidad_d INTEGER, depto CHAR(4), depart CHAR(4) END RECORD DEFINE nom1_emp,apell1_emp CHAR(15), nom_dpto CHAR(30) ## DEFINICION DE LAS VARIABLES DE IMPRESION DEFINE hora CHAR(5) DEFINE tot_emp,num_ausencias,no_empleados1,no_empleados,num_ausen INTEGER DEFINE indice DECIMAL(5,2), numero SMALLINT OUTPUT ## DEFINICION DE LOS MARGENES DE IMPRESION TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 3 FORMAT PAGE HEADER LET hora = time ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS PRINT COLUMN 1, letras.comp_on, COLUMN 2, "adprrp017", COLUMN 14, letras.negrillas_on, COLUMN 45, "R A Y . O . V A C D O M I N I C A N A, S. A.", COLUMN 65, letras.negrillas_off, COLUMN 130, "Pag. ",pageno using "###" PRINT COLUMN 48, "Sistema de Administracion de Personal", COLUMN 125, today using "dd/mm/yyyy" PRINT COLUMN 61, "Ausentismos", COLUMN 128, hora skip 1 line PRINT COLUMN 2, "Desde: ",datos.fech_ini using "dd/mm/yyyy", COLUMN 20, "Hasta: ",datos.fech_fin using "dd/mm/yyyy" PRINT COLUMN 2, "---------------------------------------------------", "---------------------------------------------------", "---------------------------------------------" PRINT COLUMN 85, "Fecha" PRINT COLUMN 2, "Ficha No.", COLUMN 19, "Nombre Empleado", COLUMN 52, "Departamento", COLUMN 85, "Ausencia", COLUMN 96, "Motivo", COLUMN 130,"Cantidad Dias" PRINT COLUMN 2, "---------------------------------------------------", "---------------------------------------------------", "---------------------------------------------" ## AQUI SE INDICA LA IMPRESION DEL DETALLE BEFORE GROUP OF x.num_emp LET tot_emp = 0 SELECT a.nom1_emp,a.apell1_emp INTO nom1_emp,apell1_emp FROM adtb00003 a WHERE a.num_emp = x.num_emp SELECT a.nom_dpto INTO nom_dpto FROM adtb00001 a WHERE a.departamento = x.departamento PRINT COLUMN 2, x.num_emp using "&&&&","-", COLUMN 7, x.departamento using "&&&&","-", COLUMN 12, x.nivel_emp using "&&","-", COLUMN 15, x.cod_puesto using "&&", COLUMN 21, nom1_emp clipped," ",apell1_emp clipped, COLUMN 56, nom_dpto CLIPPED; ON EVERY ROW IF num_ausencias is null THEN LET num_ausencias = 0 END IF IF x.cantidad_d is null OR x.cantidad_d = 0 THEN LET x.cantidad_d = 1 END IF LET tot_emp = tot_emp + x.cantidad_d LET num_ausencias = num_ausencias + x.cantidad_d PRINT COLUMN 85, x.fech_efec using "dd/mm/yyyy", COLUMN 96, x.desc_mto CLIPPED, COLUMN 135, x.cantidad_d USING "##" AFTER GROUP OF x.num_emp PRINT COLUMN 134, "---" PRINT COLUMN 1, "Total Por Empleado", COLUMN 134, tot_emp USING "###" skip 1 line ON LAST ROW # CUENTA LOS EMPLEADOS EN LAS ULTIMAS NOMINAS DECLARE busca_e CURSOR FOR SELECT UNIQUE a.num_emp FROM notb00008 a WHERE a.fecha BETWEEN datos.fech_ini AND datos.fech_fin AND a.cod_mov = 1 LET no_empleados = 0 FOREACH busca_e INTO numero LET no_empleados = no_empleados + 1 END FOREACH LET no_empleados = no_empleados - no_empleados1 LET no_empleados = no_empleados * 23.83 LET num_ausen = num_ausencias * 100 LET indice = num_ausen/no_empleados PRINT COLUMN 2, "Numero de Ausencias:", COLUMN 23, num_ausencias using "<<<", COLUMN 30, letras.negrillas_on, COLUMN 31, "INDICE DE AUSENTISMO:", COLUMN 53, indice using "###,###.##","%", COLUMN 70, letras.negrillas_off LET num_ausencias = 0 ## AQUI SE APAGA EL CARACTER DE IMPRESION COMPRIMIDO PRINT ASCII 18 PRINT ASCII 27, ASCII 80 END REPORT