Calculo de horas trabajadas por empleados

11/11/2011 - 17:29 por Luciano | Informe spam
Buenas tardes comunidad:
No soy experto en Access y estoy tratando de hacer unos cálculos en en
una base de datos en la que se almacenan los siguientes datos
provenientes de un Reloj de huellas dactilares:

La base se llama Checkinout y contiene los siguientes campos:

Logid (entero)
Userid (texto)
CheckTime (Fecha/hora)
CheckType (Texto)

El reloj almacena en la tabla la siguiente información:

Logid Usuerid CheckTime CheckType
174 1 2011-11-10 07:54:48 I
175 2 2011-11-10 07:55:31 I
176 3 2011-11-10 07:57:26 I
177 4 2011-11-10 07:59:48 I
178 3 2011-11-10 14:03:12 O
179 2 2011-11-10 14:55:31 O
180 4 2011-11-10 15:57:26 O
181 1 2011-11-10 19:58:24 O

Los datos están organizados por el Logid, el CheckType indica con "I"
si el empleado Ingresa y con "O" si se retira del trabajo.
También hay empleados que entran a la tarde de un día y salen a la
madrugada del día siguiente.
Problema:
No encuentro la manera de hacer los cálculos de horas trabajadas para
poder realizar un informe por empleado con esa información.

Analizando los datos anteriores puedo ver que el empleado con Userid=1
el 10/11/2011 trabajó 12 Horas. Este cálculo necesito poder hacerlo
desde Access 2003.

Espero que me puedan dar una idea de como hacerlo.

Muchas Gracias

Luciano
 

Leer las respuestas

#1 Juan Español
15/11/2011 - 07:45 | Informe spam
Hola Luciano:
Una solución sencilla y fácil de entender es:
Creamos dos consultas:
Una consulta de selección llamada CONSULTA1
con esta sentencia SQL
Ojo a la tabla que contiene los datos yo la llamo Tabla1 cambia esto por el
nombre real de tu tabla

SELECT Tabla1.Logid, Tabla1.Userid, Tabla1.CheckTime, Tabla1.CheckType,
[CheckTime]*([CheckType]="I")-([CheckTime]*([CheckType]="O")) AS ctr
FROM Tabla1;

Otra consulta de selección que la puedes llamar como quieras
que es la que te dará los datos
con esta sentencia SQL

SELECT CONSULTA1.Userid, Sum(CONSULTA1.ctr) AS SumaDectr
FROM Tabla1 INNER JOIN CONSULTA1 ON Tabla1.Logid=CONSULTA1.Logid
GROUP BY CONSULTA1.Userid
HAVING (((CONSULTA1.Userid)=[QUE EMPLE]));

Bueno en cuanto veas el diseño de las consultas verás dónde está el "truco"
convendría poner un control previo al cálculo para que la cantidad de
registro con CheckType
= I es la misma que CheckType = O ( del empleado a calcular)
pues si no, el empleado está trabajando y el cálculo será negativo o la base
está corrupta.
El poner un criterio al campo CheckTime es cosa trivial que dejo a tu
necesidad.

Saludos.-


"Luciano" escribió en el mensaje de noticias
news:
Buenas tardes comunidad:
No soy experto en Access y estoy tratando de hacer unos cálculos en en
una base de datos en la que se almacenan los siguientes datos
provenientes de un Reloj de huellas dactilares:

La base se llama Checkinout y contiene los siguientes campos:

Logid (entero)
Userid (texto)
CheckTime (Fecha/hora)
CheckType (Texto)

El reloj almacena en la tabla la siguiente información:

Logid Usuerid CheckTime CheckType
174 1 2011-11-10 07:54:48 I
175 2 2011-11-10 07:55:31 I
176 3 2011-11-10 07:57:26 I
177 4 2011-11-10 07:59:48 I
178 3 2011-11-10 14:03:12 O
179 2 2011-11-10 14:55:31 O
180 4 2011-11-10 15:57:26 O
181 1 2011-11-10 19:58:24 O

Los datos están organizados por el Logid, el CheckType indica con "I"
si el empleado Ingresa y con "O" si se retira del trabajo.
También hay empleados que entran a la tarde de un día y salen a la
madrugada del día siguiente.
Problema:
No encuentro la manera de hacer los cálculos de horas trabajadas para
poder realizar un informe por empleado con esa información.

Analizando los datos anteriores puedo ver que el empleado con Userid=1
el 10/11/2011 trabajó 12 Horas. Este cálculo necesito poder hacerlo
desde Access 2003.

Espero que me puedan dar una idea de como hacerlo.

Muchas Gracias

Luciano

Preguntas similares