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

365 lines
12 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : ADPRRP037
OBJETIVO : ANALISIS DE BENEFICIOS DE EMPLEADOS
PROGRAMADOR : JOSE ALFREDO PAULINO ALEJO
FECHA REALIZACION : Diciembre 6, 1996.
-------------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
DEFINE i,n_nomi SMALLINT
DEFINE plane integer
DEFINE valora,sub_total1,sub_total2 DECIMAL (12,2)
DEFINE nomina CHAR(1)
DEFINE lee RECORD
num_emp LIKE adtb00003.num_emp,
nom_emp LIKE adtb00003.nom1_emp,
apell_emp LIKE adtb00003.apell1_emp
END RECORD
DEFINE interme RECORD
num_emp LIKE adtb00003.num_emp,
cod_mov LIKE notb00008.cod_mov,
valor LIKE notb00008.valor,
nom1_emp LIKE adtb00003.nom1_emp,
apell1_emp LIKE adtb00003.apell1_emp
END RECORD
DEFINE anal_bene RECORD
num_emp LIKE adtb00003.num_emp,
cod_mov LIKE notb00008.cod_mov,
valor LIKE notb00008.valor,
descrip_mov CHAR (30),
nombre CHAR (30),
orden SMALLINT
END RECORD
FUNCTION adprrp037()
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
OPEN FORM adfmrp037 FROM "adfmrp037"
DISPLAY FORM adfmrp037
CALL pantalla()
DISPLAY "adprrp037" AT 4,3 ATTRIBUTE(RED)
DISPLAY "JAPA " AT 5,3
DISPLAY "Analisis de Beneficios Por Empleado" AT 6,26 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 VACACIONES
LET datos.fech_ini = NULL
LET datos.fech_fin = NULL
LET nomina = NULL
INPUT BY NAME datos.fech_ini,datos.fech_fin,nomina WITHOUT DEFAULTS
ON KEY(CONTROL-P)
CALL busca_printer() RETURNING imprime, letras.*, archivo
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 FIELD nomina
IF nomina IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nomina
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.num_emp FROM 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.cod_mov,sum(a.valor)",
" FROM notb00008 a,notb00010 b ",
" WHERE a.num_nomi = b.num_nomi AND (a.tipo_emp = b.tipo_emp AND",
" a.tipo_emp = '", nomina ,
"' ) AND a.cod_mov IN (1,2,3,4,5,7,8,9,10,",
" 21,22,28,32,33,36,37,40,43) AND ", criterio clipped,
" AND a.fecha BETWEEN ? AND ? ",
" GROUP BY 1,2",
" ORDER BY 1 "
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
## SE PREPARA LA INFORMACION SELECCIONADA
PREPARE busca FROM selec
CALL integridad()
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
DISPLAY " " AT 19,14
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
START REPORT benefi TO archivo
## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE
## SALIDA AL REPORTE
LET sub_total1 = 0
LET sub_total2 = 0
FOREACH accion INTO interme.*
IF interme.cod_mov = 1 or interme.cod_mov = 2 OR interme.cod_mov = 3
OR interme.cod_mov = 40 or interme.cod_mov = 7
OR interme.cod_mov = 37
THEN
LET anal_bene.num_emp = interme.num_emp
LET anal_bene.cod_mov = interme.cod_mov
LET anal_bene.valor = interme.valor
SELECT a.descrip_mov INTO anal_bene.descrip_mov
FROM notb00002 a WHERE a.cod_mov=interme.cod_mov
LET anal_bene.orden = 1
END IF
IF interme.cod_mov =21 or interme.cod_mov =22 OR interme.cod_mov =43
OR interme.cod_mov = 5 or interme.cod_mov = 4
OR interme.cod_mov = 9 or interme.cod_mov = 8
OR interme.cod_mov =10 or interme.cod_mov = 28
OR interme.cod_mov =32 or interme.cod_mov = 33
OR interme.cod_mov = 36
THEN
LET anal_bene.num_emp = interme.num_emp
LET anal_bene.cod_mov = interme.cod_mov
LET anal_bene.valor = interme.valor
IF interme.cod_mov = 21 THEN
SELECT sum(valor) INTO valora
FROM notb00088 WHERE tipo_emp=nomina AND
num_emp = anal_bene.num_emp AND cod_mov = 21
AND STATUS_T IS NULL AND fecha <= datos.fech_fin
{SELECT unique plan INTO plane FROM smtb00012 WHERE
num_emp = anal_bene.num_emp AND cod_par = 0
AND sec_par = 0
IF plane = 1 THEN
LET anal_bene.valor = (4 * (valora * -1))
ELSE
LET anal_bene.valor = (2.333* (valora * -1))
END IF
}
END IF
IF interme.cod_mov = 43 THEN
SELECT sum(valor) INTO valora
FROM notb00088 WHERE tipo_emp=nomina AND
num_emp = anal_bene.num_emp AND cod_mov = 43
AND STATUS_T IS NULL AND fecha <=datos.fech_fin
LET anal_bene.valor = (2.333 * (valora * -1))
END IF
IF interme.cod_mov = 22 THEN
SELECT sum(valor) INTO valora
FROM notb00088 WHERE tipo_emp=nomina AND
num_emp = anal_bene.num_emp AND cod_mov = 22
AND STATUS_T IS NULL AND fecha <= datos.fech_fin
LET anal_bene.valor = (2.8 * (valora * -1))
END IF
SELECT a.descrip_mov INTO anal_bene.descrip_mov
FROM notb00002 a WHERE a.cod_mov=interme.cod_mov
LET anal_bene.orden = 2
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF anal_bene.num_emp != 0 THEN
OUTPUT TO REPORT benefi(anal_bene.*)
END IF
END FOREACH
FINISH REPORT benefi
RUN imprime
CLEAR SCREEN
END FUNCTION
## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA
## EL REPORTE
REPORT benefi(x)
DEFINE x RECORD
num_emp LIKE adtb00003.num_emp,
cod_mov LIKE notb00008.cod_mov,
valor LIKE notb00008.valor,
descrip_mov CHAR (30),
nombre CHAR (30),
orden SMALLINT
END RECORD
## DEFINICION DE LAS VARIABLES DE IMPRESION
DEFINE hora CHAR(5)
DEFINE ano_act,ano_ing,anos_cia SMALLINT
DEFINE fech_vac DATE
DEFINE d_tomados,d_vacaciones,d_pendientes,vacac,dias2 INTEGER
OUTPUT
## DEFINICION DE LOS MARGENES DE IMPRESION
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 3
ORDER BY x.num_emp,x.orden
FORMAT
PAGE HEADER
LET hora = time
## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
PRINT COLUMN 1, letras.comp_on,
COLUMN 2, "adprrp037",
COLUMN 14, letras.negrillas_on,
COLUMN 43, "R A Y . O . V A C D O M I N I C A N A, S. A.",
COLUMN 59, letras.negrillas_off,
COLUMN 120, "Pag.",pageno using "###"
PRINT COLUMN 44, "Sistema de Administracion de Personal",
COLUMN 121, today using "dd/mm/yyyy"
PRINT COLUMN 44, "Analisis de Beneficios Por Empleados",
COLUMN 121, hora
skip 1 line
PRINT COLUMN 2, "Desde: ",datos.fech_ini using"dd/mm/yyyy"," ", "Hasta: ",datos.fech_fin using "dd/mm/yyyy"
PRINT COLUMN 2, "---------------------------------------------------",
"---------------------------------------------------",
"------------------------------"
BEFORE GROUP OF x.num_emp
IF x.orden = 1 THEN
SELECT nom1_emp,apell1_emp INTO interme.nom1_emp,interme.apell1_emp
FROM adtb00003 WHERE num_emp = x.num_emp
LET x.nombre = interme.nom1_emp clipped," ", interme.apell1_emp
PRINT COLUMN 2, "FICHA : ",x.num_emp,
COLUMN 20, "NOMBRE: ",x.nombre
PRINT COLUMN 2, "---------------------------------------------------",
"---------------------------------------------------",
"------------------------------"
END IF
BEFORE GROUP OF x.orden
IF x.orden = 1 THEN
PRINT COLUMN 25, "INGRESOS:"
skip 1 line
ELSE
skip 1 line
PRINT COLUMN 25, "BENEFICIOS MARGINALES:"
skip 1 line
END IF
ON EVERY ROW
PRINT COLUMN 26, x.cod_mov,
COLUMN 33, x.descrip_mov,
COLUMN 83, x.valor using "##,###,###.##"
IF x.orden = 1 THEN
LET sub_total1 = sub_total1 + x.valor
ELSE
LET sub_total2 = sub_total2 + x.valor
END IF
AFTER GROUP OF x.orden
skip 1 line
PRINT COLUMN 25, " SUB-TOTAL ---->",
COLUMN 83, GROUP SUM(x.valor) using "##,###,###.##"
AFTER GROUP OF x.num_emp
SKIP 1 LINE
PRINT COLUMN 26, "TOTAL GENERAL ----->",
COLUMN 83, GROUP SUM(x.valor) using "##,###,###.##"
IF sub_total1 != 0 THEN
SKIP 1 LINE
PRINT COLUMN 26, "PROPORCION BENEFICIOS/INGRESOS:",
COLUMN 89, (sub_total2 / sub_total1) * 100 using "%<<<.###"
LET sub_total1 = 0
LET sub_total2 = 0
END IF
SKIP 5 LINE
PRINT COLUMN 2, "______________________________",
COLUMN 80,"______________________________"
PRINT COLUMN 7, "JUANA CRUZ ORTEGA",
COLUMN 86, "FIRMA DEL EMPLEADO"
PRINT COLUMN 7, "GERENTE DE PERSONAL"
SKIP TO TOP OF PAGE
ON LAST ROW
## AQUI SE APAGA EL CARACTER DE IMPRESION COMPRIMIDO
PRINT ASCII 18
PRINT ASCII 27, ASCII 80
END REPORT