{ ------------------------------------------------------------------------------- PROGRAMA : NOPRRP033 OBJETIVO : CALCULA LA BONIFICACION PROYECTADA A DICIEMBRE PROGRAMADOR : Juan Soto FECHA REALIZACION : Agosto 8, 1996. ------------------------------------------------------------------------------- } GLOBALS "noprgb000.4gl" ## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE DEFINE salir CHAR(1), fecha_b CHAR(12), pro_d1 decimal(8,2), pro_d2 DECIMAL(10,2), k_mes DECIMAL(8,2), j_mes,dias,p_mes SMALLINT, fecha_b2 DATE, fecha_emp, fecha_a DECIMAL(10,3), sueldo_b DECIMAL(14,2), p_tipo_emp CHAR(1) FUNCTION noprrp033() # WHENEVER ERROR CONTINUE DEFINE cooper RECORD num_emp LIKE notb00008.num_emp, departamento LIKE adtb00003.departamento, nivel_emp LIKE adtb00003.nivel_emp, cod_puesto LIKE adtb00003.cod_puesto, nom1_emp LIKE adtb00003.nom1_emp, apell1_emp LIKE adtb00003.apell1_emp, sueldo LIKE adtb00003.sueldo_ac, fecha_entrada LIKE adtb00003.fech_efec, sueldo_b DECIMAL(12,2), boni_prop DECIMAL(12,2), bonifica DECIMAL(12,2) END RECORD OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN OPEN FORM nofmrp033 FROM "nofmrp033" DISPLAY FORM nofmrp033 CALL pantalla() DISPLAY "noprrp033" AT 4,3 DISPLAY "Proyecciones / Bonificacion" AT 6,28 ## 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) ## AQUI SE INDICA EL CRITERIO DE BUSQUEDA DEL REPORTE INPUT BY NAME p_tipo_emp AFTER INPUT IF p_tipo_emp is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD p_tipo_emp 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 CONSTRUCT BY NAME criterio ON b.departamento 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 UNIQUE b.num_emp,b.departamento,b.nivel_emp,b.cod_puesto, ", " b.nom1_emp,b.apell1_emp,b.sueldo_ac,b.fech_efec ", " FROM adtb00003 b ", " WHERE nomina = ? AND ", " (b.status_t is null or b.status_t = 'I') and ", criterio clipped, " ORDER BY 1" DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) ## SE PREPARA LA INFORMACION SELECCIONADA PREPARE comando FROM selec DECLARE accion CURSOR FOR comando OPEN accion USING p_tipo_emp DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) START REPORT pro_bonifica TO "C:\\archivo" ## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE ## SALIDA AL REPORTE WHILE status != notfound FETCH accion INTO cooper.* IF status = notfound THEN EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET cooper.sueldo_b = cooper.sueldo # CALCULO DE LA BONIFICACION DE EMPLEADOS LET fecha_b = "31/12/", YEAR(today) USING "####" LET fecha_b2 = fecha_b CLIPPED LET sueldo_b = cooper.sueldo / 23.83 LET fecha_emp = fecha_b2 - cooper.fecha_entrada LET fecha_a = fecha_emp / 365 IF fecha_a >= 1 or fecha_a <= 3 THEN LET cooper.bonifica = sueldo_b * 45 END IF IF fecha_a > 3 THEN LET cooper.bonifica = sueldo_b * 60 END IF # Proporcion de Bonificacion para los Empleados que no tienen un anos en la # Empresa se hace la siguiente division .... (45 / 12) va a ser igual a # 3.75 de dias por mes...... # 23.83 es igual a promedio de dia laborable # del mes IF fecha_a < 1 THEN LET p_mes = MONTH(cooper.fecha_entrada) SELECT a.dias_prod INTO dias FROM mestable a WHERE mes = p_mes LET k_mes = ((dias - DAY(cooper.fecha_entrada)) / dias) LET j_mes = 12 - MONTH(cooper.fecha_entrada) LET k_mes = k_mes + j_mes LET pro_d1 = 3.75 * k_mes LET pro_d2 = pro_d1 * sueldo_b LET cooper.bonifica = pro_d2 END IF OUTPUT TO REPORT pro_bonifica(cooper.*) END WHILE FINISH REPORT pro_bonifica CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" END FUNCTION ## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE REPORT pro_bonifica(x) DEFINE x RECORD num_emp LIKE notb00008.num_emp, departamento LIKE adtb00003.departamento, nivel_emp LIKE adtb00003.nivel_emp, cod_puesto LIKE adtb00003.cod_puesto, nom1_emp LIKE adtb00003.nom1_emp, apell1_emp LIKE adtb00003.apell1_emp, sueldo LIKE adtb00003.sueldo_ac, fecha_entrada LIKE adtb00003.fech_efec, sueldo_b DECIMAL(12,2), boni_prop DECIMAL(12,2), bonifica DECIMAL(12,2) END RECORD ## DEFINICION DE LAS VARIABLES DE IMPRESION DEFINE doble_on CHAR(2) DEFINE doble_off CHAR(2) DEFINE negrillas_on CHAR(2) DEFINE negrillas_off CHAR(2) DEFINE comp_on CHAR(2) DEFINE comp_off CHAR(2) DEFINE doce CHAR(2) DEFINE normal CHAR(2) DEFINE hora CHAR(5) DEFINE valor1,total,total1,balance DECIMAL(10,2) DEFINE l smallint DEFINE varia CHAR(30) DEFINE descr CHAR(15) DEFINE nombre_d CHAR(30) OUTPUT ## DEFINICION DE LOS MARGENES DE IMPRESION TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 3 ORDER BY x.departamento FORMAT PAGE HEADER LET doble_on = ASCII 14 LET doble_off = ASCII 20 LET negrillas_on = ASCII 27, ASCII 69 LET negrillas_off = ASCII 27, ASCII 70 LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET hora = time ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS PRINT COLUMN doce PRINT COLUMN 1, negrillas_on PRINT COLUMN 1, "noprrp033", COLUMN 22, p_companias.nombre CLIPPED, COLUMN 87, "Pag. ",pageno using "###" PRINT COLUMN 24, "Proyeccion Bonificacion Para El Ano Actual", COLUMN 87, today using "dd/mm/yy" PRINT COLUMN L, varia, COLUMN 90, hora ## SE SELECCIONA EL TIPO DE NOMINA A IMPRIMIR IF p_tipo_emp = "Q" THEN LET descr = "QUINCENAL" ELSE IF p_tipo_emp = "V" THEN LET descr = "VENDEDOR" ELSE LET descr = "SEMANAL" END IF END IF PRINT COLUMN 1, negrillas_on, COLUMN 2, descr, COLUMN 15, negrillas_off PRINT COLUMN 2, "----------------------------------------------------", "------------------------------------------" PRINT COLUMN 55, "Fecha De", COLUMN 82, "Bonificacion" PRINT COLUMN 2, "Ficha No.", COLUMN 28, "Nombre", COLUMN 55, "Entrada", COLUMN 68, "Sueldo", COLUMN 82, "Al ",fecha_b PRINT COLUMN 2, "----------------------------------------------------", "------------------------------------------" BEFORE GROUP OF x.departamento IF x.departamento is not null THEN select nom_dpto INTO nombre_d FROM adtb00001 where departamento = x.departamento IF status = NOTFOUND THEN LET status = 0 LET nombre_d = " NO TIENE DEPARTAMENTO " END IF PRINT COLUMN 1, negrillas_on PRINT COLUMN 2, "DEPTO.: ", x.departamento USING "&&&&"," ", nombre_d CLIPPED PRINT COLUMN 1, negrillas_off END IF ON EVERY ROW PRINT COLUMN 2, x.num_emp using "&&&&", COLUMN 23, x.nom1_emp clipped," ",x.apell1_emp clipped, COLUMN 55, x.fecha_entrada using "dd/mm/yy", COLUMN 66, x.sueldo using "##,###.##", COLUMN 86, x.bonifica using "###,###.##" AFTER GROUP OF x.departamento SKIP 1 LINE ON LAST ROW PRINT COLUMN 2, "----------------------------------------------------", "------------------------------------------" PRINT COLUMN 1, negrillas_on PRINT COLUMN 1, "TOTAL BONIFICACION =====>", COLUMN 81, SUM(x.bonifica) USING "###,###,###.##" PRINT COLUMN 15, negrillas_off,normal END REPORT