Files
MBS/PROYECTO/addir/adprrp034.4gl
T

321 lines
10 KiB
Plaintext

{
-------------------------------------------------------------------------
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