{ ------------------------------------------------------------------------------- PROGRAMA : NOPRRP037 OBJETIVO : LIQUIDACION DE EMPLEADOS SIN VACACIONES PROGRAMADOR : JUAN F. SOTO FECHA REALIZACION : Abril 14, 1999 ------------------------------------------------------------------------------- } GLOBALS "noprgb000.4gl" DEFINE fecha_comision,fecha_regalia,fecha_boni,fecha_liquida,fecha_final,fecha_inicial,fecha_ic DATE, cfecha_regalia CHAR(8), anos_ley_anterior,meses_ley_anterior,mes_ley_anterior,ano_ley_anterior, mes_ingreso,mes_salida,ano_ingreso,ano_salida,meses_bonificacion, dias_ley_anterior SMALLINT, comisiones_b,ingresos_emp,comision_m,meses_bonificacion1,bonificacion_pagada DEC(12,2), dias_comision INTEGER DEFINE liquida RECORD departamento INTEGER, puesto LIKE adtb00003.cod_puesto, num_emp LIKE adtb00003.num_emp, nombre LIKE adtb00003.nom1_emp, apellido LIKE adtb00003.apell1_emp, fecha_ingreso LIKE adtb00003.fech_efec, sueldo_actual LIKE adtb00003.sueldo_ac, sueldo_promedio LIKE adtb00003.sueldo_ac, salario_dia LIKE adtb00003.sueldo_ac, tiempo_empresa DECIMAL(6,2), anos_empresa INTEGER, meses_empresa INTEGER, dias_empresa INTEGER, dias_cesantia INTEGER, monto_cesantia DECIMAL(12,2), dias_preaviso INTEGER, monto_preaviso DECIMAL(12,2), dias_vacaciones INTEGER, monto_vacaciones DECIMAL(12,2), ultimas_vacaciones DATE, num_nomi LIKE notb00008.num_nomi , monto_regalia DECIMAL(12,2), monto_bonificacion DECIMAL(12,2) END RECORD, calcula_boni,incentivos DECIMAL(12,2) DEFINE calcula_meses,salir CHAR(1), fecha_b,fecha_b1 CHAR(12), dias_boni,dias_regalia,pro_d1,proporcion decimal(10,3), pro_d2 DECIMAL(10,2), k_mes DECIMAL(8,2), j_mes,dias,p_mes INTEGER, fecha_b2 DATE, fecha_emp, fecha_a DECIMAL(10,3), sueldo_b DECIMAL(12,2), p_tipo_emp CHAR(1), pdias,m_ano,m_mes INTEGER, m_valor_total DECIMAL(12,2) MAIN DEFER INTERRUPT CALL noprrp037() END MAIN FUNCTION noprrp037() # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN LET formulario = formulario CLIPPED,"nofmrp036" OPEN FORM nofmrp036 FROM formulario DISPLAY FORM nofmrp036 CALL pantalla() LET tipo_papel = 1 CALL msgrp000(tipo_papel) #CALL defecto(impresor) RETURNING imprime,letras.*, archivo DISPLAY "noprrp037" AT 4,3 DISPLAY "Liquidacion de Empleados" AT 6,28 INPUT BY NAME fecha_liquida,ptipo_nomina #ON KEY(CONTROL-P) # CALL busca_printer() RETURNING imprime,letras.*, archivo BEFORE FIELD fecha_liquida IF fecha_liquida IS NULL THEN LET fecha_liquida = today END IF AFTER FIELD fecha_liquida IF fecha_liquida IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_liquida 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 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 # LET parametro = "D" # CALL elijeimpresion(parametro) RETURNING orden,destino,letras.* LET selec = " SELECT a.departamento, a.cod_puesto, a.num_emp, a.nom1_emp, ", " a.apell1_emp, a.fech_efec, a.sueldo_ac ", " FROM adtb00003 a ", " WHERE (a.status_t IS NULL OR a.status_T = 'I') AND ", criterio CLIPPED, " AND a.nomina = ? ", " AND a.departamento IS NOT NULL ", " ORDER BY 1,2 " DISPLAY "Buscando Informacion... Por Favor Espere" AT 19,14 ATTRIBUTE (REVERSE,BOLD) # LET fecha_liquida = today LET fecha_final = fecha_liquida LET fecha_inicial = fecha_final - 365 PREPARE busca FROM selec DECLARE accion CURSOR FOR busca OPEN accion USING ptipo_nomina DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) START REPORT liquida_emp37 TO "C:\\norp37.txt" DELETE FROM notb00033 WHERE fecha_liquidacion = fecha_liquida FOREACH accion INTO liquida.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF IF status = NOTFOUND THEN EXIT FOREACH END IF #---------------------------------------------------------------------- # Calcula el Tiempo que tiene el empleado en la Empresa #---------------------------------------------------------------------- LET liquida.anos_empresa = 0 LET liquida.meses_empresa = 0 LET liquida.dias_empresa = 0 LET anoc = NULL LET anos = 0 LET mesc = NULL LET lmeses = 0 LET diasc = NULL LET dias = 0 LET mesdia = 0 LET tiempo = 0 LET tiempoc = NULL LET mes_ingreso = MONTH(liquida.fecha_ingreso) LET mes_salida = MONTH(fecha_liquida) LET ano_ingreso = YEAR(liquida.fecha_ingreso) LET ano_salida = YEAR(fecha_liquida) LET liquida.anos_empresa = ano_salida - ano_ingreso IF mes_ingreso > mes_salida THEN LET liquida.anos_empresa = liquida.anos_empresa - 1 LET liquida.meses_empresa = 12 - mes_ingreso + mes_salida ELSE LET liquida.meses_empresa = mes_salida - mes_ingreso END IF LET liquida.dias_empresa = 0 IF liquida.meses_empresa < 0 THEN LET liquida.meses_empresa = liquida.meses_empresa * -1 END IF #---------------------------------------------------------------------- # Fin del Calculo del Tiempo que tiene el empleado en la Empresa #---------------------------------------------------------------------- LET liquida.dias_cesantia = 0 LET liquida.dias_preaviso = 0 LET liquida.dias_vacaciones = 0 CALL calcula_salarios() CALL calcula_preaviso() CALL calcula_cesantia() CALL calcula_vacaciones() LET liquida.monto_cesantia = liquida.dias_cesantia * liquida.salario_dia # Busca los dias de Vacaciones SELECT a.dias_pend INTO pdias FROM adtb00044 a WHERE a.num_emp = liquida.num_emp IF pdias IS NULL THEN LET pdias = 0 END IF LET liquida.dias_vacaciones = pdias # CALCULO DE LA BONIFICACION DE EMPLEADOS SELECT MAX(a.ano) INTO m_ano FROM prdtable a WHERE a.fecha_corte <= fecha_liquida ## BUSQUEDA DE LA COMISIONES A LOS VENDEDORES PARA EL CALCULO DE LA BONIFICACION LET comisiones_b = 0 LET comision_m = 0 LET bonificacion_pagada = 0 LET fecha_comision = fecha_liquida - 365 SELECT SUM(a.valor) INTO comisiones_b FROM notb00008 a WHERE a.num_emp = liquida.num_emp AND a.fecha BETWEEN fecha_comision AND fecha_liquida AND a.cod_mov = 40 display "FECHA C ",fecha_comision IF fecha_comision IS NOT NULL THEN LET dias_comision = fecha_liquida - fecha_comision LET comision_m = comisiones_b / (dias_comision/30) LET sueldo_b = (liquida.sueldo_actual + comision_m) / 23.83 ELSE LET sueldo_b = liquida.sueldo_actual / 23.83 END IF IF liquida.fecha_ingreso < fecha_b2 THEN LET meses_bonificacion = 12 - MONTH(fecha_b2) + MONTH(fecha_liquida) + 1 ELSE # LET meses_bonificacion1 = MONTH(fecha_liquida) - MONTH(liquida.fecha_ingreso) LET meses_bonificacion1 = (fecha_liquida - liquida.fecha_ingreso) / 30 END IF LET liquida.monto_bonificacion = 0 IF liquida.anos_empresa >= 1 THEN IF liquida.anos_empresa < 3 THEN LET calcula_boni = sueldo_b * 45 LET liquida.monto_bonificacion = calcula_boni / 12 LET liquida.monto_bonificacion = liquida.monto_bonificacion * meses_bonificacion END IF END IF IF liquida.anos_empresa >= 3 THEN LET calcula_boni = sueldo_b * 60 LET liquida.monto_bonificacion = calcula_boni / 12 LET liquida.monto_bonificacion = liquida.monto_bonificacion * meses_bonificacion LET liquida.meses_empresa = meses_bonificacion END IF IF liquida.anos_empresa < 1 THEN LET calcula_boni = sueldo_b * 45 LET liquida.monto_bonificacion = calcula_boni / 12 LET liquida.monto_bonificacion = liquida.monto_bonificacion * meses_bonificacion1 LET liquida.meses_empresa = meses_bonificacion1 END IF LET liquida.monto_bonificacion = liquida.monto_bonificacion - bonificacion_pagada LET liquida.sueldo_promedio = sueldo_b LET liquida.monto_preaviso = comision_m # Busca el salario para la regalia SELECT MIN(a.fecha_del) INTO fecha_regalia FROM notb00010 a WHERE ano = YEAR(fecha_liquida) LET ingresos_emp = 0 SELECT SUM(a.valor) INTO ingresos_emp FROM notb00008 a WHERE a.num_emp = liquida.num_emp AND a.fecha BETWEEN fecha_regalia AND fecha_liquida AND a.clase_mov in ("I","E") AND a.cod_mov = 40 IF ingresos_emp IS NULL THEN LET ingresos_emp = 0 END IF LET liquida.monto_vacaciones = (liquida.sueldo_actual / 23.83) * pdias LET dias_comision = fecha_liquida - fecha_regalia LET comision_m = ingresos_emp / (dias_comision/30) # Calculo periodo regalia LET liquida.monto_regalia = 0 SELECT SUM(a.valor)/12 INTO liquida.monto_regalia FROM notb00008 a WHERE a.num_emp = liquida.num_emp AND a.fecha BETWEEN fecha_regalia AND fecha_liquida AND a.clase_mov in ("I","E") LET fecha_regalia = null LET liquida.monto_preaviso = liquida.dias_preaviso * liquida.salario_dia OUTPUT TO REPORT liquida_emp37(liquida.*) INSERT INTO notb00033 VALUES (0, liquida.departamento, liquida.puesto, fecha_liquida, liquida.num_emp, liquida.sueldo_actual, liquida.sueldo_promedio, liquida.salario_dia, liquida.anos_empresa, liquida.meses_empresa, liquida.dias_empresa, liquida.dias_cesantia, liquida.dias_preaviso, liquida.dias_vacaciones, liquida.ultimas_vacaciones, liquida.tiempo_empresa, null,user,current,null,null) INSERT INTO notb00007 (num_nomi,tipo_emp,num_emp,departamento,cod_puesto,cod_mov,valor,us_crea,fech_crea) VALUES (525,'Q',liquida.num_emp,liquida.departamento,liquida.puesto,33,liquida.monto_regalia, user,current) END FOREACH FINISH REPORT liquida_emp37 RUN "TYPE C:\\norp37.txt > %USPRINT%" # CALL fdestino(destino,archivo,imprime) CLEAR SCREEN END FUNCTION REPORT liquida_emp37(x) DEFINE x RECORD departamento LIKE adtb00003.departamento, puesto LIKE adtb00003.cod_puesto, num_emp LIKE adtb00003.num_emp, nombre LIKE adtb00003.nom1_emp, apellido LIKE adtb00003.apell1_emp, fecha_ingreso LIKE adtb00003.fech_efec, sueldo_actual LIKE adtb00003.sueldo_ac, sueldo_promedio LIKE adtb00003.sueldo_ac, salario_dia LIKE adtb00003.sueldo_ac, tiempo_empresa DECIMAL(6,2), anos_empresa INTEGER, meses_empresa INTEGER, dias_empresa INTEGER, dias_cesantia INTEGER, monto_cesantia DECIMAL(12,2), dias_preaviso INTEGER, monto_preaviso DECIMAL(12,2), dias_vacaciones INTEGER, monto_vacaciones DECIMAL(12,2), ultimas_vacaciones DATE, num_nomi LIKE notb00008.num_nomi, monto_regalia DECIMAL(12,2), monto_bonificacion DECIMAL(12,2) END RECORD DEFINE tipo_e CHAR(15) DEFINE hora CHAR(5) DEFINE l INTEGER DEFINE varia CHAR(10) DEFINE nombre_depto CHAR(30) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 3 FORMAT PAGE HEADER LET hora = time CASE WHEN ptipo_nomina = "Q" LET tipo_e = "QUINCENAL" EXIT CASE WHEN ptipo_nomina = "S" LET tipo_e = "SEMANAL" EXIT CASE END CASE PRINT COLUMN 1, letras.comp_on, letras.negrillas_on PRINT COLUMN 1, "noprrp037", COLUMN 68, "M A R M O T E C H, S. A.", COLUMN 175, "Pag. ",pageno using "###" PRINT COLUMN 81, "Sistema de Nomina", COLUMN 175, today using "dd/mm/yyyy" PRINT COLUMN 71, "Liquidacion de Empleados ",tipo_e, COLUMN 178, hora SKIP 1 LINE PRINT COLUMN 2, "Nomina No.", COLUMN 13, novedad.num_nomi using "<<<<" ," Fecha: ", fecha_liquida USING "dd/mm/yyyy" PRINT COLUMN 2, "---------------------------------------------------", "---------------------------------------------------", "---------------------------------------------------", "--------------------------------------------------------" PRINT COLUMN 1, " ", COLUMN 40, "Fecha", COLUMN 57, "Sueldo", COLUMN 69, "Sueldo", COLUMN 82, "Salario", COLUMN 91, "Tiempo Empresa", COLUMN 109, "Dias", COLUMN 119, "Monto", COLUMN 129, "Dias", COLUMN 139, "Monto", COLUMN 148, "Dias", COLUMN 159, "Monto", COLUMN 171, "Monto", COLUMN 184, "Monto" #COLUMN 185, "Ultimas " PRINT COLUMN 1, "Empleado", COLUMN 40, "Ingreso", COLUMN 57, "Actual", COLUMN 69, "Promedio", COLUMN 82, "Diario", COLUMN 91, "Anos Meses Dias", COLUMN 109, "Cesantia", COLUMN 119, "Cesantia", COLUMN 129, "Preaviso", COLUMN 139, "Preaviso", COLUMN 148, "Vacaciones", COLUMN 159, "Vacaciones", COLUMN 170, "Regalia", COLUMN 184, "Bonificacion", COLUMN 198, "Total" #COLUMN 185, "Vacaciones" PRINT COLUMN 2, "---------------------------------------------------", "---------------------------------------------------", "---------------------------------------------------", "--------------------------------------------------------" PRINT letras.negrillas_off BEFORE GROUP OF x.departamento LET nombre_depto = NULL SELECT nom_dpto INTO nombre_depto FROM adtb00001 WHERE departamento = x.departamento AND status_t IS NULL PRINT COLUMN 1, letras.negrillas_on PRINT COLUMN 1, x.departamento USING "&&&&", " ", nombre_depto PRINT COLUMN 1, letras.negrillas_off ON EVERY ROW PRINT COLUMN 1, x.num_emp USING "&&&", COLUMN 5, x.nombre CLIPPED," ",x.apellido CLIPPED, COLUMN 40, x.fecha_ingreso USING "dd/mm/yyyy", COLUMN 51, x.sueldo_actual USING "#,###,##&.&&", COLUMN 65, x.sueldo_promedio USING "#,###,##&.&&", COLUMN 80, x.salario_dia USING "###,##&.&&", COLUMN 93, x.anos_empresa USING "#&", COLUMN 99, x.meses_empresa USING "#&", COLUMN 104, x.dias_empresa USING "#&", COLUMN 110, x.dias_cesantia USING "#,##&", COLUMN 116, x.monto_cesantia USING "#,###,##&.&&", COLUMN 129, x.dias_preaviso USING "#,##&", COLUMN 135, x.monto_preaviso USING "#,###,##&.&&", COLUMN 148, x.dias_vacaciones USING "#,##&", COLUMN 154, x.monto_vacaciones USING "#,###,##&.&&", COLUMN 168, x.monto_regalia USING "#,###,##&.&&", COLUMN 181, x.monto_bonificacion USING "#,###,##&.&&", COLUMN 194, x.monto_cesantia + x.monto_preaviso + x.monto_vacaciones + x.monto_regalia + x.monto_bonificacion USING "##,###,##&.&&" #COLUMN 185, x.ultimas_vacaciones USING "dd/mm/yyyy" AFTER GROUP OF x.departamento PRINT COLUMN 1, letras.negrillas_on PRINT COLUMN 5, "Total Departamento : ", COLUMN 114, GROUP SUM(x.monto_cesantia) USING "###,###,##&.&&", COLUMN 133, GROUP SUM(x.monto_preaviso) USING "###,###,##&.&&", COLUMN 152, GROUP SUM(x.monto_vacaciones) USING "###,###,##&.&&", COLUMN 164, GROUP SUM(x.monto_regalia) USING "###,###,##&.&&", COLUMN 177, GROUP SUM(x.monto_bonificacion) USING "###,###,##&.&&", COLUMN 192, GROUP SUM(x.monto_cesantia + x.monto_preaviso + x.monto_vacaciones + x.monto_regalia + x.monto_bonificacion) USING "###,###,##&.&&" PRINT COLUMN 1, letras.negrillas_off ON LAST ROW PRINT COLUMN 1, letras.negrillas_on PRINT COLUMN 5, "Total General : ", COLUMN 114, SUM(x.monto_cesantia) USING "###,###,##&.&&", COLUMN 133, SUM(x.monto_preaviso) USING "###,###,##&.&&", COLUMN 152, SUM(x.monto_vacaciones) USING "###,###,##&.&&", COLUMN 164, GROUP SUM(x.monto_regalia) USING "###,###,##&.&&", COLUMN 177, GROUP SUM(x.monto_bonificacion) USING "###,###,##&.&&", COLUMN 192, GROUP SUM(x.monto_cesantia + x.monto_preaviso + x.monto_vacaciones + x.monto_regalia + x.monto_bonificacion) USING "###,###,##&.&&" PRINT COLUMN 1, letras.negrillas_off PRINT COLUMN 1, "Total Empleados : ",count(*) using "<,<<<", letras.comp_off END REPORT FUNCTION calcula_salarios() DEFINE pvalor,valor_total,promedio_ano_actual, promedio_ano_anterior DECIMAL(12,2) LET promedio_ano_actual = 0 LET promedio_ano_anterior = 0 LET m_valor_total = 0 # Busqueda del sueldo en la tabla actual DECLARE busca_salario CURSOR FOR SELECT SUM(a.valor),a.fecha FROM notb00008 a WHERE a.num_emp = liquida.num_emp and a.cod_mov in(1,7,4,34,40,5) AND a.valor != 0 AND a.fecha <= fecha_liquida GROUP BY 2 ORDER BY 2 DESC LET idx = 1 LET valor_total = 0 FOREACH busca_salario INTO pvalor LET valor_total = valor_total + pvalor IF ptipo_nomina = "Q" THEN IF idx = 24 THEN SELECT a.monto INTO incentivos FROM notbingresos a WHERE a.num_emp = liquida.num_emp IF incentivos IS NOT NULL THEN LET valor_total = valor_total + (incentivos * idx) LET incentivos = 0 END IF EXIT FOREACH END IF ELSE IF idx = 52 THEN EXIT FOREACH END IF END IF LET idx = idx + 1 END FOREACH IF idx = 0 OR idx IS NULL THEN LET idx = 1 END IF IF ptipo_nomina = "S" THEN IF idx = 52 THEN LET idx = idx - 1 END IF LET idx = idx /4 END IF IF ptipo_nomina = "Q" THEN LET idx = idx / 2 END IF IF idx > 0 THEN LET valor_total = valor_total / idx END IF #LET valor_total = idx #LET liquida.sueldo_promedio = promedio_ano_actual + promedio_ano_anterior LET liquida.sueldo_promedio = valor_total LET liquida.salario_dia = liquida.sueldo_promedio / 23.83 END FUNCTION FUNCTION calcula_preaviso() IF liquida.anos_empresa >= 1 THEN LET liquida.dias_preaviso = 28 ELSE IF liquida.meses_empresa >= 3 AND liquida.meses_empresa <= 5 THEN LET liquida.dias_preaviso = 7 END IF IF liquida.meses_empresa >= 6 AND liquida.meses_empresa <= 11 THEN LET liquida.dias_preaviso = 14 END IF END IF END FUNCTION FUNCTION calcula_cesantia() DEFINE fecha_anterior DATE, pase_poraqui CHAR(1) LET tiempo_h92 = 0 LET tiempo_d92 = 0 LET cesantia_h92 = 0 LET cesantia_d92 = 0 LET dias_cesantia = 0 LET meses_cesantia = 0 LET anos_cesantia = 0 LET anoc = NULL LET mesc = NULL LET diasc = NULL LET fecha_anterior = "17061992" IF liquida.fecha_ingreso < fecha_anterior THEN LET mes_ley_anterior = 6 LET ano_ley_anterior = 1992 LET anos_ley_anterior = ano_ley_anterior - YEAR(liquida.fecha_ingreso) IF mes_ingreso > mes_ley_anterior THEN LET anos_ley_anterior = ano_ley_anterior - YEAR(liquida.fecha_ingreso) - 1 LET meses_ley_anterior = mes_ingreso - 12 + mes_ley_anterior END IF LET cesantia_d92 = anos_ley_anterior * 15 LET meses_ley_anterior = mes_ley_anterior IF meses_ley_anterior < 0 THEN LET meses_ley_anterior = meses_ley_anterior * -1 END IF LET meses_cesantia = meses_ley_anterior LET anos_cesantia = liquida.anos_empresa - anos_ley_anterior LET meses_cesantia = liquida.meses_empresa IF anos_cesantia < 5 THEN LET cesantia_d92 = anos_cesantia * 21 + cesantia_d92 ELSE LET cesantia_d92 = anos_cesantia * 23 + cesantia_d92 END IF IF meses_cesantia >= 3 AND meses_cesantia <= 5 THEN LET cesantia_d92 = cesantia_d92 + 6 END IF IF meses_cesantia >= 6 AND meses_cesantia <= 11 THEN LET cesantia_d92 = cesantia_d92 + 13 END IF ELSE LET anos_cesantia = liquida.anos_empresa LET meses_cesantia = liquida.meses_empresa IF anos_cesantia < 5 THEN LET cesantia_d92 = anos_cesantia * 21 ELSE LET cesantia_d92 = anos_cesantia * 23 END IF IF meses_cesantia >= 3 AND meses_cesantia <= 5 THEN LET cesantia_d92 = cesantia_d92 + 6 END IF IF meses_cesantia >= 6 AND meses_cesantia <= 11 THEN LET cesantia_d92 = cesantia_d92 + 13 END IF END IF LET liquida.dias_cesantia = cesantia_d92 END FUNCTION FUNCTION calcula_vacaciones() DEFINE ultimas_vacaciones, ultimas_vacaciones1 DATE, dia,mes,ano INTEGER LET ultimas_vacaciones = NULL LET ultimas_vacaciones1 = NULL LET fecha_b1 = null LET dias_vacaciones = 0 LET meses_vacaciones = 0 LET anos_vacaciones = 0 SELECT MAX(fecha) INTO ultimas_vacaciones FROM notb00008 WHERE cod_mov = 36 AND num_emp = liquida.num_emp AND status_t IS NULL IF ultimas_vacaciones IS NULL THEN SELECT MAX(fecha) INTO ultimas_vacaciones FROM notb00016 WHERE cod_mov = 36 AND num_emp = liquida.num_emp AND status_t IS NULL END IF IF ultimas_vacaciones IS NOT NULL THEN SELECT a.fech_vac INTO ultimas_vacaciones1 FROM vacaciones a WHERE a.num_emp = liquida.num_emp IF pdias = 0 THEN LET liquida.ultimas_vacaciones = ultimas_vacaciones1 - 365 ELSE LET dia = DAY(ultimas_vacaciones1) LET mes = MONTH(ultimas_vacaciones1) LET ano = YEAR(ultimas_vacaciones) LET fecha_b1 = dia USING "<<<","/",mes USING "<<<","/",ano USING "<<<<" #LET ultimas_vacaciones = fecha_b1 LET liquida.ultimas_vacaciones = ultimas_vacaciones END IF END IF IF ultimas_vacaciones IS NULL THEN LET anos_vacaciones = anos LET meses_vacaciones = lmeses ELSE LET tiempo_vacaciones = (fecha_liquida - liquida.ultimas_vacaciones) IF tiempo_vacaciones >= 365 THEN LET tiempo_vacaciones = tiempo_vacaciones / 365 LET tiempoc = tiempo_vacaciones USING "&&&&.&&&" LET anoc = tiempoc[3,4] LET anos_vacaciones = anoc LET mesc = tiempoc[6,7] LET meses_vacaciones = mesc LET meses_vacaciones = meses_vacaciones / 100 * 365 IF meses_vacaciones >= 30 THEN LET meses_vacaciones = meses_vacaciones / 30 END IF ELSE LET tiempo_vacaciones = tiempo_vacaciones / 30 LET tiempoc = tiempo_vacaciones USING "&&&&.&&&" LET mesc = tiempoc[3,4] LET meses_vacaciones = mesc END IF END IF LET liquida.dias_vacaciones = 0 IF anos < 5 THEN IF anos_vacaciones > 0 THEN LET liquida.dias_vacaciones = anos_vacaciones * 14 END IF ELSE IF anos_vacaciones > 0 THEN LET liquida.dias_vacaciones = anos_vacaciones * 18 END IF END IF #DISPLAY "LIQUIDA ",liquida.dias_vacaciones CASE WHEN meses_vacaciones = 5 LET liquida.dias_vacaciones = liquida.dias_vacaciones + 6 WHEN meses_vacaciones = 6 LET liquida.dias_vacaciones = liquida.dias_vacaciones + 7 WHEN meses_vacaciones = 7 LET liquida.dias_vacaciones = liquida.dias_vacaciones + 8 WHEN meses_vacaciones = 8 LET liquida.dias_vacaciones = liquida.dias_vacaciones + 9 WHEN meses_vacaciones = 8 LET liquida.dias_vacaciones = liquida.dias_vacaciones + 10 WHEN meses_vacaciones = 10 LET liquida.dias_vacaciones = liquida.dias_vacaciones + 11 WHEN meses_vacaciones = 11 LET liquida.dias_vacaciones = liquida.dias_vacaciones + 12 END CASE # display " vacaciones ",liquida.dias_vacaciones END FUNCTION