{ ------------------------------------------------------------------------- PROGRAMA : ADPRRP034 OBJETIVO : Tardanzas de los Empleados Reporte de todos los empleados con tardanzas para enviar a la Gerencia General PROGRAMADOR : Juan F. Soto FECHA : Septiembre 29, 1994. ------------------------------------------------------------------------- } GLOBALS "adprgb000.4gl" DEFINE ch_depto1 CHAR(4) DEFINE nombre_dpto1 CHAR(30) DEFINE fecha1 DATE DEFINE mes_del,mes_al,p_ano,depto1,cant_dia INTEGER DEFINE datos_34 RECORD num_emp SMALLINT, departamento INTEGER, nom_emp CHAR(14), apell CHAR(14), fecha DATE, hora_ent LIKE adtb00023.hora_ent, hora_sal LIKE adtb00023.hora_sal END RECORD, hora_control LIKE adtb00023.hora_ent, l,m,mi,j,v SMALLINT DEFINE salida ARRAY[100] OF RECORD lunes CHAR(30), martes CHAR(30), miercoles CHAR(30), jueves CHAR(30), viernes CHAR(30) END RECORD DEFINE semana_del,semana_al DATE DEFINE dias_1 INTEGER FUNCTION adprrp034() OPTIONS ERROR LINE 24, FORM LINE 8 CALL pantalla() DISPLAY "adprrp034" AT 4,3 ATTRIBUTE(RED) DISPLAY "Tardanzas de Mensual Empleados" AT 6,25 ATTRIBUTE(BLACK) OPEN FORM adfmrp034 FROM "adfmrp034" DISPLAY FORM adfmrp034 LET tipo_papel = 1 CALL msgrp000(tipo_papel) CALL defecto(impresor) RETURNING imprime, letras.*, archivo ## SE SELECCIONA EL CRITERIO DE EMPLEADOS PARA EL REPORTE CONSTRUCT criterio ON a.num_emp FROM num_emp ON KEY(CONTROL-P) CALL busca_printer() RETURNING imprime, letras.*, archivo AFTER CONSTRUCT EXIT CONSTRUCT END CONSTRUCT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF # INPUT BY NAME emplea.num_emp,p_ano,mes_del,mes_al INPUT BY NAME p_ano,mes_del,mes_al ON KEY(CONTROL-P) CALL busca_printer() RETURNING imprime, letras.*, archivo { AFTER FIELD num_emp IF emplea.num_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD emplea.num_empl END IF SELECT UNIQUE a.num_emp,a.departamento,a.nom1_emp,a.apell1_emp INTO emplea.num_emp,emplea.departamento,emplea.nom1_emp,emplea.apell1_emp FROM adtb00003 a WHERE a.num_emp = emplea.num_emp IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD mes_al END IF DISPLAY BY NAME emplea.departamento,emplea.nom1_emp,emplea.apell1_emp } AFTER FIELD mes_del IF mes_del IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD mes_del END IF SELECT a.descrip INTO descrip1 FROM mestable a WHERE a.mes = mes_del IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD mes_del END IF AFTER FIELD mes_al IF mes_al IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD mes_al END IF IF mes_del > mes_al THEN LET numero_msg = 86 CALL msg(numero_msg) NEXT FIELD mes_del END IF SELECT a.descrip INTO descrip2 FROM mestable a WHERE a.mes = mes_al IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD mes_al 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 { DISPLAY "Buscando Informacion... Espere Por Favor" AT 19,14 LET SELEC = "SELECT UNIQUE a.num_emp,a.departamento, ", " a.nom1_emp,a.apell1_emp,b.fecha, ", " min(b.hora_ent),MAX(b.hora_sal) ", " FROM adtb00003 a,adtb00023 b ", " WHERE a.num_emp = b.num_emp AND ", " a.nivel_emp != 1 AND ", " YEAR(b.fecha) = p_ano AND ", " MONTH(b.fecha) BETWEEN mes_del AND mes_al AND ", " a.departamento > 0 AND ", criterio CLIPPED, " GROUP BY 1,2,3,4,5 ORDER BY 1,5 " } LET SELEC = "SELECT UNIQUE a.num_emp,a.departamento, ", " a.nom1_emp,a.apell1_emp,b.fecha, ", " min(b.hora_ent),MAX(b.hora_sal) ", " FROM adtb00003 a,adtb00023 b ", " WHERE a.num_emp = b.num_emp AND ", #" a.nivel_emp != 1 AND ", " YEAR(b.fecha) = ? AND ", " MONTH(b.fecha) BETWEEN ? AND ? AND ", " a.departamento > 0 AND ", criterio CLIPPED, " GROUP BY 1,2,3,4,5 ORDER BY 1,5 " DISPLAY "Buscando Informacion... Espere Por Favor" AT 19,14 PREPARE busca FROM SELEC DECLARE accion CURSOR FOR busca OPEN accion USING p_ano, mes_del, mes_al START REPORT reporte34 TO archivo DISPLAY "Impresion en Proceso... Espere Por Favor" AT 19,14 # FOREACH busca INTO datos_34.* WHILE STATUS != NOTFOUND FETCH accion INTO datos_34.* IF STATUS = NOTFOUND THEN EXIT WHILE END IF LET fecha1 = NULL LET cant_dia = 0 IF datos_34.hora_ent > "08:10" THEN SELECT MAX(a.fecha) INTO fecha1 FROM adtb00032 a WHERE a.num_emp = datos_34.num_emp AND a.cod_mov = 9 AND a.sec_mov = 99 AND a.fecha <= datos_34.fecha SELECT a.num_dia INTO cant_dia FROM adtb00032 a WHERE a.num_emp=datos_34.num_emp AND a.cod_mov = 9 AND a.sec_mov = 99 AND a.fecha = fecha1 IF STATUS = NOTFOUND THEN LET STATUS = 0 END IF IF cant_dia IS NULL THEN LET cant_dia = 0 END IF IF cant_dia IS NULL THEN LET cant_dia = 0 END IF IF fecha1 IS NULL THEN LET fecha1 = datos_34.fecha - 1 END IF IF datos_34.fecha >= fecha1 AND datos_34.fecha <= (fecha1+cant_dia) THEN LET fecha1 = datos_34.fecha + 10 ELSE LET fecha1 = datos_34.fecha - 10 END IF IF fecha1 < datos_34.fecha THEN OUTPUT TO REPORT reporte34(datos_34.*) END IF END IF END WHILE # END FOREACH FINISH REPORT reporte34 RUN imprime END FUNCTION REPORT reporte34(x) DEFINE x RECORD num_emp SMALLINT, departamento INTEGER, nom_emp CHAR(14), apell CHAR(14), fecha DATE, hora_ent LIKE adtb00023.hora_ent, hora_sal LIKE adtb00023.hora_sal END RECORD DEFINE nombre1,apellidos11,apellidos1,nombre,apellidos CHAR(20) DEFINE x_depto1 SMALLINT DEFINE cc_dpto,cc_dpto1 CHAR(1) DEFINE dias_2 SMALLINT, hora CHAR(5) OUTPUT LEFT MARGIN 3 FORMAT PAGE HEADER LET hora = TIME PRINT letras.negrillas_on PRINT COLUMN 1, "adprrp034", COLUMN 17, "R A Y . O . V A C D O M I N I C A N A, S. A.", COLUMN 73, "Pag. ", PAGENO USING "###" PRINT COLUMN 17, " Sistema de Administracion de Personal", COLUMN 73, TODAY USING "dd/mm/yyyy" PRINT COLUMN 17, " Tardanzas Mensual de Empleados", COLUMN 76, hora SKIP 1 LINE PRINT COLUMN 1, "De ",descrip1 CLIPPED," A ",descrip2 CLIPPED, " Del ", p_ano USING "&&&&" PRINT COLUMN 1, "----------------------------------------", "----------------------------------------" PRINT COLUMN 30, "Hora", COLUMN 50, "Hora" PRINT COLUMN 1, "Fecha", COLUMN 30, "Entrada", COLUMN 50, "Salida" PRINT COLUMN 1, "----------------------------------------", "----------------------------------------" PRINT letras.negrillas_off BEFORE GROUP OF x.num_emp PRINT COLUMN 1, letras.negrillas_on PRINT COLUMN 1,"(",x.num_emp USING "<<<<",")"," ", x.nom_emp CLIPPED," ",x.apell CLIPPED,letras.negrillas_off ON EVERY ROW PRINT COLUMN 1, x.fecha USING "dd/mm/yyyy"; IF x.hora_ent >= "08:10" THEN PRINT COLUMN 30, x.hora_ent; ELSE PRINT COLUMN 30, " "; END IF IF x.hora_sal <= "04:59" THEN PRINT COLUMN 50, x.hora_sal ELSE PRINT COLUMN 50, " " END IF AFTER GROUP OF x.num_emp PRINT COLUMN 10,"Total ---> ", GROUP COUNT(*) WHERE x.hora_ent > "08:09" USING "<<<,<<<" ON LAST ROW PRINT letras.negrillas_on PRINT COLUMN 1,"Total Tardanzas ---> ", COUNT(*) WHERE x.hora_ent > "08:09" USING "<<<,<<<" PRINT letras.negrillas_off END REPORT