Control vacaciones trabajadores

Tengo una base de datos de trabajadores, en la que tengo una tabla con los datos de los trabajadores y otra tabla con permisos, en esta última está especificado que tipo de permiso (vacaciones, asuntos propios, maternidad etc...). Luego un informe (previo de una consulta) donde me pide el código del trabajador y el código del permiso y así sacárselo impreso. Mi pregunta es la siguiente como puedo hacer para que si por ejemplo de días de asuntos propios solo puede pedir tres, (como los puede solicitar en cualquier momento y no todos a la vez), que si me pide el cuarto ya no me deje dárselo pues no hay nada más que tres.

1 respuesta

Respuesta
1

Lo que pides es posible realizarlos pero si trabajas por medio de formularios, si trabajas directamente en la tabla tendrás que controlarlo "manualmente".

Te explico cómo se haría, haciendo un par de suposiciones sobre tu BD:

La tabla trabajadores tiene un campo que identifique de manera inequívoca a cada uno (bien sea un campo autonumérico, numérico o por ejemplo el DNI, que llamaré IDTrabajador), y este campo se relaciona con otro campo de la tabla permisos.

En la tabla permisos, supondré que hay estos campos: trabajador (relacionado con Trabajadores), tipoPermiso, Fecha.

Tienes un formulario sobre la tabla permisos, donde eliges el trabajador, el tipo de permiso, las fechas.

En el cuadro de texto (o cuadro combinado) en el que elijes el tipo de permiso, sacas sus propiedades, y en la pestaña Eventos, en el evento Antes de Actualizar, le das al botón de los 3 puntos que aparece a la derecha, y elijes generador de código. En la ventana que se abre, escribes esto:

Dim rst as Recordset

Dim miSQL as String

Dim numPermisos as Integer

miSQL="SELECT * FROM Permisos WHERE IDTrabajador='" & Me.IDTrabajador & "' tipoPermiso='Asuntos Propios' AND Year(Fecha)=" & Year(Date)

Set rst=CurrentDb.OpenRecordset(miSQL,dbOpenDynaset)

If rst.RecordCount=0 then

numPermisos=0

Else

rst.MoveLast

numPermisos = rst.RecordCount

End if

rst.Cose

If numPermisos>3 Then

MsgBox "Ya no le quedan días de asuntos propios disponibles",vbOkOnly

Cancel =True

Es decir, antes de actualizar el valor del campo, crea una consulta en la que se selecciona el trabajador, y los días de Asuntos propios que solicitó en el año en curso. Si no solicito ninguno, la variable numPermisos es 0, si no es el numero que lleva solicitado.

A continuación se compara numPermisos con 3, de tal forma que si es mayor, nos sale un mensaje de aviso y se cancela la acción.

Ya me dirás si te sirve.

NumPermisos en que tabla iría, pues me sale error en rst.Cose

Disculpa, el error es por un defecto de sintaxis: es rst. Close

NumPermisos no va en ninguna tabla, es una variable que se usa para saber cuantos días de permiso lleva en el año.

Mira he puesto lo que me has dicho, al principio esta puesto

Private Sub Tipo_Permiso_BeforeUpdate(Cancel as integer),y al final he puesto

End If

End Sub, pues me lo iva pidiendo. Bueno pues he arreglado lo de Close y ahora me dice error de sintexis(falta operador)en la expresión de consulta 'IDTrabajador = '1' tipo permiso='Asuntos Propios' AND Year(Fecha)= 2013

Vale, parece que ID trabajador es un numero, por tanto la SQL será así:

miSQL="SELECT * FROM Permisos WHERE IDTrabajador=" &
Me.IDTrabajador & " tipoPermiso='Asuntos Propios' AND Year(Fecha)="
& Year(Date)

Si aun no te va, mandame una copia de la BD, sin los datos de los trabajadores ( o con algún dato inventado) y la miro. Puedes subirla a www.filebig.net o similar, y me pegas el enlace de descarga por aquí.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas