355 lines
11 KiB
Plaintext
355 lines
11 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
|
|
let usuarios = "kpolanco"
|
|
let clave = "RevolutionX3"
|
|
CONNECT to "smarmotech" USER usuarios USING clave
|
|
SELECT a.* INTO p_companias.* FROM companias a
|
|
CALL adprrp018()
|
|
END MAIN
|
|
|
|
FUNCTION adprrp018()
|
|
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
|
|
## 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
|
|
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.sec_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 = 1 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.sec_mto,a.fech_efec ORDER BY c.departamento"
|
|
|
|
PREPARE comando FROM selec
|
|
DECLARE accion CURSOR FOR comando
|
|
OPEN accion USING datos.fech_fin
|
|
|
|
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
|
|
LET r_filename = 'adrrp018.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 relacion TO "adprrp018"
|
|
|
|
## 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 IF
|
|
|
|
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
|
|
DEFINE etiqueta1, etiqueta2,etiqueta3,etiqueta4,etiqueta5,etiqueta6,etiqueta7 CHAR
|
|
OUTPUT
|
|
## DEFINICION DE LOS MARGENES DE IMPRESION
|
|
TOP MARGIN 0
|
|
LEFT MARGIN 0
|
|
BOTTOM MARGIN 3
|
|
|
|
FORMAT
|
|
|
|
|
|
## 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
|
|
|
|
PRINTX x.nom_dpto,
|
|
x.depart
|
|
|
|
|
|
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 etiqueta1 = "EXCENTO"
|
|
LET etiqueta2 = "NO-EXCENTO"
|
|
LET etiqueta3 = "TOTAL SALARIALES:"
|
|
LET etiqueta4 = "EXCENTO"
|
|
LET etiqueta5 = "NO-EXENTO "
|
|
LET etiqueta6 = " TOTAL EMPLEADO POR HORA:"
|
|
LET etiqueta7 = "TOTAL EMPLEADO: "
|
|
|
|
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
|
|
|
|
PRINTX etiqueta1,
|
|
inicio,
|
|
adicion,
|
|
reemplazo,
|
|
termina,
|
|
fin,
|
|
etiqueta2,
|
|
inicio1,
|
|
adicion1,
|
|
reemplazo1,
|
|
termina1,
|
|
fin1
|
|
|
|
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"))
|
|
|
|
LET t_salarial = t_fin + t_fin1
|
|
PRINTX etiqueta3,
|
|
etiqueta4,
|
|
t_inicio,
|
|
t_adicion,
|
|
t_reemplazo,
|
|
t_termina,
|
|
t_fin,
|
|
etiqueta5,
|
|
t_inicio1,
|
|
t_adicion1,
|
|
t_reemplazo1,
|
|
t_termina1,
|
|
t_fin1
|
|
|
|
|
|
LET t_semanal = sem_inicio + sem_adicion + sem_reemp - sem_termina
|
|
PRINTX etiqueta6,
|
|
sem_inicio,
|
|
sem_adicion,
|
|
sem_reemp,
|
|
sem_termina,
|
|
t_semanal
|
|
|
|
|
|
LET t_empleados = t_semanal + t_salarial
|
|
PRINTX etiqueta7,
|
|
t_empleados
|
|
END REPORT
|
|
|