Control horario en access

Necesito crear un control horario tipo maquina de fichar.
Tengo creado una bd con una tabla con campos Id, fechaentradamañana, fechasalidamañana, fechaentradatarde, fechasalidatarde, fechaentrada1, fechasalida1, fechaentrada2, fechasalida2.
Los campos fechaentrada1, salida1, entrada2 y salida2 van a tener valores por defecto que son 09:00, 14:00; 16:00 y 19:00, lo otros campos los tendré que rellenar yo cuando entre o salga del trabajo.
Minutosentrada, minutossalida, minutosentrada2 y minutossalida2 son campos que calculan la diferencia en minutos entre la fechaentrada1 y fechaentradamañana y con salida igual
Lo que quiero hacer es en que me calcule si trabajo las horas o me paso de horas (son pelas al final), como lo tengo hecho no lo hace bien, pues no me calcula bien los minutos, por ejemplo:
Fechaentrada1 fechaentradamañana fechasalida1 fechasalidamañana
09:00 09:01 14:00 13:58
En esta situación me tendría que calcular en el campo minutosentrada= 3 porque he trabajado 3 minutos menos de la jornada
09:00                       08:57                        14:00                     14:05
En este caso he trabajado 8 minutos más de la cuenta, es decir, me he pasado de la jornada
Al final de mes tengo que saber si he trabajado más minutos o menos de lo que marca la jornada laboral...¿cómo lo puedo hacer?

4 Respuestas

Respuesta
1
Bien,
¿Es esto? Sustitute "Hora inicio" por el nombre del campo
(Formato([Hora inicio]-#09:00:00#;"hh")*60)+(Formato([Hora inicio]-#09:00:00#;"nn"))+(Formato([Hora inicio]-#09:00:00#;"ss")/60)
Gracias por tu ayuda, ¿pero no lo entiendo... me lo puedes explicar?
Bien,
Create una consulta de la tabla en donde tienes las fechas de entrada.
Y le generas los campos siguientes:
DiferenciaEntradaMañana: (Formato([fechaentradamañana]-#09:00:00#;"hh")*60)+(Formato([fechaentradamañana]-#09:00:00#;"nn"))+(Formato([fechaentradamañana]-#09:00:00#;"ss")/60)
Con esto tienes los minutos de diferencia respecto la hora de entrada 9:00, y modificando un poco el código tienes otra.
DiferenciaSalidaMañana: (Formato([fechasalidamañana]-#14:00:00#;"hh")*60)+(Formato([fechasalidamañana]-#14:00:00#;"nn"))+(Formato([fechasalidamañana]-#14:00:00#;"ss")/60)
Ya había probado con un código parecido al tuyo, pero no me funcionaba y el tuyo tampoco porque access no se de que manera calcula las diferencias pero le da igua que sean dos minutos más o menos... el programa te calcula sólo la diferencia, por ejemplo en tu código si yo le pongo estos datos (por defecto la hora de entrada es 09:00 y salida 14:00:
EntradaMañana
09:02 ... access me calcula la diferencia con respecto a 09:00 y me da 2
08:58 ... access me calcula la diferencia con respecto a 09:00 y me da 2 (me debería dar -2)
Este es el problema que tengo... y no se cómo solucionarlo
Igual pasa con las horas de salida...
Bien,
Pues entonces le forzaremos el negativo:
DiferenciaEntradaMañana: SiInm([fechaentradamañana]<#09:00:00#; "-" & (Formato([fechaentradamañana]-#09:00:00#;"hh")*60)+(Formato([fechaentradamañana]-#09:00:00#;"nn"))+(Formato([fechaentradamañana]-#09:00:00#;"ss")/60);(Formato([fechaentradamañana]-#09:00:00#;"hh")*60)+(Formato([fechaentradamañana]-#09:00:00#;"nn"))+(Formato([fechaentradamañana]-#09:00:00#;"ss")/60))
De esta manera mirará si la fecha está antes de las 9:00 y si es así le pondrá un - delante
Respuesta
1
Si la tabla la denominamos TblPicadas y los campos como me indicas, abre una consulta y pulsa vista SQL en VER e introduce el siguiente código:
SELECT TblPicadas.fechaentrada1, TblPicadas.fechaentradamañana, TblPicadas.fechasalida1, TblPicadas.fechasalidamañana, Hour(([fechasalida1]-[fechaentrada1]))*60+Minute(([fechasalida1]-[fechaentrada1])) AS MinutosJornada, Hour(([fechasalidamañana]-[fechaentradamañana]))*60+Minute(([fechasalidamañana]-[fechaentradamañana])) AS MinutosTrabajados, [MinutosTrabajados]-[MinutosJornada] AS Diferencia
FROM TblPicadas;

Lo que hago es calculo los minutos que debe de durar la jornada y los resto a los que realiza el operario. Con esto creo que te valdría, aunque si quisiéramos rizar el rizo la estructura perfecta, si bien más complicada, de un registro de fichadas sería la siguiente:
TblTrabajador
IdTrabajador Numérico clave principal
Nombre Texto
Apellido1 Texto
Apellido2 Texto
Etc...
TblJornadas
IdJornada Autonumérico clave principal
IdTrabajador Numérico
Fecha Fecha
Hora Fecha(Hora)
IdTipoFichada Numérico
TblTipoFichada
IdTipoFichada Numérico clave principal
TipoFichada Texto (Entrada o Salida)
Turno Texto
HoraPredeterminada Fecha(Hora)
En esta tabla incorporamos
1 Entrada Mañana 09:00
2 Salida Mañana 14:00
3 Entrada Tarde 16:00
4 Salida Tarde 19:00
Crearíamos un formulario donde el trabajador en un cuadro incorpora su identificador (secreto) y en un subformulario con el campo Idtrabajador vinculado al principal, se irían incorporando las distintas fichadas del día basadas en una consulta que relaciona TblJornada y TblTipoFichada a través del IdTipoFichada.
Respuesta
1
Necesitas utilizar la función datediff, que calcula la diferencia entre dos fechas..
Luego necesitas mínimo 3 campos, dos tipo fecha distintas y una tercera tipo fecha que sera el resultado.
Para no cargar demasiado este texarea, te pongo el enlace donde lo vas a ver más claro.
Espero haberte ayudado.
http://office.microsoft.com/es-es/access/HA012288113082.aspx
Hola, no entiendo como utilizarla ya que la función DateDiff es para calcular fechas y yo quiero horas (minutos)... el problema que tengo es que no me hace el cálculo bien cuando trabajo menos horas pues la fecha real es mayor que la fechaentrada por lo que me da la vuelta a todas las horas hasta llegar a la fecha real, no me calcula que si entro a las 08:58 y la hora de entrada son 09:00 entonces me debería calcular 2 minutos y no 23 horas y 58 minutos y al revés si entro a las 09:05 y la entrada es a las 09:00 aquí si me lo hace bien y me dice que son 5 minutos pues la hora a la que entro es mayor que la hora real de entrada...¿cómo solucionarlo?
Gracias.
Si el calculo que utilizas para calcular la diferencia de minutos es
"fechaent-fechareal=diferencia osea fecha entrada restado a fecha real"
(Lo pongo entre comillas ya que no es una resta sino una diferencia) tendrmeos dos posibilidades:
Si fecha real<fecha entrada no deberia dar problemas ya que da una diferencia positiva
Si fecha real>fecha entrada puede que entienda que has pasado al día siguiente, con lo que antes de dar ese resultado, deberías hacer
resultado= 1440-diferencia
Ya que 1440 son los minutos que tienen 24 horas (1 día)
No se si me he explicado bien. Espero que te sirva, o al menos te de una idea
Respuesta
1
Comentarte que access realmente suele guardar internamente tanto las fechas como las horas en formato de numero doble.
Lo que tienes que hacer es comparar por cada registro las horas con las horas y los minutos con los minutos y tener en cuenta que si el minuto no pasa de 59 has trabajado por minutos menos de la jornada y si los pasa has trabajado más, sumando y restando las diferencias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas