{ ------------------------------------------------------------------------------- PROGRAMA : ADPRRP023 OBJETIVO : LISTAR LAS ROTACIONES QUE HA TENIDO EL PERSONAL EN LOS DEPARTAMENTOS BAJO UN RANGO DE FECHA PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Julio 07, 1993 ------------------------------------------------------------------------------- } GLOBALS "adprgb000.4gl" DEFINE datos_p RECORD LIKE adtb00020.* DEFINE datos_e RECORD LIKE adtb00003.* FUNCTION adprrp023() DEFINE a_depto,a_num SMALLINT ## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN OPEN FORM adfmrp023 FROM "adfmrp023" DISPLAY FORM adfmrp023 CALL pantalla() DISPLAY "adprrp023" AT 4,3 ATTRIBUTE(RED) DISPLAY "Relacion Rotacion del Personal" AT 6,28 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 LA ROTACION DEL PERSONAL LET datos.fech_ini = NULL LET datos.fech_fin = NULL INPUT BY NAME datos.fech_ini,datos.fech_fin 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 IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) ## SE SELECCIONAN LOS CAMPOS NECESARIOS PARA EL REPORTE DECLARE accion CURSOR FOR SELECT a.*,b.* FROM adtb00020 a,adtb00003 b WHERE a.num_emp = b.num_emp AND (a.cod_mto=4 OR a.cod_mto=1) AND a.sec_mto between 1 and 5 AND a.fech_efec between datos.fech_ini and datos.fech_fin AND a.status_t is null IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) START REPORT rotar TO archivo ## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE ## SALIDA AL REPORTE FOREACH accion INTO datos_p.*,datos_e.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET a_depto = depto.departamento LET a_num = datos_p.num_emp OUTPUT TO REPORT rotar(datos_p.*,datos_e.*) END FOREACH FINISH REPORT rotar RUN imprime CLEAR SCREEN END FUNCTION ## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE REPORT rotar(x,j) DEFINE x RECORD LIKE adtb00020.* DEFINE j RECORD LIKE adtb00003.* DEFINE x_depto,x_num SMALLINT ## DEFINICION DE LAS VARIABLES DE IMPRESION DEFINE hora CHAR(5) DEFINE entrada,salida,salida1,salida2,salida3 SMALLINT DEFINE total_ent,total_sal,t_salidas,no_empleados1,no_empleados SMALLINT DEFINE indice_sal DECIMAL(10,2) DEFINE nom_dpto CHAR(40) OUTPUT ## DEFINICION DE LOS MARGENES DE IMPRESION TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 3 ORDER BY x.departamento,x.num_emp FORMAT PAGE HEADER LET hora = time ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS PRINT COLUMN 1, letras.doce, COLUMN 2, "adprrp023", COLUMN 14, letras.negrillas_on, COLUMN 15, letras.doble_on, COLUMN 16, letras.comp_on, COLUMN 26, "R A Y . O . V A C D O M I N I C A N A, S. A.", COLUMN 73, letras.negrillas_off, COLUMN 74, letras.doble_off, COLUMN 75, letras.comp_off, COLUMN 91, "Pag. ",pageno using "###" PRINT COLUMN 31, "Sistema de Administracion de Personal", COLUMN 93, today using "dd/mm/yyyy" PRINT COLUMN 35, "Relacion Rotacion de Personal", COLUMN 96, 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 49, "S A L I D A S" PRINT COLUMN 48, "==========================================" PRINT COLUMN 48, "Mutuo", COLUMN 94, "Total" PRINT COLUMN 2, "Departamento", COLUMN 36, "Entradas", COLUMN 48, "Acuerdo", COLUMN 59, "Desahucio", COLUMN 72, "Renuncia", COLUMN 84, "Despido", COLUMN 94, "Salidas" PRINT COLUMN 2, "--------------------------------------------------", "-------------------------------------------------" ## AQUI SE INDICA LA IMPRESION DEL DETALLE BEFORE GROUP OF x.departamento LET entrada = 0 LET salida = 0 LET salida1 = 0 LET salida2 = 0 LET salida3 = 0 LET total_sal = 0 SELECT a.nom_dpto INTO nom_dpto FROM adtb00001 a WHERE a.status_t IS NULL AND a.departamento = x.departamento PRINT COLUMN 2, nom_dpto ON EVERY ROW IF total_ent IS NULL THEN LET total_ent = 0 END IF PRINT COLUMN 2,x.num_emp USING "&&&&"," ",j.nom1_emp CLIPPED," ", j.nom2_emp CLIPPED," ",j.apell1_emp CLIPPED," "; IF x.cod_mto = 1 THEN LET entrada = entrada + 1 PRINT COLUMN 40, "X" END IF IF x.cod_mto = 4 THEN CASE WHEN x.sec_mto = 1 LET salida = salida + 1 PRINT COLUMN 52, "X" EXIT CASE WHEN x.sec_mto = 2 LET salida1 = salida1 + 1 PRINT COLUMN 64, "X" EXIT CASE WHEN x.sec_mto = 5 LET salida2 = salida2 + 1 PRINT COLUMN 77, "X" EXIT CASE OTHERWISE LET salida3 = salida3 + 1 PRINT COLUMN 88, "X" EXIT CASE END CASE END IF ## CALCULO DE LOS CAMPOS DE IMPRESION DEL DETALLE AFTER GROUP OF x.departamento IF t_salidas IS NULL THEN LET t_salidas = 0 END IF LET total_ent = total_ent + entrada LET total_sal = salida + salida1 + salida2 + salida3 LET t_salidas = t_salidas + total_sal PRINT COLUMN 2, "--------------------------------------------------", "-------------------------------------------------" PRINT COLUMN 2, "Total Por Departamento -->", COLUMN 38, entrada using "###", COLUMN 50, salida using "###", COLUMN 62, salida1 using "###", COLUMN 75, salida2 using "###", COLUMN 86, salida3 using "###", COLUMN 96, total_sal using "<<<" SKIP 1 LINE ## CALCULO DEL INDICE DE AUSENCIA ON LAST ROW SELECT COUNT(*) INTO no_empleados FROM adtb00020 WHERE status_t is null AND fecha <= datos.fech_fin AND cod_mto = 1 SELECT COUNT(*) INTO no_empleados1 FROM adtb00020 WHERE status_t is null AND fecha <= datos.fech_fin AND cod_mto = 4 LET no_empleados = no_empleados - no_empleados1 LET indice_sal = (t_salidas/no_empleados)*100 PRINT COLUMN 2, "Total Entradas:", COLUMN 18, total_ent using "<<<", COLUMN 27, "Total Salidas:", COLUMN 42, t_salidas using "<<<", COLUMN 52, "Total Empleados:", COLUMN 69, no_empleados using "<<<", COLUMN 78, "INDICE SALIDA:", COLUMN 93, indice_sal using "###","%" PRINT COLUMN 2, "==================================================", "=================================================" LET total_ent = 0 END REPORT