{ ------------------------------------------------------------------------------- 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