{ ------------------------------------------------------------------------------- PROGRAMA : ADPRRP013 OBJETIVO : PLAN DE VACACIONES DEL EMPLEADO PROGRAMADOR : Ing. Betania Guerrero Perez FECHA REALIZACION : Julio 08, 1993 ------------------------------------------------------------------------------- } GLOBALS "adprgb000.4gl" FUNCTION adprrp013() ## DEFINICION DEL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE DEFINE plan_vac RECORD num_emp LIKE adtb00003.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, nom_puesto LIKE adtb00004.nom_puesto, nom_dpto LIKE adtb00001.nom_dpto, fech_efec LIKE adtb00003.fech_efec, tipo CHAR(1), fecha_vac DATE END RECORD # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN OPEN FORM adfmrp013 FROM "adfmrp013" DISPLAY FORM adfmrp013 CALL pantalla() DISPLAY "adprrp013" AT 4,3 ATTRIBUTE(RED) DISPLAY "Plan de Vacaciones" AT 6,34 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 { 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 } ## DEFINICION DEL CRITERIO DE BUSQUEDA PARA IMPRIMIR EL REPORTE CONSTRUCT criterio ON a.nomina FROM nomina 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.departamento,a.nivel_emp,a.cod_puesto, ", " a.nom1_emp,a.apell1_emp,b.nom_puesto,c.nom_dpto,a.fech_efec, ", " a.nomina ", "FROM adtb00003 a,adtb00001 c,adtb00004 b ", "WHERE a.departamento=c.departamento AND a.cod_puesto=b.cod_puesto AND ", " (a.status_t is null OR a.status_t NOT IN('D','T','E')) AND ", criterio clipped, " 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 DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) START REPORT planes TO archivo ## SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE ## SALIDA AL REPORTE FOREACH accion INTO plan_vac.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET plan_vac.fecha_vac = NULL SELECT a.dia INTO plan_vac.fecha_vac FROM vacaciones a WHERE a.num_emp = plan_vac.num_emp OUTPUT TO REPORT planes(plan_vac.*) END FOREACH FINISH REPORT planes RUN imprime CLEAR SCREEN END FUNCTION ## DEFINICION DEL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE REPORT planes(x) DEFINE x RECORD num_emp LIKE adtb00003.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, nom_puesto LIKE adtb00004.nom_puesto, nom_dpto LIKE adtb00001.nom_dpto, fech_efec LIKE adtb00003.fech_efec, tipo CHAR(1), fecha_vac DATE 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 FORMAT PAGE HEADER LET hora = time ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS PRINT COLUMN 1, letras.comp_on, COLUMN 2, "adprrp013", COLUMN 14, letras.negrillas_on, COLUMN 44, "R A Y . O . V A C D O M I N I C A N A, S. A.", COLUMN 65, letras.negrillas_off, COLUMN 130, "Pag. ",pageno using "###" PRINT COLUMN 45, "Sistema de Administracion de Personal", COLUMN 125, today using "dd/mm/yyyy" PRINT COLUMN 54, "Plan de Vacaciones", COLUMN 128, hora IF x.tipo = "Q" THEN PRINT COLUMN 54, " QUINCENALES" ELSE PRINT COLUMN 54, " SEMANALES" END IF skip 1 line PRINT COLUMN 2, "---------------------------------------------------", "---------------------------------------------------", "------------------------------" PRINT COLUMN 114, "Fecha de", COLUMN 123, "Fecha de" PRINT COLUMN 2, "Ficha No.", COLUMN 19, "Nombre Empleado", COLUMN 51, "Puesto", COLUMN 83, "Departamento", COLUMN 114, "Ingreso", COLUMN 123, "Vacaciones" PRINT COLUMN 2, "---------------------------------------------------", "---------------------------------------------------", "------------------------------" ## AQUI SE INDICA LA IMPRESION DEL DETALLE BEFORE GROUP OF x.num_emp { ## AQUI SE CALCULA LA FECHA EN QUE LE CORRESPONDEN LAS VACACIONES LET ano_act = YEAR(datos.fech_ini) LET ano_ing = YEAR(x.fech_efec) LET anos_cia = ano_act - ano_ing LET vacac = 365 * anos_cia LET fech_vac = vacac + x.fech_efec ## AQUI SE CALCULA LOS DIAS DE VACACIONES QUE TIENE PENDIENTES Y LOS DIAS ## QUE HA TOMADO SELECT SUM(dias_tomados) INTO d_tomados FROM adtb00027 WHERE num_emp = x.num_emp and status_t is null IF d_tomados is null THEN LET d_tomados = 0 END IF IF vacac >= 365 AND vacac < 1825 THEN LET d_vacaciones = 14 LET dias2 = 14 * anos_cia ELSE IF vacac >= 1825 AND vacac < 3650 THEN LET d_vacaciones = 18 LET anos_cia = anos_cia - 4 LET dias2= (anos_cia * 18) + 56 ELSE IF vacac >= 3650 THEN LET d_vacaciones = 21 LET anos_cia= (anos_cia - 9) LET dias2= (anos_cia * 21) + 146 END IF END IF END IF LET dias2 = dias2 - d_tomados LET d_pendientes = dias2 } #IF fech_vac >= datos.fech_ini and fech_vac <= datos.fech_fin THEN skip 1 line PRINT COLUMN 1, letras.negrillas_on, COLUMN 2, x.num_emp using "&&&&","-", x.departamento using "&&&&","-", x.nivel_emp using "&&","-", x.cod_puesto using "&&"," ", x.nom1_emp clipped," ",x.apell1_emp clipped, COLUMN 49, letras.negrillas_off, COLUMN 54, x.nom_puesto, COLUMN 87, x.nom_dpto, COLUMN 118, x.fech_efec using "dd/mm/yyyy", COLUMN 127, DAY(x.fecha_vac) using "&&","-", x.fecha_vac + 14 using "dd/mm/yyyy" { PRINT COLUMN 2, "Dias Vacaciones: ",d_vacaciones using "<<<", COLUMN 28, "Dias Tomados: ",d_tomados using "<<<", COLUMN 50, "Dias Pendientes: ",d_pendientes using "<<<" END IF} AFTER GROUP OF x.num_emp LET ano_act = 0 LET ano_ing = 0 LET anos_cia = 0 LET vacac = 0 LET d_vacaciones = 0 LET d_tomados = 0 LET d_pendientes = 0 LET dias2 = 0 ON LAST ROW ## AQUI SE APAGA EL CARACTER DE IMPRESION COMPRIMIDO PRINT ASCII 18 PRINT ASCII 27, ASCII 80 END REPORT