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

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