{ ------------------------------------------------------------------------------- PROGRAMA : adprrp044b OBJETIVO : Listar las informaciones generales de los Empleados Quincenales y Semanales y Ex-Empleados Agrupados por los Deptos. Corporativos. PROGRAMADOR : Oscar A. Castillo FECHA REALIZACION : Friday, 16 March, 2001 ------------------------------------------------------------------------------- } GLOBALS "adprgb000.4gl" DEFINE tipo_l CHAR(1), fecha1,fecha2,fecha_ini_e,fecha_fin_e DATE, mes1,mes2,ano SMALLINT, l_monto_emp,m_monto_emp,l_sueld_con,sueld_con,sueld_con1,ingresos LIKE adtb00003.sueldo_ac, m_plan INTEGER, m_categ CHAR(1), corporativo LIKE adtb00042.dep_corp, m_v98,v_comp,benef,otros_ben,horas,bonificacion,reg_pascual DECIMAL(12,2), adtb40 RECORD LIKE adtb00040.*,edad,edad1 INTEGER, superm,pormes,vida,myd,comision DECIMAL(12,2), por_vida, por_myd,por_comi DECIMAL(12,2) FUNCTION adprrp044b() ## SE DEFINE EL REGISTRO DE BUSQUEDA CON LOS CAMPOS NECESARIOS PARA EL REPORTE DEFINE list_emp 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, cedula LIKE adtb00003.cedula, serie LIKE adtb00003.serie, telefono LIKE adtb00003.telefono, fech_nac LIKE adtb00003.fech_nac, tipo_sangre LIKE adtb00003.tipo_sangre, licencia LIKE adtb00003.licencia, fech_efec LIKE adtb00003.fech_efec, sueldo_ac LIKE adtb00003.sueldo_ac, nom_dpto LIKE adtb00001.nom_dpto, nom_puesto LIKE adtb00004.nom_puesto, calle LIKE adtb00003.calle, casa_num LIKE adtb00003.casa_num, barrio LIKE adtb00003.barrio, urbanizacion LIKE adtb00003.urbanizacion, sexo LIKE adtb00030.sexo, dep_corp LIKE adtb00042.dep_corp, clase_emp LIKE adtb00003.clase_emp, monto_seg_dental LIKE adtb00003.monto_seg_dental, monto_asegurado LIKE adtb00003.monto_asegurado, cod_plan LIKE adtb00003.cod_plan, estado CHAR(1) END RECORD, dura DECIMAL(8,2) #WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN OPEN FORM adfmrp044 FROM "adfmrp044" DISPLAY FORM adfmrp044 CALL pantalla() DISPLAY "adprrp044" AT 4,3 ATTRIBUTE(RED) DISPLAY "Empleados Deartamentos Corporativos " AT 6,23 ATTRIBUTE(BLACK) ## INDICA EL PAPEL NECESARIO PARA IMPRIMIR 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 ## AQUI SE DIGITA LA VARIABLE QUE INDICA LA CONDICION DEL REPORTE, ES DECIR ## SI SE TRATA DE EMPLEADOS SEMANALES O QUINCENALES INPUT BY NAME mes1,mes2,ano ON KEY(CONTROL-P) CALL busca_printer() RETURNING imprime,letras.*, archivo AFTER FIELD mes1 IF mes1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD mes1 END IF AFTER FIELD mes2 IF mes2 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD mes2 END IF AFTER FIELD ano IF ano IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ano END IF SELECT a.fecha_corte INTO fecha2 FROM prdtable a WHERE a.ano = ano AND a.mes = mes2 SELECT a.fecha_inicio INTO fecha1 FROM prdtable a WHERE a.ano = ano AND a.mes = mes1 AFTER INPUT 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 a.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 DE LOS QUINCENALES #IF tipo_l = "N" THEN LET SELEC = "SELECT UNIQUE a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ", " a.nom1_emp,a.apell1_emp,a.cedula,a.serie,a.telefono,a.fech_nac, ", " a.tipo_sangre,a.licencia,a.fech_efec,a.sueldo_ac,c.nom_dpto, ", " b.nom_puesto,a.calle,a.casa_num,a.barrio,a.urbanizacion,d.sexo, ", " e.dep_corp,a.clase_emp,a.monto_seg_dental,a.monto_asegurado,a.cod_plan,a.status_t ", "FROM adtb00003 a,adtb00004 b,adtb00001 c,adtb00030 d,notb00008 t, OUTER adtb00043 e ", "WHERE (a.cod_puesto=b.cod_puesto) AND (a.departamento=c.departamento) AND ", #" (a.status_t is null OR a.status_t NOT IN('D','E','T')) AND ", " (a.num_emp = d.num_emp AND a.num_emp = e.num_emp AND ", " d.num_emp = e.num_emp AND a.num_emp = t.num_emp AND ", " t.fecha BETWEEN ? AND ? AND ", criterio CLIPPED, ") ORDER BY 22,1 " DISPLAY "Buscando Informacion ... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) ## AQUI SE PREPARA LA INFORMACION SELECCIONADA PREPARE busca FROM selec DECLARE accion CURSOR FOR busca OPEN accion USING fecha1,fecha2 DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) START REPORT empleadosb TO archivo # display "fechas ",fecha1, " ",fecha2 ## AQUI SE BUSCA LA INFORMACION DE LOS CAMPOS DEL REGISTRO PARA DARLE ## SALIDA AL REPORTE WHILE STATUS != NOTFOUND FETCH accion INTO list_emp.* 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 SELECT MIN(a.fecha) INTO fecha_ini_e FROM notb00008 a WHERE a.fecha between fecha1 AND fecha2 AND a.num_emp = list_emp.num_emp SELECT MAX(a.fecha) INTO fecha_fin_e FROM notb00008 a WHERE a.fecha between fecha1 AND fecha2 AND a.num_emp = list_emp.num_emp LET dura = fecha_fin_e - fecha_ini_e LET pormes = dura / 30 USING "###" { # SEGURO MEDICO SELECT UNIQUE a.plan,a.categ INTO m_plan,m_categ FROM smtb00012 a WHERE a.num_emp = list_emp.num_emp AND a.status_t IS NULL IF STATUS != NOTFOUND THEN SELECT a.monto_empresa INTO l_monto_emp FROM smtb00003 a WHERE a.plan = m_plan AND a.categ = m_categ AND a.status_t IS NULL ELSE LET l_monto_emp = 0 END IF } IF l_monto_emp IS NULL THEN LET l_monto_emp = 0 END IF #DISPLAY "PASO ",l_monto_emp LET m_monto_emp = l_monto_emp * pormes #DISPLAY "PASO 11",m_monto_emp # SEGURO SOCIAL SELECT SUM(a.valor) INTO m_v98 FROM notb00008 a WHERE a.num_emp = list_emp.num_emp AND a.cod_mov = 98 #AND a.status_t IS NULL AND a.fecha BETWEEN fecha1 AND fecha2 # SEGURO DENTAL SELECT SUM(a.valor) FROM notb00008 a WHERE a.num_emp = list_emp.num_emp AND a.fecha between fecha1 AND fecha2 IF STATUS != NOTFOUND THEN #LET STATUS = 0 IF list_emp.monto_seg_dental != 0 THEN LET v_comp = (list_emp.monto_seg_dental * 0.70) LET v_comp = v_comp * pormes END IF END IF # Seguro Social # CALCULO SEGURO DE VIDA SELECT SUM(a.valor) FROM notb00008 a WHERE a.num_emp = list_emp.num_emp AND a.fecha BETWEEN fecha1 AND fecha2 #AND a.status_t IS NULL IF STATUS != NOTFOUND THEN IF list_emp.monto_asegurado > 0 THEN SELECT a.* INTO adtb40.* FROM adtb00040 a WHERE a.cod_plan = list_emp.cod_plan AND a.status_t IS NULL IF STATUS != NOTFOUND THEN IF adtb40.porc_vida IS NULL THEN LET adtb40.porc_vida = 0 END IF IF adtb40.porc_mid IS NULL THEN LET adtb40.porc_mid = 0 END IF IF adtb40.porc_comision IS NULL THEN LET adtb40.porc_comision = 0 END IF LET edad1 = 0 LET edad1 = TODAY - list_emp.fech_nac LET edad = edad1/365 LET vida = (list_emp.monto_asegurado * (adtb40.porc_vida / 100)) LET myd = (list_emp.monto_asegurado * (adtb40.porc_mid / 100)) #IF edad >= 60 THEN LET comision = (list_emp.monto_asegurado * (adtb40.porc_comision / 100)) { ELSE LET comision = 0 END IF } LET vida = vida * pormes LET myd = myd * pormes LET comision = comision * pormes END IF END IF END IF #----------------------------------------------------------------------------------------- IF vida IS NULL THEN LET vida = 0 END IF IF myd IS NULL THEN LET myd = 0 END IF IF comision IS NULL THEN LET comision = 0 END IF IF v_comp IS NULL THEN LET v_comp = 0 END IF IF m_v98 IS NULL THEN LET m_v98 = 0 END IF IF superm IS NULL THEN LET superm = 0 END IF IF m_monto_emp IS NULL THEN LET m_monto_emp = 0 END IF LET sueld_con = 0 LET sueld_con1 = 0 LET ingresos = 0 SELECT SUM(a.valor) INTO ingresos FROM notb00008 a WHERE a.clase_mov in ("E","I") AND a.cod_mov != 1 AND a.num_emp = list_emp.num_emp AND a.fecha between fecha1 and fecha2 SELECT SUM(a.valor) INTO sueld_con1 FROM notb00008 a WHERE a.cod_mov = 1 AND a.num_emp = list_emp.num_emp AND a.fecha between fecha1 and fecha2 IF ingresos IS NULL THEN LET ingresos = 0 END IF IF sueld_con1 IS NULL THEN LET sueld_con1 = 0 END IF LET sueld_con = (sueld_con1 + ingresos) / pormes IF sueld_con > 13662 THEN LET sueld_con = 13662 END IF LET sueld_con = sueld_con * pormes LET l_sueld_con = 0 LET l_sueld_con = sueld_con * 0.02 LET sueld_con = 0 LET sueld_con1 = 0 LET ingresos = 0 LET benef = 0 #------------------------------------------------------------------------------------- # Agregado por Juan Soto LET por_vida = (vida * 0.12) LET por_myd = (myd * 0.12) LET por_comi = (comision * 0.12) LET vida = vida + por_vida LET myd = myd + por_myd LET comision = comision + por_comi #------------------------------------------------------------------------------------- LET benef = vida + myd + comision + v_comp + m_v98 + m_monto_emp + l_sueld_con SELECT SUM(a.valor),SUM(a.cantidad) INTO list_emp.sueldo_ac,horas FROM notb00008 a WHERE a.num_emp = list_emp.num_emp AND a.cod_mov IN (1,34) AND a.fecha BETWEEN fecha1 AND fecha2 # AND a.status_t IS NULL SELECT SUM(a.valor) INTO otros_ben FROM notb00008 a WHERE a.num_emp = list_emp.num_emp AND a.cod_mov IN (2,3,4,5,6,7,8,9,10,32,33,36,37,40,44) AND a.fecha BETWEEN fecha1 AND fecha2 # AND a.status_t IS NULL OUTPUT TO REPORT empleadosb(list_emp.*,horas,bonificacion,reg_pascual,otros_ben,benef, vida,myd,comision,v_comp,m_v98,m_monto_emp,l_sueld_con) LET vida = 0 LET myd = 0 LET comision = 0 LET v_comp = 0 LET m_v98 = 0 LET m_monto_emp = 0 LET l_sueld_con = 0 END WHILE FINISH REPORT empleadosb RUN imprime CLEAR SCREEN END FUNCTION ## AQUI SE DEFINE EL REGISTRO DE IMPRESION CON LOS CAMPOS NECESARIOS PARA ## EL REPORTE REPORT empleadosb(x,p_horas,p_boni,p_regalia,p_otros,p_benef, pvida,pmyd,pcomision,pv_comp,pm_v98,pm_monto_emp,pl_sueld_con) 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, cedula LIKE adtb00003.cedula, serie LIKE adtb00003.serie, telefono LIKE adtb00003.telefono, fech_nac LIKE adtb00003.fech_nac, tipo_sangre LIKE adtb00003.tipo_sangre, licencia LIKE adtb00003.licencia, fech_efec LIKE adtb00003.fech_efec, sueldo_ac LIKE adtb00003.sueldo_ac, nom_dpto LIKE adtb00001.nom_dpto, nom_puesto LIKE adtb00004.nom_puesto, calle LIKE adtb00003.calle, casa_num LIKE adtb00003.casa_num, barrio LIKE adtb00003.barrio, urbanizacion LIKE adtb00003.urbanizacion, sexo LIKE adtb00030.sexo, dep_corp LIKE adtb00042.dep_corp, clase_emp LIKE adtb00003.clase_emp, monto_seg_dental LIKE adtb00003.monto_seg_dental, monto_asegurado LIKE adtb00003.monto_asegurado, cod_plan LIKE adtb00003.cod_plan, estado CHAR(1) END RECORD, p_corp LIKE adtb00042.dep_corp, nombre_corp LIKE adtb00042.nombre_depto, p_benef,p_otros,p_horas,p_boni,p_regalia DECIMAL(12,2), pvida,pmyd,pcomision,pv_comp,pm_v98,pm_monto_emp,pl_sueld_con DECIMAL(12,2) ## DEFINICION DE LAS VARIABLES DE IMPRESION DEFINE hora CHAR(5) DEFINE l SMALLINT DEFINE varia CHAR(12), m_cedula LIKE adtb00038.cedula_n, m_sexo LIKE adtb00030.sexo OUTPUT ## DEFINICION DE LOS MARGENES DE IMPRESION TOP MARGIN 0 LEFT MARGIN 2 BOTTOM MARGIN 4 ORDER BY x.dep_corp FORMAT PAGE HEADER LET hora = time IF decide = "Q" THEN LET varia = "QUINCENALES" END IF IF decide = "S" THEN LET varia = "SEMANALES" END IF IF decide = "T" THEN LET varia = "EX-EMPLEADOS" END IF ## SE CALCULA LA LONGITUD DE LA VARIABLE -VARIA- LET l = (135 - LENGTH(varia))/2 ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS PRINT COLUMN 1, letras.doce,letras.comp_on,letras.negrillas_on PRINT COLUMN 1, "adprrp044", COLUMN 44, "R A Y . O . V A C D O M I N I C A N A, S. A.", COLUMN 104, "Pag. ",pageno using "###" PRINT COLUMN 44, " Sistema de Administracion de Personal", COLUMN 102, today using "dd/mm/yyyy" PRINT COLUMN 44, " Maestra de Personal ",varia CLIPPED, COLUMN 107, hora SKIP 1 LINE PRINT COLUMN 2, "Desde : ",fecha1 USING "dd/mm/yyyy", " Hasta : ",fecha2 USING "dd/mm/yyyy" PRINT COLUMN 2, "---------------------------------------------------", "---------------------------------------------------", "-------------------------" PRINT COLUMN 49, "Seguro", COLUMN 65, "Seguro", COLUMN 80, "Seguro", COLUMN 95, "Seguro", COLUMN 105, "Accidente" PRINT COLUMN 2, "Codigo No.", COLUMN 18, "Nombre Empleado", COLUMN 49, "Vida", COLUMN 65, "Medico", COLUMN 80, "Dental", COLUMN 95, "Social", COLUMN 105, "Trabajo", COLUMN 115, " Beneficios" PRINT COLUMN 2, "---------------------------------------------------", "---------------------------------------------------", "------------------------" PRINT letras.negrillas_off ## AQUI SE INDICA LA IMPRESION DEL DETALLE BEFORE GROUP OF x.dep_corp SELECT a.nombre_depto INTO nombre_corp FROM adtb00042 a WHERE a.dep_corp = x.dep_corp AND a.status_t IS NULL PRINT COLUMN 1, "Departamento : ",x.dep_corp USING "#####"," - ", nombre_corp CLIPPED SKIP 1 LINE ON EVERY ROW INITIALIZE m_cedula,m_sexo TO NULL PRINT COLUMN 1, letras.negrillas_on, COLUMN 3, x.num_emp USING "&&&&","-", x.departamento USING "&&&&","-", x.nivel_emp USING "&&","-",x.cod_puesto USING "&&", " ",x.apell1_emp clipped,", ",x.nom1_emp clipped, COLUMN 47, pvida+pcomision+pmyd using "###,###.##", COLUMN 62, pm_monto_emp using "###,###.##", COLUMN 78, pv_comp using "##,###,###.##", COLUMN 95, pm_v98 USING "##,###.##", COLUMN 105, pl_sueld_con USING "##,###.##", COLUMN 115, p_benef using "##,###,###.##" { PRINT Pvida PRINT Pmyd PRINT Pcomision PRINT Pv_comp PRINT Pm_v98 PRINT Pm_monto_emp PRINT Pl_sueld_con } AFTER GROUP OF x.dep_corp SKIP 1 LINE PRINT COLUMN 4, "Sub-Total ", COLUMN 47, GROUP SUM(pvida+pcomision+pmyd) using "###,###.##", COLUMN 62, GROUP SUM(pm_monto_emp) using "###,###.##", COLUMN 78, GROUP SUM(pv_comp) using "##,###,###.##", COLUMN 95, GROUP SUM(pm_v98) USING "##,###.##", COLUMN 105, GROUP SUM(pl_sueld_con) USING "##,###.##", COLUMN 115, GROUP SUM(p_benef) using "##,###,###.##" SKIP 1 LINE PRINT COLUMN 2, "Total Departamento = ", GROUP count(*) using "###" SKIP 1 LINE ON LAST ROW SKIP 1 LINE PRINT COLUMN 4, "Total ", COLUMN 44, SUM(pvida+pcomision+pmyd) using "###,###.##", COLUMN 59, SUM(pm_monto_emp) using "###,###.##", COLUMN 78, SUM(pv_comp) using "##,###,###.##", COLUMN 93, SUM(pm_v98) USING "##,###.##", COLUMN 105, SUM(pl_sueld_con) USING "##,###.##", COLUMN 115, SUM(p_benef) using "##,###,###.##" SKIP 1 LINE PRINT COLUMN 2, "Total de Registros Impresos = ", count(*) using "###" PRINT letras.comp_off,ASCII 27, ASCII 80 END REPORT