none
Determinar Turno de una fecha RRS feed

  • Pregunta

  • Hola:

    Tengo el siguiente dilema. Estoy haciendo una aplicación que me debe controlar los turnos en los que se está. En principio tengo tres turnos: Mañana, Tarde y Noche.

    En una tabla de la base de datos tengo almacenada la hora de comienzo de cada turno y su duración en minutos:

    Id   Turno     Comienzo  Duracion

    1    Mañana    6:00         480

    2   Tarde        14:00       480

    3   Noche       22:00        480

    Bien lo que quiero hacer es poder determinar en base a los datos de esa tabla en que turno me encuentro, saber en que turno estaba una determinada fecha y saber también si una fecha corresponde por ejemplo a un turno de mañana, si es del turno de mañana de oy, o el de ayer o el de mañana.

    La complicacion está en que el turno de noche abarca dos días, y que ahora tengo 3 turnos pero podría tener 4 turnos, 5,etc. Mi idea es hacerlo con VBA, aunque no sé como plantearlo. Obtener los datos de la BD no es problema.

    sábado, 11 de septiembre de 2010 10:33

Respuestas

  • 1. Con la función Hour() puedes recuperar la hora de una fecha, ya sea la guardada en un campo o la del sistema (Now()).

    2. Si sólo es un registro, puedes recuperar el dato guardado en un campo con una función de dominio como DLookup, DMax,... Luego puedes aplicar una función como Hour() para recuperar la hora, o si es la fecha: Day(), Month(), Year(), o aplicar la función Format() para recuperar los datos necesarios y hacer la comparación.

    lunes, 13 de septiembre de 2010 15:32

Todas las respuestas

  • Para hacer esto necesitarás saber, además de la hora del turno, la fecha del turno. Una vez lo sepas, puedes usar las funciones de fecha y hora de las que dispones en Access:

    - DateAdd

    - Hour

    Y tener en cuenta que en un campo donde se guardan las fechas y horas, Access lo almacena internamente como un número con decimales, donde la parte entera son los días transcurridos desde una determinada fecha, y la parte decimal son las horas, minutos y segundos que han pasado desde la medianoche de ese día.

    sábado, 11 de septiembre de 2010 15:45
  • En mi caso, los turnos son los mismos todos los dias. Es decir hay turno de mañana tarde y noche, que son iguales todos los dias. Para que te hagas una idea lo que uiqero hacer es:

    1. Saber segun la hora en ese momento en que turno estoy, en base a los turnos definidos en la tabla.

    2. Obtener la fecha de Ultimo guardado de un determinado registro de otra tabla y determinar si se guardo en el mismo turno en el que estoy y si es del mismo dia para incrementar un contador o de un dia anterior para resetearle.

    La finalidad es llevar un contador de entradas por turno. (He de hacerlo asi porque no puedo consultar el historial)

    domingo, 12 de septiembre de 2010 15:59
  • 1. Con la función Hour() puedes recuperar la hora de una fecha, ya sea la guardada en un campo o la del sistema (Now()).

    2. Si sólo es un registro, puedes recuperar el dato guardado en un campo con una función de dominio como DLookup, DMax,... Luego puedes aplicar una función como Hour() para recuperar la hora, o si es la fecha: Day(), Month(), Year(), o aplicar la función Format() para recuperar los datos necesarios y hacer la comparación.

    lunes, 13 de septiembre de 2010 15:32
  • Bueno ya lo he resuelto. Lo que he hecho es determinar el turno en un Select Case y comparar la fecha guardada con la fecha de comienzo del turno que corresponde, y si es menor esque ya ha pasado el turno.
    lunes, 20 de septiembre de 2010 15:51