{ ------------------------------------------------------------------------- PROGRAMA : ADPRRP030 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 depto1,cant_dia INTEGER DEFINE datos_tarde RECORD departamento INTEGER, num_emp SMALLINT, nom_emp CHAR(14), apell CHAR(14), fecha DATE, hora_ent LIKE adtb00023.hora_ent, hora_sal LIKE adtb00023.hora_sal, depto INTEGER 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 adprrp030() OPTIONS ERROR LINE 24, FORM LINE 8 CALL pantalla() DISPLAY "adprrp030" AT 4,3 ATTRIBUTE(RED) DISPLAY "Tardanzas de Empleados Por Departamento" AT 6,20 ATTRIBUTE(BLACK) OPEN FORM adfmrp030 FROM "adfmrp016" DISPLAY FORM adfmrp030 LET tipo_papel = 1 CALL msgrp000(tipo_papel) CALL defecto(impresor) RETURNING imprime, letras.*, archivo INPUT BY NAME semana_del,semana_al ON KEY(CONTROL-P) CALL busca_printer() RETURNING imprime, letras.*, archivo AFTER FIELD semana_al LET dias_1 = semana_al - semana_del IF dias_1 > 5 THEN LET numero_msg = 97 CALL msg(numero_msg) NEXT FIELD semana_del END IF IF dias_1 < 4 THEN LET numero_msg = 98 CALL msg(numero_msg) NEXT FIELD semana_del 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 DECLARE busca CURSOR FOR {SELECT UNIQUE a.departamento,a.num_emp,a.nom1_emp,a.apell1_emp,b.fecha, min(b.hora_ent) FROM adtb00003 a,adtb00023 b WHERE a.num_emp = b.num_emp and #a.nivel_emp != 1 and b.fecha between semana_del and semana_al and b.hora_ent between "01:00" and "10:00" AND a.departamento > 0 GROUP BY 1,2,3,4,5 ORDER BY b.fecha } SELECT UNIQUE ' ',a.num_emp,a.nom1_emp,a.apell1_emp,b.fecha, min(b.hora_ent) FROM adtb00003 a,adtb00023 b WHERE a.num_emp = b.num_emp and b.fecha between semana_del and semana_al and b.hora_ent between "01:00" and "10:00" AND b.status_t is null GROUP BY 1,2,3,4,5 ORDER BY b.fecha DISPLAY "Buscando Informacion... Espere Por Favor" AT 19,14 START REPORT tarde30 TO archivo DISPLAY "Impresion en Proceso... Espere Por Favor" AT 19,14 FOREACH busca INTO datos_tarde.* SELECT a.departamento INTO datos_tarde.departamento FROM adtb00003 a WHERE a.num_emp = datos_tarde.num_emp LET depto1 = datos_tarde.departamento LET ch_depto1 = depto1 USING "&&&&" LET ch_depto1 = ch_depto1[1],"000" LET datos_tarde.depto = ch_depto1 LET fecha1 = NULL LET cant_dia = 0 SELECT MAX(a.fecha) INTO fecha1 FROM adtb00032 a WHERE a.num_emp = datos_tarde.num_emp AND a.cod_mov = 9 AND a.sec_mov = 99 and a.fecha <= datos_tarde.fecha SELECT a.num_dia INTO cant_dia FROM adtb00032 a WHERE a.num_emp = datos_tarde.num_emp AND a.cod_mov = 9 AND a.sec_mov = 99 and a.fecha = fecha1 IF cant_dia IS NULL THEN LET cant_dia = 0 END IF IF fecha1 IS NULL THEN LET fecha1 = datos_tarde.fecha - 1 END IF IF datos_tarde.fecha>=fecha1 AND datos_tarde.fecha<=(fecha1+cant_dia) THEN LET fecha1 = datos_tarde.fecha + 10 ELSE LET fecha1 = datos_tarde.fecha - 10 END IF IF STATUS = NOTFOUND THEN LET fecha1 = datos_tarde.fecha - 10 END IF IF fecha1 < datos_tarde.fecha THEN IF datos_tarde.hora_ent > "08:10" THEN OUTPUT TO REPORT tarde30(datos_tarde.*) END IF END IF END FOREACH FINISH REPORT tarde30 RUN imprime END FUNCTION REPORT tarde30(x) DEFINE x RECORD departamento INTEGER, num_emp SMALLINT, nom_emp CHAR(14), apell CHAR(14), fecha DATE, hora_ent LIKE adtb00023.hora_ent, hora_sal LIKE adtb00023.hora_sal, depto INTEGER END RECORD, mdepto INTEGER DEFINE nombre1,apellidos11,apellidos1,nombre,apellidos CHAR(20) DEFINE x_depto1 SMALLINT DEFINE cc_dpto,cc_dpto1 CHAR(1) DEFINE dias_2 SMALLINT OUTPUT LEFT MARGIN 3 ORDER BY x.depto,x.departamento FORMAT BEFORE GROUP OF x.depto LET l = 0 LET m = 0 LET mi = 0 LET j = 0 LET v = 0 LET idx = 0 PRINT letras.negrillas_on PRINT COLUMN 19, "R A Y . O . V A C D O M I N I C A N A, S. A." PRINT COLUMN 30, "Tardanzas de Los Empleados" LET mdepto = x.depto + 100 SELECT UNIQUE nom1_emp,apell1_emp INTO nombre,apellidos FROM adtb00003 WHERE departamento BETWEEN x.depto AND mdepto and nivel_emp = 1 AND (status_t IS NULL OR status_t NOT IN ("D","T","E")) LET cc_dpto = x.depto USING "&" PRINT letras.negrillas_off PRINT letras.comp_on,letras.doce SKIP 1 LINE PRINT COLUMN 1, "A : ",nombre clipped," ",apellidos PRINT PRINT COLUMN 1, "DE : ","GERENCIA DE PERSONAL" PRINT PRINT COLUMN 1, "ASUNTO : ","Tardanzas del personal" PRINT PRINT COLUMN 1, "FECHA : ",today using "dd/mm/yyyy" #PRINT letras.doce LET dias_1 = month(semana_del) LET dias_2 = month(semana_al) CALL meses1() SKIP 2 LINES PRINT "Mas abajo detallo las personas que llegaron tarde en la semana del ", day(semana_del) using "##"," de ",nombre_mes[dias_1] PRINT "al ",day(semana_al) using "##", " de ",nombre_mes[dias_2] clipped, " del ",year(semana_del) using "####", " segun reporte de entrada que suministran los vigilantes." SKIP 2 LINE PRINT COLUMN 1, "LUNES", COLUMN 31, "MARTES", COLUMN 62, "MIERCOLES", COLUMN 92, "JUEVES", COLUMN 125, "VIERNES" PRINT COLUMN 1, "---------------------------------------------------------------------------", "--------------------------------------------------------------------------" LET idx = 0 ON EVERY ROW LET idx = idx + 1 CASE WHEN weekday(x.fecha) = 1 LET l = l + 1 LET salida[l].lunes = x.hora_ent clipped ," ", x.nom_emp clipped," ", x.apell clipped EXIT CASE WHEN weekday(x.fecha) = 2 LET m = m + 1 LET salida[m].martes = x.hora_ent clipped ," ", x.nom_emp clipped," ", x.apell clipped EXIT CASE WHEN weekday(x.fecha) = 3 LET mi = mi + 1 LET salida[mi].miercoles = x.hora_ent clipped ," ", x.nom_emp clipped," ", x.apell clipped EXIT CASE WHEN weekday(x.fecha) = 4 LET j = j + 1 LET salida[j].jueves = x.hora_ent clipped ," ", x.nom_emp clipped," ", x.apell clipped EXIT CASE WHEN weekday(x.fecha) = 5 LET v = v + 1 LET salida[v].viernes = x.hora_ent clipped ," ", x.nom_emp clipped," ", x.apell clipped EXIT CASE END CASE AFTER GROUP OF x.depto FOR l = 1 TO idx PRINT COLUMN 1, salida[l].lunes CLIPPED, COLUMN 31, salida[l].martes CLIPPED, COLUMN 62, salida[l].miercoles CLIPPED, COLUMN 92, salida[l].jueves CLIPPED, COLUMN 125, salida[l].viernes CLIPPED END FOR FOR l = 1 TO idx LET salida[l].lunes = NULL LET salida[l].martes = NULL LET salida[l].miercoles = NULL LET salida[l].jueves = NULL LET salida[l].viernes = NULL END FOR SKIP TO TOP OF PAGE PAGE TRAILER SELECT nom1_emp,apell1_emp,apell2_emp INTO nombre1,apellidos1,apellidos11 FROM adtb00003 WHERE departamento = 3000 and nivel_emp = 1 and (status_t is null or status_t NOT IN ("D","T","E")) PRINT COLUMN 40, "Atentamente, " SKIP 2 LINES PRINT COLUMN 38, nombre1 clipped," ",apellidos1 clipped," ",apellidos11 PRINT COLUMN 38, "GERENTE DE PERSONAL" SKIP 14 LINES END REPORT FUNCTION meses1() LET nombre_mes[1] = "Enero" LET nombre_mes[2] = "Febrero" LET nombre_mes[3] = "Marzo" LET nombre_mes[4] = "Abril" LET nombre_mes[5] = "Mayo" LET nombre_mes[6] = "Junio" LET nombre_mes[7] = "Julio" LET nombre_mes[8] = "Agosto" LET nombre_mes[9] = "Septiembre" LET nombre_mes[10] = "Octubre" LET nombre_mes[11] = "Noviembre" LET nombre_mes[12] = "Diciembre" END FUNCTION