¿Base de datos de empleados para calcular las vacaciones?

Espero me puedan ayudar tengo una base de datos de empleados donde tengo que calcular años de antigüedad y las vacaciones alguien me podría ayudar con un ejemplo

1 respuesta

Respuesta
1

Vamos, por partes. Yo te explico como se calcula la antiguedad de un empleado, luego ya es cosa tuya, en función de ella asignarle las vacaciones.

Antes de nada, como sabrás no hay ni un sólo ordenador en el mundo que trabaje con fechas. Trabajan con números. Al día 31/12/1899 se le asignó el 0, al día 01/01/1900 el 1 y así hasta hoy que estamos en el día 43918. Los años y meses son fórmulas puramente matemáticas y las horas minutos y segundos son decimales de día. Por ejemplo, en esta hora que te estoy escribiendo(20:06) realmente es 43918,83703703. Por tanto tienes que convertir los dias en años meses y dias.

Voy a tratar de detallarlo. Si tengo el formulario Empleados en que figura la fecha en que entró a trabajar, FechaAlta

Cuando pulso el botón(es para la explicación)

Entre el día de hoy y el día en que se dio de alta, realmente has transcurrido lo que ves en DifDías. Si esa cantidad la divido por 365.2425 que son, redondeando, los días que tiene un año me queda lo que ves en AñosD, es decir 29 años "enteros" y un pico de año, que en este caso sería 0,3804 de año. Si esto lo multiplico por los días que tiene un año 365.2425 me da los días "entreros" que sobras después de los 29 años, que en este caso son 139. Estos días si los divido por 30,3 que es la media de días que tiene un mes, me da lo que ves en MesesD, es decir 4 meses y un pico de mes, que en este caso es 0.5874... de mes

Si este pico de mes lo multiplico por los 30,3 días que tiene un mes me sale lo que ves en DisD, es decir, 17 días y un pico de día día que se completaría a 18 cuando fueran las 23:59:59,9999999... de la noche. Pero paro aquí y me guardo el valor entero o sea 17. Con lo que abajo puedes ver su antiguedad.

En este caso, para la explicación el código del botón sería

Private Sub Comando9_Click()
DifDias = Date - FechaAlta
AñosD = DifDias / 365.2425
AñosF = Fix(DifDias / 365.2425)
RestoDias = DifDias - Int(AñosF * 365.2425)
MesesD = RestoDias / 30.3
MesesF = Int(RestoDias / 30.3)
RestoMeses = (RestoDias / 30.3) - MesesF
DiasD = (MesesD - MesesF) * 30.3
DiasF = Int(((RestoDias / 30.3) - Int(RestoDias / 30.3)) * 30.3)
Antiguedad = AñosF & " años, " & MesesF & " meses y " & DiasF & " días"
End Sub

Lógicamente poner esto en un registro sería un rollo. Por eso, en el formulario Copia de empleados te lo simplifico

Y el código, en este caso sería

Dim AñosF As Integer, MesesF As Integer, DiasF As Integer, RestoDias As Integer
AñosF = Fix((Date - FechaAlta) / 365.2425)
RestoDias = Date - FechaAlta - Int(AñosF * 365.2425)
MesesF = Int([RestoDias] / 30.3)
DiasF = Int(((RestoDias / 30.3) - Int(RestoDias / 30.3)) * 30.3)
Antiguedad = AñosF & " años, " & MesesF & " meses y " & DiasF & " días"

Por último, vamos a suponer que tu tabla, y por tanto el formulario no tienen datos. Personalmente pondría ese código en el evento Después de actualizar del cuadro de texto FechaAlta.

Si ya tuviera datos, lo que haría, sería poner en el evento Al activar el registro del formulario el código de arriba. Así tiene la ventaja de que, por ejemplo, hoy das de alta a un empleado, y hasta dentro de un par de años no vuelves a ver el registro de ese empleado. Si simplemente hubieras guardado la antiguedad el día que lo diste de alta, te encontrarías, dos años, después con que seguiría teniendo la misma, mientras que así, cada vez que visites a ese empleado te la actualiza.

Espero no haber sido muy pesado, pero es que las fechas son complicadas de trabajar con ellas.

Hola gracias amigo solo que como puedo saber cuantos días de vacaciones le toca al trabajador de acuerdo a sus años de antigüedad te lo pido de favor ya que es ahí donde me quedo atorado

Ya te dije al principio que te indicaría como calcular la antiguedad, pero que lo de las vacaciones no. Entre otras cosas porque no tengo ni idea de como se calculan. En mi trabajo tengo un mes de vacaciones en verano y cuatro días en Navidad, sea cual sea la antiguedad. De todas formas, tiene que haber una tablas, o bien en el BOE o bien en los sindicatos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas