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

303 lines
9.9 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : ADPRRP017
OBJETIVO : AUSENCIAS DEL PERSONAL E INDICE DE AUSENTISMO
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Julio 06, 1993
-------------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
FUNCTION adprrp017()
## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
DEFINE ausencia RECORD
num_emp LIKE adtb00020.num_emp,
departamento LIKE adtb00020.departamento,
nivel_emp LIKE adtb00020.nivel_emp,
cod_puesto LIKE adtb00020.cod_puesto,
fech_efec LIKE adtb00020.fech_efec,
desc_mto LIKE adtb00009.desc_mto,
cantidad_d INTEGER,
depto CHAR(4),
depart CHAR(4)
END RECORD,
cod_mto LIKE adtb00020.cod_mto,
sec_mto LIKE adtb00020.sec_mto
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
OPEN FORM adfmrp007 FROM "adfmrp007"
DISPLAY FORM adfmrp007
CALL pantalla()
DISPLAY "adprrp017" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Ausentismos" AT 6,37 ATTRIBUTE(BLACK)
## INDICA EL TIPO DE PAPEL NECESARIO PARA EL REPORTE. 1 - PAPEL 9 1/2 X 11
## 2 - PAPEL 14 7/8 X 11
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
CALL defecto(impresor) RETURNING imprime, letras.*, archivo
## SE INDICA EL RANGO DE FECHA DESEADO PARA LISTAR LAS AUSENCIAS
LET datos.fech_ini = NULL
LET datos.fech_fin = NULL
INPUT BY NAME datos.fech_ini,datos.fech_fin WITHOUT DEFAULTS
ON KEY(CONTROL-P)
CALL busca_printer() RETURNING imprime,letras.*, archivo
AFTER FIELD fech_ini
IF datos.fech_ini IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_ini
END IF
AFTER FIELD fech_fin
IF datos.fech_fin IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_fin
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
## DEFINICION DEL CRITERIO DE BUSQUEDA PARA IMPRIMIR EL REPORTE
CONSTRUCT criterio ON a.departamento,a.num_emp,a.cod_mto,a.sec_mto
FROM departamento,num_emp,cod_mto,sec_mto
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
## SE SELECCIONAN LOS CAMPOS NECESARIOS PARA EL REPORTE
LET SELEC =
"SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto,a.fech_efec, ",
" d.desc_mto,c.num_dia ",
"FROM adtb00020 a,adtb00009 d,OUTER adtb00032 c ",
"WHERE ",criterio CLIPPED," AND a.num_trx = c.num_trx AND ",
" a.cod_mto=c.cod_mov AND a.sec_mto=c.sec_mov AND ",
" a.cod_mto=d.cod_mto AND a.sec_mto=d.sec_mto AND a.cod_mto=3 AND ",
" a.sec_mto between 2 and 17 AND a.status_t is null AND ",
" a.status_t is null AND ",
" a.fech_efec BETWEEN ? AND ? ORDER BY 2,1"
DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
## SE PREPARA LA INFORMACION SELECCIONADA
PREPARE busca FROM selec
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
## SE DECLARA UN CURSOR PARA BUSCAR LA INFORMACION SELECCIONADA
DECLARE accion CURSOR FOR busca
OPEN accion USING datos.fech_ini,datos.fech_fin
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
START REPORT ausente TO archivo
## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE
## SALIDA AL REPORTE
WHILE STATUS != NOTFOUND
FETCH accion INTO ausencia.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET ausencia.depto = ausencia.departamento
LET ausencia.depart = ausencia.depto[1,1]
OUTPUT TO REPORT ausente(ausencia.*)
END WHILE
FINISH REPORT ausente
RUN imprime
CLEAR SCREEN
END FUNCTION
## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
REPORT ausente(x)
DEFINE x RECORD
num_emp LIKE adtb00020.num_emp,
departamento LIKE adtb00020.departamento,
nivel_emp LIKE adtb00020.nivel_emp,
cod_puesto LIKE adtb00020.cod_puesto,
fech_efec LIKE adtb00020.fech_efec,
desc_mto LIKE adtb00009.desc_mto,
cantidad_d INTEGER,
depto CHAR(4),
depart CHAR(4)
END RECORD
DEFINE nom1_emp,apell1_emp CHAR(15),
nom_dpto CHAR(30)
## DEFINICION DE LAS VARIABLES DE IMPRESION
DEFINE hora CHAR(5)
DEFINE tot_emp,num_ausencias,no_empleados1,no_empleados,num_ausen INTEGER
DEFINE indice DECIMAL(5,2),
numero SMALLINT
OUTPUT
## DEFINICION DE LOS MARGENES DE IMPRESION
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 3
FORMAT
PAGE HEADER
LET hora = time
## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
PRINT COLUMN 1, letras.comp_on,
COLUMN 2, "adprrp017",
COLUMN 14, letras.negrillas_on,
COLUMN 45, "R A Y . O . V A C D O M I N I C A N A, S. A.",
COLUMN 65, letras.negrillas_off,
COLUMN 130, "Pag. ",pageno using "###"
PRINT COLUMN 48, "Sistema de Administracion de Personal",
COLUMN 125, today using "dd/mm/yyyy"
PRINT COLUMN 61, "Ausentismos",
COLUMN 128, hora
skip 1 line
PRINT COLUMN 2, "Desde: ",datos.fech_ini using "dd/mm/yyyy",
COLUMN 20, "Hasta: ",datos.fech_fin using "dd/mm/yyyy"
PRINT COLUMN 2, "---------------------------------------------------",
"---------------------------------------------------",
"---------------------------------------------"
PRINT COLUMN 85, "Fecha"
PRINT COLUMN 2, "Ficha No.",
COLUMN 19, "Nombre Empleado",
COLUMN 52, "Departamento",
COLUMN 85, "Ausencia",
COLUMN 96, "Motivo",
COLUMN 130,"Cantidad Dias"
PRINT COLUMN 2, "---------------------------------------------------",
"---------------------------------------------------",
"---------------------------------------------"
## AQUI SE INDICA LA IMPRESION DEL DETALLE
BEFORE GROUP OF x.num_emp
LET tot_emp = 0
SELECT a.nom1_emp,a.apell1_emp INTO nom1_emp,apell1_emp
FROM adtb00003 a WHERE a.num_emp = x.num_emp
SELECT a.nom_dpto INTO nom_dpto FROM adtb00001 a
WHERE a.departamento = x.departamento
PRINT COLUMN 2, x.num_emp using "&&&&","-",
COLUMN 7, x.departamento using "&&&&","-",
COLUMN 12, x.nivel_emp using "&&","-",
COLUMN 15, x.cod_puesto using "&&",
COLUMN 21, nom1_emp clipped," ",apell1_emp clipped,
COLUMN 56, nom_dpto CLIPPED;
ON EVERY ROW
IF num_ausencias is null THEN
LET num_ausencias = 0
END IF
IF x.cantidad_d is null OR x.cantidad_d = 0 THEN
LET x.cantidad_d = 1
END IF
LET tot_emp = tot_emp + x.cantidad_d
LET num_ausencias = num_ausencias + x.cantidad_d
PRINT COLUMN 85, x.fech_efec using "dd/mm/yyyy",
COLUMN 96, x.desc_mto CLIPPED,
COLUMN 135, x.cantidad_d USING "##"
AFTER GROUP OF x.num_emp
PRINT COLUMN 134, "---"
PRINT COLUMN 1, "Total Por Empleado",
COLUMN 134, tot_emp USING "###"
skip 1 line
ON LAST ROW
# CUENTA LOS EMPLEADOS EN LAS ULTIMAS NOMINAS
DECLARE busca_e CURSOR FOR
SELECT UNIQUE a.num_emp FROM notb00008 a
WHERE a.fecha BETWEEN datos.fech_ini AND datos.fech_fin
AND a.cod_mov = 1
LET no_empleados = 0
FOREACH busca_e INTO numero
LET no_empleados = no_empleados + 1
END FOREACH
LET no_empleados = no_empleados - no_empleados1
LET no_empleados = no_empleados * 23.83
LET num_ausen = num_ausencias * 100
LET indice = num_ausen/no_empleados
PRINT COLUMN 2, "Numero de Ausencias:",
COLUMN 23, num_ausencias using "<<<",
COLUMN 30, letras.negrillas_on,
COLUMN 31, "INDICE DE AUSENTISMO:",
COLUMN 53, indice using "###,###.##","%",
COLUMN 70, letras.negrillas_off
LET num_ausencias = 0
## AQUI SE APAGA EL CARACTER DE IMPRESION COMPRIMIDO
PRINT ASCII 18
PRINT ASCII 27, ASCII 80
END REPORT