Base de Datos Access. Relación de tablas para controlar actividades de los empleados.

Estoy iniciando una base de datos en Access con el fin de que los trabajadores de mi departamento puedan reflejar el plan de trabajo. Tengo la Tabla 1 Trabajadores (nombre y cargo del trabajador), Tabla 2 Actividades (Actividades con fecha de inicio y terminación) y Tabla 3 funciones (funciones principales para lo que ha sido contratado). Primero: necesito que a través de un formulario número 1 cada trabajador pueda declarar sus funciones principales. Segundo: que en otro formulario número 2 cada trabajador declare su actividad con fecha y hora. Nota: Que en la tabla 2, Descripción sea un combo que permita ver de cada trabajador específico sus funciones principales (aquí cuando despliego el combo me salen todas las funciones de todos los trabajadores y solo quiero se vean las de el trabajador específico) Adjunto la relación de tablas porque estoy seguro que es ahí mi dificultad.

Respuesta
1

Según he visto tus tablas, tal y como las tienes es difícil de manejar. Yo en la segunda y tercer tabla pondría en el diseño un campo más, llamándolo Ref_"nombre del campo principal", pues así lo distingo en el futuro para su utilización, y en las relaciones cojo el id de la primera y lo relaciono con este de Ref... En la segunda y luego con la tercera, la relación es uno a infinito. De esta manera en el formulario veras que te genera tantos registros como te sean necesarios, y así luego los puedes gestionar mejor. Ya que tal y como tú lo tienes, para cada uno de la primera solo te deja uno en las demás y es seguro que tendrás informacion repetida muchas veces, aumentando el tamaño de la base innecesariamente.

Prueba y ya comentas.

2 respuestas más de otros expertos

Respuesta
1

Le propongo esta estructura y relación

TABLAS

RELACIONES

Ahora si no debe repetirse un idFuncion con un idTrabajadores puede crear un índice unico con estos 2 campos.

FORMULARIO

En este formulario al seleccionar un trabajador en el combo Descripción solo aparecen las descripciones o actividades de éste, en este caso programa el evento Después de actualizar del combo Trabajador,

Private Sub cboTrabajador_AfterUpdate()
  Dim strSQl As String
  strSQl = "SELECT Actividades.idActividad" & vbCrLf
  strSQl = strSQl & "           , Funciones.Descripcion" & vbCrLf
  strSQl = strSQl & "           , Actividades.idTrabajadores" & vbCrLf
  strSQl = strSQl & "        FROM Funciones " & vbCrLf
  strSQl = strSQl & "  INNER JOIN Actividades " & vbCrLf
  strSQl = strSQl & "          ON Funciones.idFuncion" & vbCrLf
  strSQl = strSQl & "           = Actividades.idFuncion" & vbCrLf
  strSQl = strSQl & "       WHERE  Actividades.idTrabajadores =" & Me.cboTrabajador & ";"
  Me.cboDescripcion.RowSource = strSQl
End Sub

Esta es una idea, si quiere el ejemplo lo puede solicitar a [email protected]

No se deje confundir con tanta teoría barata que no lleva a ninguna solución. De acuerdo con las tablas que adicionó y su nueva explicación le he preparado este informe.

TABLAS

RELACIONES

FORMULARIOS

Con base en este diseño puede hacer consultas y mejoras. Si quiere el ejemplo lo puede solicitar a [email protected] 

Respuesta
1

Si un trabajador ha sido contratado para unas determinadas funciones ¿qué sentido tiene el formulario numero 1?... sus funciones serán las del contrato (o el contrato es 'papel mojado').

En una tabla los trabajadores, en otra las funciones (todas las funciones)

En una tercera tabla se crean los pares de trabajador + función (todos los trabajadores tantas veces como funciones puedan serle asignadas esto es:
Un registro con Id Actividad + Id_Trabajador + Id_Funcion

De esta tercera tabla se puede obtener que actividades pueden serle asignadas a un trabajador (se filtra por Id_Trabajador) o que trabajadores hay disponibles para una actividad determinada (se filtra por ID_Funcion).

Me explico mejor. Creo yo que debo tener un formulario 1 donde se declare por cada trabajador las FUNCIONES PRINCIPALES por las que ha sido contratado. Este formulario serviría también para viisualizar si fuera necesario en algún momento la carga de trabajo de determinado empleado e incluso modificarla. Este formulario es de uso de la administración.

Para el empleado debo tener un formulario 2 donde cada trabajador con la frecuencia que decee actualizar llame  através de un combo en el campo ACTIVIDADES cuál de las que son de su responsabilidad le toca cumplir en ese mes. Incluso permitiría que el trabajador pueda hacer la distribución (planificación) de trabajo de todo el año distribuyendo las actividaes.

Así tengo estructuradas mis tablas pero por más que busco la relación correcta que me permita obtener ambos formularios no doy con ello.

Se está planteando bajo el prisma de utilizar formularios, y siempre se utilizaran formularios para manipular los datos, pero los datos se han de estructurar en las tablas y sus adecuadas relaciones.

El esquema planteado es fácil de verificar si se adapta a lo que ya este creado (o a la actividad de la empresa).

Es una nueva tabla que utilizara de la tabla trabajadores el ID del trabajador y de la tabla funciones el ID de la función a lo que se añade el ID de la propia tabla (el clásico auto numérico) que nos permitirá asignar el conjunto de trabajador + actividad como tarea utilizando el ID.

Para asignar tareas se necesita más información, por ejemplo la duración de las mismas, con el fin de evitar que el mismo trabajador pueda ser asignado el mismo día y hora a más de una tarea y permitirá verificar si (para una tarea que requiera tres trabajadores) se han asignado los tres operarios.

Con la estructura de tablas planteada se puede hacer esa asignación y crear los calendarios sin mayor problema, a quien se encargue de la planificación se le darán los permisos adecuados, que pueden ser totales o parciales en base al organigrama de la empresa.

Todo esto asumiendo que la planificación deberá hacerla quien tenga la visión global del conjunto y no a dejarla a capricho de los trabajadores, estos podrán expresar sus preferencias y si la gerencia las acepta, modificar las funciones (eso evitaría por ejemplo que la maquinaria la manejasen aquellos que no tengan certificación en vigor, aunque todos conozcan cómo funciona).

Por cierto, en los formularios se mostrarían (en base a los IDs) los datos asociados, para ello están las consultas y las relaciones entre tablas para obtener el origen de datos (del formulario y de los posibles combos).

Esta tabla no sustituye (ni lo intenta) a la que se utilice como agenda o calendario, solo proporciona un dato para ella y permite un mejor control (sobre todo en el caso de necesitar reasignar datos) y -añadiendo un campo más- permite calificar a cada pareja de trabajador-tarea con un valor para que el conductor de maquinaria quede de primero en la lista de conductores de máquinas y los de reparto en la de furgonetas.

Eso sí que podría ser algo modificable a petición del trabajador, si puede hacer esas dos -y posiblemente más- tareas no concurrentes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas