{ ------------------------------------------------------------------------------- PROGRAMA : ADPRRP018 OBJETIVO : LISTAR LA RELACION MENSUAL DE EMPLEADOS BAJO UN RANGO DE FECHA (HEADCOUNT) PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Julio 09, 1993 ------------------------------------------------------------------------------- } GLOBALS "adprgb000.4gl" MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL adprrp018() END MAIN FUNCTION adprrp018() ## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE DEFINE rel_men RECORD nom_dpto LIKE adtb00001.nom_dpto, departamento LIKE adtb00020.departamento, nomina CHAR(1), nivel_emp SMALLINT, sec_mto SMALLINT, fecha DATE, inicio SMALLINT, depto CHAR(4), depart CHAR(4) END RECORD # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN OPEN FORM adfmrp008 FROM "adfmrp008" DISPLAY FORM adfmrp008 #CALL pantalla() DISPLAY "adprrp018" AT 4,3 ATTRIBUTE(RED) DISPLAY "Headcount" AT 6,38 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) ## SE INDICA EL RANGO DE FECHA DESEADO PARA LISTAR EL HEADCOUNT CONSTRUCT criterio ON a.departamento FROM departamento LET datos.fech_ini = NULL LET datos.fech_fin = NULL INPUT BY NAME datos.fech_ini,datos.fech_fin WITHOUT DEFAULTS 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 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 b.nom_dpto,c.departamento,a.nomina,c.nivel_emp,a.cod_mto, ", " a.fech_efec,COUNT(*) ", "FROM adtb00020 a,adtb00001 b,adtb00003 c ", "WHERE c.departamento = b.departamento AND a.status_t is null AND ", " a.cod_mto = 2 AND a.fecha < ? AND c.num_emp = a.num_emp AND ", " (c.status_t IS NULL OR c.status_t NOT IN('D','T','E')) AND ", criterio CLIPPED," GROUP BY b.nom_dpto,c.departamento,a.nomina,c.nivel_emp,a.cod_mto,a.fech_efec ORDER BY c.departamento " PREPARE comando FROM selec DECLARE accion CURSOR FOR comando OPEN accion USING datos.fech_fin DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) CALL seleccionarsalida() RETURNING r_output CALL configureoutput(r_output) RETURNING handler START REPORT relacion TO XML HANDLER handler ## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE ## SALIDA AL REPORTE FOREACH accion INTO rel_men.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET rel_men.depto = rel_men.departamento USING "&&&&" LET rel_men.depart = rel_men.depto[1,1] OUTPUT TO REPORT relacion(rel_men.*) END FOREACH FINISH REPORT relacion END FUNCTION ## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE REPORT relacion(x) DEFINE x RECORD nom_dpto LIKE adtb00001.nom_dpto, departamento LIKE adtb00020.departamento, nomina CHAR(1), nivel_emp SMALLINT, sec_mto SMALLINT, fecha DATE, inicio SMALLINT, depto CHAR(4), depart CHAR(4) END RECORD ## DEFINICION DE LAS VARIABLES DE IMPRESION DEFINE hora CHAR(5) DEFINE j,inicio,inicio1,adicion,adicion1,reemplazo,reemplazo1 INTEGER DEFINE termina,termina1,fin,fin1,t_inicio,t_inicio1,t_adicion SMALLINT DEFINE t_adicion1,t_reemplazo,t_reemplazo1,t_termina,t_termina1 SMALLINT DEFINE t_empleados,t_salarial,t_fin,t_fin1 SMALLINT DEFINE sem_inicio,sem_adicion,sem_reemp,sem_termina,t_semanal 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.doce, COLUMN 2, "adprrp018", COLUMN 14, letras.negrillas_on, COLUMN 15, letras.doble_on, COLUMN 16, letras.comp_on, COLUMN 26, p_companias.nombre, 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 45, "Headcount", 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 48, "Inicio", COLUMN 94, "Fin" PRINT COLUMN 2, "Departamento", COLUMN 33, "Clasificacion", COLUMN 48, "Periodo", COLUMN 57, "Adiciones", COLUMN 68, "Reemplazos", COLUMN 80, "Terminaciones", COLUMN 94, "Periodo" PRINT COLUMN 2, "--------------------------------------------------", "-------------------------------------------------" PRINT COLUMN 2, "Empleados Salariales" ## AQUI SE INDICA LA IMPRESION DEL DETALLE BEFORE GROUP OF x.depart LET inicio = 0 LET inicio1 = 0 LET adicion = 0 LET adicion1 = 0 LET reemplazo = 0 LET reemplazo1 = 0 LET termina = 0 LET termina1 = 0 LET fin = 0 LET fin1 = 0 SKIP 1 LINE PRINT COLUMN 1, letras.negrillas_on, COLUMN 2, x.nom_dpto, COLUMN 40, letras.negrillas_off ON EVERY ROW IF j IS NULL THEN LET j = 0 END IF LET j = j + 1 IF j = 1 THEN LET sem_inicio = 0 LET sem_adicion = 0 LET sem_reemp = 0 END IF IF x.nomina = "Q" OR x.nomina = "V" THEN IF x.fecha < datos.fech_ini THEN IF x.nivel_emp <= 1 THEN LET inicio = inicio + x.inicio ELSE LET inicio1 = inicio1 + x.inicio END IF END IF IF x.fecha >= datos.fech_ini AND x.sec_mto = 1 THEN IF x.nivel_emp <= 1 THEN LET adicion = adicion + x.inicio ELSE LET adicion1 = adicion1 + x.inicio END IF END IF IF x.fecha >= datos.fech_ini AND x.sec_mto = 5 THEN IF x.nivel_emp <= 1 THEN LET reemplazo = reemplazo + x.inicio ELSE LET reemplazo1 = reemplazo1 + x.inicio END IF END IF END IF IF x.nomina = "S" AND x.nivel_emp > 1 THEN IF x.fecha < datos.fech_ini THEN LET sem_inicio = sem_inicio + x.inicio END IF IF x.fecha >= datos.fech_ini THEN IF x.sec_mto = 1 THEN LET sem_adicion = sem_adicion + x.inicio END IF IF x.sec_mto = 5 THEN LET sem_reemp = sem_reemp + x.inicio END IF END IF END IF AFTER GROUP OF x.depart SELECT COUNT(*) INTO termina FROM adtb00020 a,adtb00003 b WHERE a.fech_efec BETWEEN datos.fech_ini AND datos.fech_fin AND a.nomina = "Q" AND a.departamento = x.departamento AND b.nivel_emp = 1 AND a.cod_mto = 4 AND a.num_emp = b.num_emp AND a.status_t IS NULL SELECT COUNT(*) INTO termina1 FROM adtb00020 a,adtb00003 b WHERE a.fech_efec BETWEEN datos.fech_ini AND datos.fech_fin AND a.nomina = "Q" AND a.departamento = x.departamento AND b.nivel_emp > 1 AND a.cod_mto = 4 AND a.num_emp = b.num_emp AND a.status_t IS NULL AND (b.status_t IS NULL OR b.status_t NOT IN ("D","T","E")) LET fin = inicio + adicion + reemplazo - termina LET fin1 = inicio1 + adicion1 + reemplazo1 - termina1 LET t_inicio = inicio + t_inicio LET t_adicion = adicion + t_adicion LET t_reemplazo = reemplazo + t_reemplazo LET t_termina = termina + t_termina LET t_fin = fin + t_fin LET t_inicio1 = inicio1 + t_inicio1 LET t_adicion1 = adicion1 + t_adicion1 LET t_reemplazo1 = reemplazo1 + t_reemplazo1 LET t_termina1 = termina1 + t_termina1 LET t_fin1 = fin1 + t_fin1 PRINT COLUMN 33, "EXENTO", COLUMN 50, inicio using "<##", COLUMN 60, adicion using "<##", COLUMN 72, reemplazo using "<##", COLUMN 85, termina using "<##", COLUMN 96, fin using "<##" PRINT COLUMN 33, "NO-EXENTO", COLUMN 50, inicio1 using "<##", COLUMN 60, adicion1 using "<##", COLUMN 72, reemplazo1 using "<##", COLUMN 85, termina1 using "<##", COLUMN 96, fin1 using "<##" ON LAST ROW LET sem_termina = 0 LET j = 0 SELECT COUNT(*) INTO sem_termina FROM adtb00020 a,adtb00003 b WHERE a.fech_efec BETWEEN datos.fech_ini AND datos.fech_fin AND a.nomina = "S" AND a.departamento = x.departamento AND b.nivel_emp > 1 AND a.cod_mto = 4 AND a.num_emp = b.num_emp AND a.status_t IS NULL AND (b.status_t IS NULL OR b.status_t NOT IN ("D","T","E")) SKIP 1 LINE LET t_salarial = t_fin + t_fin1 PRINT COLUMN 2, "Total Salariales:"; PRINT COLUMN 33, "EXENTO", COLUMN 50, t_inicio using "<##", COLUMN 60, t_adicion using "<##", COLUMN 72, t_reemplazo using "<##", COLUMN 85, t_termina using "<##", COLUMN 96, t_fin using "<##" PRINT COLUMN 33, "NO-EXENTO", COLUMN 50, t_inicio1 using "<##", COLUMN 60, t_adicion1 using "<##", COLUMN 72, t_reemplazo1 using "<##", COLUMN 85, t_termina1 using "<##", COLUMN 96, t_fin1 using "<##" SKIP 1 LINE LET t_semanal = sem_inicio + sem_adicion + sem_reemp - sem_termina PRINT COLUMN 2, "Total Empleados Por Hora:", COLUMN 50, sem_inicio using "<##", COLUMN 60, sem_adicion using "<##", COLUMN 72, sem_reemp using "<##", COLUMN 85, sem_termina using "<##", COLUMN 96, t_semanal using "<##" SKIP 1 LINE LET t_empleados = t_semanal + t_salarial PRINT COLUMN 2, "Total Empleados:", COLUMN 28, t_empleados END REPORT