{ ------------------------------------------------------------------------------- PROGRAMA : NOPRRP041 OBJETIVO : GENERAR REPORTE DE HORAS EXTRAS PROGRAMADOR : Valentin Rodriguez FECHA REALIZACION : ------------------------------------------------------------------------------- } SCHEMA "smarmotech" GLOBALS DEFINE datos RECORD fecha_inicial DATE, fecha_final DATE END RECORD, usuarios VARCHAR(20), clave VARCHAR(20), selec STRING, pcompanias RECORD LIKE companias.*, idx INT DEFINE reporteHoras RECORD cod_supervisor VARCHAR(50), supervisor VARCHAR(50), cod_empleado INT, empleado VARCHAR(50), fecha_trabajo DATE, cantidad_horas INT, valor_horas VARCHAR(100), tipo_calculo decimal(12,2), documento INT, fecha_doc DATE END RECORD END GLOBALS MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" USER usuarios USING clave SELECT * INTO pcompanias.* FROM companias CALL reporte_horas() END MAIN FUNCTION reporte_horas () 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 criterio STRING OPEN WINDOW HOME_FRM WITH FORM 'nofmrp041' DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME datos.* AFTER FIELD fecha_inicial IF datos.fecha_inicial IS NULL THEN CALL fgl_winmessage("INFO", "FECHA INICIAL NO PUEDE SER EN BLANCO", "INFO") NEXT FIELD fecha_inicial END IF AFTER FIELD fecha_final IF datos.fecha_final IS NULL THEN CALL fgl_winmessage("INFO", "FECHA FINAL NO PUEDE SER EN BLANCO", "INFO") NEXT FIELD fecha_final END IF IF datos.fecha_final < datos.fecha_inicial THEN CALL fgl_winmessage("INFO", "FECHA FINAL NO PUEDE SER MENOR A FECHA INICIAL", "INFO") NEXT FIELD fecha_final END IF END INPUT CONSTRUCT criterio ON a.supervisor, a.num_emp FROM cod_sup, num_emp ON ACTION mostrar LET selec = "select a.supervisor, rtrim(cast(c.nom1_emp as varchar(30)))+' '+ltrim(cast(c.apell2_emp as varchar(30))), b.num_emp, b.nombre, a.fecha,b.cantidad,b.valor,b.descrip_mov,a.num_doc,b.fech_crea from notb00028 a inner join notb00029 b on a.num_doc = b.num_doc inner join adtb00003 c on a.supervisor = c.num_emp where " , criterio CLIPPED, " and "," a.fecha between '", datos.fecha_inicial USING "mm/dd/yyyy" , "' and '",datos.fecha_final USING "mm/dd/yyyy","' " DISPLAY selec PREPARE comando FROM selec DECLARE cotizaciones CURSOR FOR comando LET r_filename ="noprrp041.4rp" LET idx = 1 FOREACH cotizaciones INTO reporteHoras.* IF idx = 1 THEN IF fgl_report_loadCurrentSettings(r_filename) THEN LET preview=1 CALL seleccionarsalida() RETURNING r_output -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF LET idx = 2 START REPORT reporteHoras_rpt TO XML HANDLER HANDLER END IF OUTPUT TO REPORT reporteHoras_rpt(reporteHoras.*) END FOREACH IF idx > 1 THEN FINISH REPORT reporteHoras_rpt ELSE CALL fgl_winmessage("INFO", "NO HAY REGISTROS EN ESTE RANGO DE FECHA Y CON LOS PARAMETROS INDICADOS", "INFO") NEXT FIELD fecha_final END IF END CONSTRUCT ON ACTION CANCEL CALL msg(2) LET INT_FLAG = FALSE EXIT PROGRAM END DIALOG CLOSE WINDOW HOME_FRM END FUNCTION REPORT reporteHoras_rpt(x) DEFINE x RECORD cod_supervisor VARCHAR(50), supervisor VARCHAR(50), cod_empleado INT, empleado VARCHAR(50), fecha_trabajo DATE, cantidad_horas INT, valor_horas VARCHAR(100), tipo_calculo decimal(12,2), documento INT, fecha_doc DATE END RECORD, fecha_reporte char(30), fecha char(30), total_horas INT, total_valor_horas DECIMAL(12,2) ORDER BY x.supervisor FORMAT BEFORE GROUP OF x.supervisor PRINTX x.supervisor ON EVERY ROW LET fecha_reporte = today USING "mm/dd/yyyy" LET fecha = datos.fecha_inicial USING "mm/dd/yyyy",'--',datos.fecha_final USING "mm/dd/yyyy" DISPLAY pcompanias.nombre PRINTX fecha, fecha_reporte, pcompanias.nombre, x.empleado, x.fecha_trabajo, x.cantidad_horas, x.valor_horas, x.tipo_calculo, x.documento, x.fecha_doc ON LAST ROW LET total_horas = SUM(x.cantidad_horas) LET total_valor_horas = SUM(x.valor_horas) PRINTX total_horas, total_valor_horas END REPORT