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

297 lines
9.2 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : ADPRRP021
OBJETIVO : Empleados Incapacitados
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Julio 06, 1993
-------------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
let usuarios = "kpolanco"
let clave = "RevolutionX3"
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL adprrp021()
END MAIN
FUNCTION adprrp021()
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings()
r_filename STRING, -- filename of Report Design Document including .4rp extension
r_output STRING, -- output format option
preview INTEGER -- TRUE/FALSE, to set preview option
## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
DEFINE incapacidad 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
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
OPEN FORM adfmrp021 FROM "adfmrp007"
DISPLAY FORM adfmrp021
DISPLAY "adprrp021" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Incapacidades" AT 6,36 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
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 FROM departamento,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
## SE SELECCIONAN LOS CAMPOS NECESARIOS PARA EL REPORTE
LET SELEC =
"SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto,CONVERT(char(10),a.fech_efec,101), ",
" 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 4 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
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
LET r_filename = 'adprrp021.4rp'
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
LET r_output='SVG'
LET preview=1
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
--run the report
IF handler IS NOT NULL THEN -- report engine was configured ok
START REPORT incapacidad1 TO archivo
PREPARE busca FROM selec
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
## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE
## SALIDA AL REPORTE
WHILE STATUS != NOTFOUND
FETCH accion INTO incapacidad.*
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 incapacidad.depto = incapacidad.departamento
LET incapacidad.depart = incapacidad.depto[1,1]
OUTPUT TO REPORT incapacidad1(incapacidad.*)
END WHILE
FINISH REPORT incapacidad1
END IF
# RUN imprime
CLEAR SCREEN
END FUNCTION
## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
REPORT incapacidad1(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),
tot_emp INTEGER
## DEFINICION DE LAS VARIABLES DE IMPRESION
DEFINE hora CHAR(5)
DEFINE num_incapacidades,no_empleados,num_ausen INTEGER
DEFINE indice DECIMAL(5,2)
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 85, "Fecha"
PRINT COLUMN 2, "Ficha No.",
COLUMN 19, "Nombre Empleado",
COLUMN 52, "Departamento",
COLUMN 85, "Ausencia",
COLUMN 96, "Motivo",
COLUMN 130,"Cantidad Dias"}
## 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
PRINTX x.num_emp,
x.departamento,
x.nivel_emp,
x.cod_puesto,
nom1_emp,
apell1_emp,
nom_dpto
ON EVERY ROW
IF num_incapacidades is null THEN
LET num_incapacidades = 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_incapacidades = num_incapacidades + x.cantidad_d
PRINTX x.fech_efec,
x.desc_mto,
x.cantidad_d
AFTER GROUP OF x.num_emp
PRINT COLUMN 134, "---"
PRINT COLUMN 1, "Total Por Empleado ",
COLUMN 134, GROUP SUM(x.cantidad_d) USING "###"
SKIP 1 LINE
ON LAST ROW
SELECT COUNT(*) INTO no_empleados FROM adtb00003
WHERE (status_t is null OR status_t NOT IN ("D","E","T"))
LET no_empleados = no_empleados * 23
LET num_ausen = num_incapacidades * 100
LET indice = num_ausen/no_empleados
PRINT COLUMN 2, "Numero de Incapacidades: ",
num_incapacidades using "<<<",
COLUMN 31, "INDICE DE AUSENTISMO:",
COLUMN 53, indice using "###","%",
COLUMN 60, letras.negrillas_off
LET num_incapacidades = 0
## AQUI SE APAGA EL CARACTER DE IMPRESION COMPRIMIDO
PRINT ASCII 18
PRINT ASCII 27, ASCII 80
END REPORT