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:
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
¿Qué es el horario en la tabla de empleados (tipo de campo)? – Andrey
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