Files

374 lines
12 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : ADPRRP018
OBJETIVO : LISTAR LA RELACION MENSUAL DE EMPLEADOS
BAJO UN RANGO DE FECHA (HEADCOUNT)
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Julio 09, 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
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL adprrp018()
END MAIN
FUNCTION adprrp018()
## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
DEFINE rel_men RECORD
nom_dpto LIKE adtb00001.nom_dpto,
departamento LIKE adtb00020.departamento,
nomina CHAR(1),
nivel_emp SMALLINT,
sec_mto SMALLINT,
fecha DATE,
inicio SMALLINT,
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 adfmrp008 FROM "adfmrp008"
DISPLAY FORM adfmrp008
#CALL pantalla()
DISPLAY "adprrp018" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Headcount" AT 6,38 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)
## SE INDICA EL RANGO DE FECHA DESEADO PARA LISTAR EL HEADCOUNT
CONSTRUCT criterio ON a.departamento FROM departamento
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
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 b.nom_dpto,c.departamento,a.nomina,c.nivel_emp,a.cod_mto, ",
" a.fech_efec,COUNT(*) ",
"FROM adtb00020 a,adtb00001 b,adtb00003 c ",
"WHERE c.departamento = b.departamento AND a.status_t is null AND ",
" a.cod_mto = 2 AND a.fecha < ? AND c.num_emp = a.num_emp AND ",
" (c.status_t IS NULL OR c.status_t NOT IN('D','T','E')) AND ",
criterio CLIPPED," GROUP BY b.nom_dpto,c.departamento,a.nomina,c.nivel_emp,a.cod_mto,a.fech_efec ORDER BY c.departamento "
PREPARE comando FROM selec
DECLARE accion CURSOR FOR comando
OPEN accion USING datos.fech_fin
DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
CALL seleccionarsalida() RETURNING r_output
CALL configureoutput(r_output) RETURNING handler
START REPORT relacion TO XML HANDLER handler
## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE
## SALIDA AL REPORTE
FOREACH accion INTO rel_men.*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET rel_men.depto = rel_men.departamento USING "&&&&"
LET rel_men.depart = rel_men.depto[1,1]
OUTPUT TO REPORT relacion(rel_men.*)
END FOREACH
FINISH REPORT relacion
END FUNCTION
## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
REPORT relacion(x)
DEFINE x RECORD
nom_dpto LIKE adtb00001.nom_dpto,
departamento LIKE adtb00020.departamento,
nomina CHAR(1),
nivel_emp SMALLINT,
sec_mto SMALLINT,
fecha DATE,
inicio SMALLINT,
depto CHAR(4),
depart CHAR(4)
END RECORD
## DEFINICION DE LAS VARIABLES DE IMPRESION
DEFINE hora CHAR(5)
DEFINE j,inicio,inicio1,adicion,adicion1,reemplazo,reemplazo1 INTEGER
DEFINE termina,termina1,fin,fin1,t_inicio,t_inicio1,t_adicion SMALLINT
DEFINE t_adicion1,t_reemplazo,t_reemplazo1,t_termina,t_termina1 SMALLINT
DEFINE t_empleados,t_salarial,t_fin,t_fin1 SMALLINT
DEFINE sem_inicio,sem_adicion,sem_reemp,sem_termina,t_semanal 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.doce,
COLUMN 2, "adprrp018",
COLUMN 14, letras.negrillas_on,
COLUMN 15, letras.doble_on,
COLUMN 16, letras.comp_on,
COLUMN 26, p_companias.nombre,
COLUMN 73, letras.negrillas_off,
COLUMN 74, letras.doble_off,
COLUMN 75, letras.comp_off,
COLUMN 91, "Pag. ",pageno using "###"
PRINT COLUMN 31, "Sistema de Administracion de Personal",
COLUMN 93, today using "dd/mm/yyyy"
PRINT COLUMN 45, "Headcount",
COLUMN 96, 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 48, "Inicio",
COLUMN 94, "Fin"
PRINT COLUMN 2, "Departamento",
COLUMN 33, "Clasificacion",
COLUMN 48, "Periodo",
COLUMN 57, "Adiciones",
COLUMN 68, "Reemplazos",
COLUMN 80, "Terminaciones",
COLUMN 94, "Periodo"
PRINT COLUMN 2, "--------------------------------------------------",
"-------------------------------------------------"
PRINT COLUMN 2, "Empleados Salariales"
## AQUI SE INDICA LA IMPRESION DEL DETALLE
BEFORE GROUP OF x.depart
LET inicio = 0
LET inicio1 = 0
LET adicion = 0
LET adicion1 = 0
LET reemplazo = 0
LET reemplazo1 = 0
LET termina = 0
LET termina1 = 0
LET fin = 0
LET fin1 = 0
SKIP 1 LINE
PRINT COLUMN 1, letras.negrillas_on,
COLUMN 2, x.nom_dpto,
COLUMN 40, letras.negrillas_off
ON EVERY ROW
IF j IS NULL THEN LET j = 0 END IF
LET j = j + 1
IF j = 1 THEN
LET sem_inicio = 0
LET sem_adicion = 0
LET sem_reemp = 0
END IF
IF x.nomina = "Q" OR x.nomina = "V" THEN
IF x.fecha < datos.fech_ini THEN
IF x.nivel_emp <= 1 THEN
LET inicio = inicio + x.inicio
ELSE
LET inicio1 = inicio1 + x.inicio
END IF
END IF
IF x.fecha >= datos.fech_ini AND x.sec_mto = 1 THEN
IF x.nivel_emp <= 1 THEN
LET adicion = adicion + x.inicio
ELSE
LET adicion1 = adicion1 + x.inicio
END IF
END IF
IF x.fecha >= datos.fech_ini AND x.sec_mto = 5 THEN
IF x.nivel_emp <= 1 THEN
LET reemplazo = reemplazo + x.inicio
ELSE
LET reemplazo1 = reemplazo1 + x.inicio
END IF
END IF
END IF
IF x.nomina = "S" AND x.nivel_emp > 1 THEN
IF x.fecha < datos.fech_ini THEN
LET sem_inicio = sem_inicio + x.inicio
END IF
IF x.fecha >= datos.fech_ini THEN
IF x.sec_mto = 1 THEN
LET sem_adicion = sem_adicion + x.inicio
END IF
IF x.sec_mto = 5 THEN
LET sem_reemp = sem_reemp + x.inicio
END IF
END IF
END IF
AFTER GROUP OF x.depart
SELECT COUNT(*) INTO termina FROM adtb00020 a,adtb00003 b
WHERE a.fech_efec BETWEEN datos.fech_ini AND datos.fech_fin AND
a.nomina = "Q" AND a.departamento = x.departamento AND
b.nivel_emp = 1 AND a.cod_mto = 4 AND a.num_emp = b.num_emp AND
a.status_t IS NULL
SELECT COUNT(*) INTO termina1 FROM adtb00020 a,adtb00003 b
WHERE a.fech_efec BETWEEN datos.fech_ini AND datos.fech_fin AND
a.nomina = "Q" AND a.departamento = x.departamento AND
b.nivel_emp > 1 AND a.cod_mto = 4 AND a.num_emp = b.num_emp AND
a.status_t IS NULL AND (b.status_t IS NULL OR
b.status_t NOT IN ("D","T","E"))
LET fin = inicio + adicion + reemplazo - termina
LET fin1 = inicio1 + adicion1 + reemplazo1 - termina1
LET t_inicio = inicio + t_inicio
LET t_adicion = adicion + t_adicion
LET t_reemplazo = reemplazo + t_reemplazo
LET t_termina = termina + t_termina
LET t_fin = fin + t_fin
LET t_inicio1 = inicio1 + t_inicio1
LET t_adicion1 = adicion1 + t_adicion1
LET t_reemplazo1 = reemplazo1 + t_reemplazo1
LET t_termina1 = termina1 + t_termina1
LET t_fin1 = fin1 + t_fin1
PRINT COLUMN 33, "EXENTO",
COLUMN 50, inicio using "<##",
COLUMN 60, adicion using "<##",
COLUMN 72, reemplazo using "<##",
COLUMN 85, termina using "<##",
COLUMN 96, fin using "<##"
PRINT COLUMN 33, "NO-EXENTO",
COLUMN 50, inicio1 using "<##",
COLUMN 60, adicion1 using "<##",
COLUMN 72, reemplazo1 using "<##",
COLUMN 85, termina1 using "<##",
COLUMN 96, fin1 using "<##"
ON LAST ROW
LET sem_termina = 0
LET j = 0
SELECT COUNT(*) INTO sem_termina FROM adtb00020 a,adtb00003 b
WHERE a.fech_efec BETWEEN datos.fech_ini AND datos.fech_fin AND
a.nomina = "S" AND a.departamento = x.departamento AND
b.nivel_emp > 1 AND a.cod_mto = 4 AND a.num_emp = b.num_emp AND
a.status_t IS NULL AND (b.status_t IS NULL OR
b.status_t NOT IN ("D","T","E"))
SKIP 1 LINE
LET t_salarial = t_fin + t_fin1
PRINT COLUMN 2, "Total Salariales:";
PRINT COLUMN 33, "EXENTO",
COLUMN 50, t_inicio using "<##",
COLUMN 60, t_adicion using "<##",
COLUMN 72, t_reemplazo using "<##",
COLUMN 85, t_termina using "<##",
COLUMN 96, t_fin using "<##"
PRINT COLUMN 33, "NO-EXENTO",
COLUMN 50, t_inicio1 using "<##",
COLUMN 60, t_adicion1 using "<##",
COLUMN 72, t_reemplazo1 using "<##",
COLUMN 85, t_termina1 using "<##",
COLUMN 96, t_fin1 using "<##"
SKIP 1 LINE
LET t_semanal = sem_inicio + sem_adicion + sem_reemp - sem_termina
PRINT COLUMN 2, "Total Empleados Por Hora:",
COLUMN 50, sem_inicio using "<##",
COLUMN 60, sem_adicion using "<##",
COLUMN 72, sem_reemp using "<##",
COLUMN 85, sem_termina using "<##",
COLUMN 96, t_semanal using "<##"
SKIP 1 LINE
LET t_empleados = t_semanal + t_salarial
PRINT COLUMN 2, "Total Empleados:",
COLUMN 28, t_empleados
END REPORT