374 lines
12 KiB
Plaintext
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
|
|
|