321 lines
10 KiB
Plaintext
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
|
|
|