2011-08-19 12 views
7

Actualmente, nuestra programación de empleados para ~ 800 empleados en una empresa 24/7 se maneja con libros de Excel. Necesito trasladar toda la programación a una base de datos de empleados de Access que diseñé y que hemos estado utilizando durante años. (NOTA: Sé que Access no es la plataforma ideal para esto, pero es lo que tengo.)Base de datos de programación (Base Schedule + Exceptions)

Cada empleado tiene un horario base, como las 2:00 a.m. de inicio con Wed/Thu off. el horario de un empleado por cualquier semana será su horario de base dotado de excepciones tales como:

  • tiempo libre pide
  • conmutación con otro empleado por un día
  • permisos de ausencia (básicamente otra forma de Shift tiempo libre)
  • los cambios de horario en base a las necesidades de la empresa realizados por un administrador de programación

la base de datos sólo necesita almacenar la programación de base y de alguna manera mostrar schedu de una semana determinada le. Es no necesita cualquier lógica avanzada como la programación en función de la disponibilidad.

Veo algunas formas de implementar esto. El primero que me vino a la mente fue almacenar la programación base y luego generar dinámicamente la programación de una semana determinada según sea necesario al combinar la programación base con tablas basadas en las excepciones anteriores (tiempo de inactividad, interruptores, etc.). Sin embargo, no puedo ver cómo almacenar el calendario base y cómo fusionar la base con las excepciones para generar un cronograma. Creo que una tabla como baseSchedule (PKScheduleID, FKEmployeeID, DayOfWeek, StartTime) pero no estoy seguro.

Otro método sería generar programas semanales en una tabla, por ejemplo, utilizando el método "tres tablas Kimball Star" descrito aquí: http://www.damirsystems.com/?p=466. Básicamente, crea una tabla llena de fechas y tiene una relación de muchos a muchos con los empleados para definir un horario. No me gusta ese método por muchas razones, como la necesidad de verificar/modificar esa tabla en el nivel de aplicación cada vez que se agrega tiempo libre, etc. y la necesidad de "generar" un nuevo horario en la tabla. Además, es posible que esto aumente a más de 2,000 empleados y me temo que el pobre Access explotará en una bola de fuego con un récord para cada empleado por cada día.

¿Alguien tiene alguna idea de diseño para implementar el método base de programación + modificadores? Me encantaría generar horarios sobre la marcha con consultas solamente, pero me siento cómodo con el uso de VBA si es necesario.

Gracias

Editar 08/19/11 16:30: Creo que voy a ir con algo muy similar a la de bluefeet respuesta. A continuación se muestra el diseño me burlé en una base de datos en blanco:

Design

Cada empleado tendrá un registro en la tabla de base para cada día de la semana con una hora de inicio y el número de horas que están programados trabajar. También hay una tabla de Excepciones que enumera las modificaciones al cronograma con una fecha, un empleado y su turno nuevo.

Para las formas nivel de aplicación e informes Voy a tirar de la base de horario en un conjunto de registros con una consulta muy descuidado que da salida a algo como:

Name Mon  Tue  Wed  Thu  Fri  Sat  Sun 
Alice 6:00 PM 6:00 PM Off  Off  2:00 PM 2:00 PM 2:00 PM 
Bob 4:00 PM 4:00 PM 4:00 PM 4:00 PM Off  Off  4:00 PM 

Luego, en VBA, también a tirar las excepciones para un rango de fechas (una semana) en un conjunto de registros. Voy a recorrer el conjunto de registros de excepciones, modificando el conjunto de registros base (desde arriba) a medida que avanzo. Luego estableceré el formulario/informe para usar el conjunto de registros modificado. Es un poco poco elegante, pero hará el trabajo lo suficientemente bien.

Si alguien tiene alguna idea sobre cómo combinar las tablas Base y Excepciones con un resultado similar al anterior utilizando solo consultas y sin VBA, por favor avíseme.

Gracias de nuevo

Respuesta

1

Mi sugerencia sería tener una tabla Base con los Programas del empleado, luego tener una tabla con las excepciones. Tengo algo similar en una aplicación de calendario. Tengo una tabla de empleados que contiene sus horarios normales, entonces tengo una tabla separada que contiene las excepciones - días de descanso, salir temprano, formación, etc.

EmployeeTable 
PK - EmployeeID 
EmployeeName 
Schedule fields - starttime, endtime, days, etc 

Employee_ExceptionTable 
PK - EmployeeId 
ExceptionTypeId 
PK - ExceptionStartDate 
ExceptionEndDate 

ExceptionTypeTable 
ExceptionTypeId 
ExceptionName - Vacation, Leave Early, Training 

Desde el Employee_ExceptionTable tiene una clave de EmployeeId y ExceptionStartDate este solo permitirá una excepción por día, pero estas son excepciones al cronograma base. Como dije, tengo algo similar en mi aplicación que monitorea a unas 100 personas y parece funcionar. Este podría ser un punto de partida para ti.

+0

¿Qué es el horario en la tabla de empleados (tipo de campo)? – Andrey

+0

Bueno, podría tener 2 campos para el inicio, el tiempo de finalización. Podrías tener campos de días. pero esta información estaría en la tabla de empleados. – Taryn

0

supongo que esta es una manera de hacerlo:
Tienes 3 tablas:
empleados (employee_id PK), planificador (EMPLOYEE_ID FK) y TimeOff (employee_id FK)

planificador
fecha
employee_id (FK de la tabla de empleados)
hora_inicial
hora_final
day_off
comentarios

Sus empleados tabla tendrá información básica de los empleados.

planificador tabla tendrá los datos schelude así como bandera para day_off (serie 1 si ese es el día libre) y un campo de comentarios para cualquier tipo de comentario.

Si day_off está establecido en 1, tendrá una descripción de day_off en la tabla timeOff.
timeOff mesa puede diseñar cualquier forma que desee. Tendrá una fecha para que sepa qué día es. Puede tener un campo de razón donde 1 - día de vacaciones, 2 - día de enfermedad, 3 - día personal, 4 - cambio con otro empleado y así sucesivamente. Puede tener un campo de comentario aquí, así como employee_id de la persona con la que se ha cambiado el horario con

+0

Al crear la tabla 'scheduler' de esa manera, ¿no necesitará una fila por empleado por día? – JNK

+0

Sí, lo harás. Entonces serán 800 empleados * 365 registros aproximadamente = 292000 registros por año, lo que no debería ser un gran problema. – Andrey

+0

Parece que está proponiendo hacerlo manualmente, y por eso me preocupaba. – JNK