{ ------------------------------------------------------------------------------- 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 let usuarios = "kpolanco" let clave = "RevolutionX3" CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL adprrp018() END MAIN FUNCTION adprrp018() DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings() r_filename STRING, -- filename of Report Design Document including .4rp extension r_output STRING, -- output format option preview INTEGER -- TRUE/FALSE, to set preview ## 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 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.sec_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 = 1 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.sec_mto,a.fech_efec ORDER BY c.departamento" PREPARE comando FROM selec DECLARE accion CURSOR FOR comando OPEN accion USING datos.fech_fin -- configure report engine; the functions prefixed fgl that are called here are part of the GRW API LET r_filename = 'adrrp018.4rp' IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file LET r_output='SVG' LET preview=1 CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF --run the report IF handler IS NOT NULL THEN -- report engine was configured ok START REPORT relacion TO "adprrp018" ## 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 IF 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 DEFINE etiqueta1, etiqueta2,etiqueta3,etiqueta4,etiqueta5,etiqueta6,etiqueta7 CHAR OUTPUT ## DEFINICION DE LOS MARGENES DE IMPRESION TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 3 FORMAT ## 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 PRINTX x.nom_dpto, x.depart 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 etiqueta1 = "EXCENTO" LET etiqueta2 = "NO-EXCENTO" LET etiqueta3 = "TOTAL SALARIALES:" LET etiqueta4 = "EXCENTO" LET etiqueta5 = "NO-EXENTO " LET etiqueta6 = " TOTAL EMPLEADO POR HORA:" LET etiqueta7 = "TOTAL EMPLEADO: " 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 PRINTX etiqueta1, inicio, adicion, reemplazo, termina, fin, etiqueta2, inicio1, adicion1, reemplazo1, termina1, fin1 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")) LET t_salarial = t_fin + t_fin1 PRINTX etiqueta3, etiqueta4, t_inicio, t_adicion, t_reemplazo, t_termina, t_fin, etiqueta5, t_inicio1, t_adicion1, t_reemplazo1, t_termina1, t_fin1 LET t_semanal = sem_inicio + sem_adicion + sem_reemp - sem_termina PRINTX etiqueta6, sem_inicio, sem_adicion, sem_reemp, sem_termina, t_semanal LET t_empleados = t_semanal + t_salarial PRINTX etiqueta7, t_empleados END REPORT