{ PROGRAMA : NOPRRP043 DESCRIPCION : GENERAR INFORMACION SOBRE EMPLEADOS REGISTRADOS DIARIOS SISTEMA BIOMETRICO FECHA DESARROYO : JUNIO 1, 2021 DESARROLLADO POR : ING. JUAN SOTO } IMPORT util GLOBALS "noprgb000.4gl" 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 option xfecha1,xfecha2 DATE, nombre_cia VARCHAR(100) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT a.nombre INTO nombre_cia FROM companias a CALL noprrp043() END MAIN FUNCTION noprrp043() OPEN WINDOW w1 WITH FORM "nofmrp043" DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME xfecha1,xfecha2 END INPUT CONSTRUCT criterio ON c.departamento,c.num_emp FROM departamento,num_emp BEFORE CONSTRUCT CALL departamentos() AFTER CONSTRUCT END CONSTRUCT ON ACTION CANCEL ATTRIBUTE(TEXT="Cancelar", IMAGE="cancel") EXIT PROGRAM ON ACTION imprimir ATTRIBUTE(TEXT="Imprime", IMAGE="printer") IF fecha_inicial IS NULL THEN CALL msg(16) NEXT FIELD fecha_inicial END IF IF xfecha1 IS NULL THEN CALL msg(16) NEXT FIELD xfecha1 END IF IF xfecha2 < xfecha1 THEN CALL msg(51) NEXT FIELD xfecha1 END IF CALL reporte() END DIALOG END FUNCTION FUNCTION reporte() DEFINE data RECORD dia INT, tipo_reg VARCHAR(2), departamento VARCHAR(100), num_emp INT, nivel_emp,puesto,primer_nombre,primer_apellido VARCHAR(100), checktime DATETIME YEAR TO MINUTE, horas_trabajadas,horas_extras35,horas_extras100 DEC(12,2), fecha DATETIME YEAR TO MINUTE, entrada,salida VARCHAR(50), hora_almuerzo INT END RECORD, fecha_ant DATE LET selec = " SELECT datepart(weekday,a.checktime) as dia,a.checktype,'('+CAST(c.departamento AS CHAR(20))+') '+b.nom_dpto,a.num_emp, ' ',' ',c.nom1_emp,c.apell1_emp,a.checktime,ISNULL(a.h_trabajadas,0),ISNULL(a.h_extras35,0),ISNULL(a.h_extras100,0), CAST(a.checktime as date) FROM CHECKINOUT a,adtb00001 b ,adtb00003 c WHERE c.departamento = b.departamento AND a.num_emp = c.num_emp AND c.status_t is null and a.CHECKTIME between '",xfecha1 USING 'yyyy-mm-dd',"' and '",xfecha2 USING 'yyyy-mm-dd',"' and ", criterio CLIPPED, " order by '('+CAST(c.departamento AS CHAR(20))+') '+b.nom_dpto,a.num_emp,cast(a.checktime as date) " { " group by datepart(weekday,a.checktime) ,a.checktype,'('+CAST(c.departamento AS CHAR(20))+') '+b.nom_dpto,a.num_emp, k1.nom_educa,k.nom_puesto,c.nom1_emp,c.apell1_emp,ISNULL(a.h_trabajadas,0),ISNULL(a.h_extras35,0),ISNULL(a.h_extras100,0), cast(a.checktime as date) ", } PREPARE comando FROM selec DECLARE buscar CURSOR FOR comando LET idx = 1 LET r_filename = 'noprrp043.4rp' FOREACH buscar INTO data.* IF idx = 1 THEN IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file CALL seleccionarSalida() RETURNING r_output LET preview=1 CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default CALL fgl_report_configurexlsxdevice(null,null,null,false,false,null,1) LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF IF handler IS NOT NULL THEN -- report engine was configured ok START REPORT registros TO XML HANDLER HANDLER ELSE EXIT PROGRAM END IF END IF IF fecha_ant <> data.fecha THEN LET data.entrada = NULL LET data.salida = NULL LET fecha_ant = data.fecha END IF CASE WHEN UPSHIFT(data.tipo_reg) = "I" LET data.entrada = util.Datetime.format( data.checktime, "(%A) %B %d, %Y %H:%M:%S" ) DISPLAY "en case I: ",data.entrada," ORIG: ",data.checktime # LET data.salida = NULL EXIT CASE WHEN UPSHIFT(data.tipo_reg) = "O" LET data.salida =util.Datetime.format( data.checktime, "(%A) %B %d, %Y %H:%M:%S" ) DISPLAY "en case O: ",data.salida," ORIG: ",data.checktime # LET data.entrada = NULL EXIT CASE END CASE # IF data.horas_trabajadas > 0 THEN # LET data.horas_trabajadas = data.horas_trabajadas - hora_almuerzo # END IF LET data.dia = WEEKDAY(data.checktime) DISPLAY "data ",data.fecha," ",data.entrada," ",data.salida," fa: ",fecha_ant," ",data.checktime," origen: ",data.tipo_reg, " Emp ",data.num_emp OUTPUT TO REPORT registros(data.*) LET idx = idx +1 END FOREACH IF idx > 1 THEN FINISH REPORT registros ELSE CALL msg(3) END IF END FUNCTION REPORT registros(x) DEFINE x RECORD dia INT, tipo_reg VARCHAR(2), departamento VARCHAR(100), num_emp INT, nivel_emp,puesto,primer_nombre,primer_apellido VARCHAR(100), checktime DATETIME YEAR TO MINUTE, horas_trabajadas,horas_extras35,horas_extras100 DEC(12,2), fecha DATETIME YEAR TO MINUTE, entrada,salida VARCHAR(50), hora_almuerzo INT END RECORD, fecha1,fecha2 VARCHAR(20), total_horas,thoras35,thoras100 DEC(12,2), thalmuerzo,totalhoras INT, hora string ORDER BY x.departamento,x.num_emp,x.fecha FORMAT FIRST PAGE HEADER LET hora = util.Datetime.format( CURRENT, "%Y-%m-%d %H:%M" ) LET fecha1 = xfecha1 USING "dd/mm/yyyy" LET fecha2 = xfecha2 USING "dd/mm/yyyy" PRINTX nombre_cia,hora,fecha1,fecha2 BEFORE GROUP OF x.departamento PRINTX x.departamento BEFORE GROUP OF x.num_emp PRINTX x.num_emp,x.primer_nombre,x.primer_apellido AFTER GROUP OF x.num_emp LET total_horas= GROUP SUM(x.horas_trabajadas) LET thoras35= GROUP SUM(x.horas_extras35) LET thoras100= GROUP SUM(x.horas_extras100) LET thalmuerzo = GROUP SUM(x.hora_almuerzo) LET totalhoras = thoras35+thoras100+thalmuerzo+total_horas # DISPLAY "emp ",x.num_emp," 35 ",thoras35," 100 ",thoras100," al ",thalmuerzo," thoras ",totalhoras PRINTX total_horas,thoras35,thoras100,totalhoras AFTER GROUP OF x.fecha PRINTX x.entrada,x.salida,x.horas_trabajadas,x.horas_extras35,x.horas_extras100, x.dia,thalmuerzo,x.hora_almuerzo { ON EVERY ROW PRINTX x.dia,x.checktime,x.tipo_reg} END REPORT