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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 José Mª Fueyo
16/11/2011 - 09:17 | Informe spam
Hola
El principal problema que veo, es como relacionar cada entrada con
cada salida. ¿Que ocurre, por ejemplo, sí un usuario se olvida de
fichar a la salida o a la entrada? ¿le sacas más de 24 horas de
jornada? ¿y sí realmente han pasado esas 24 horas?
Salu2,

José Mª Fueyo
-
MS MVP Access
Respuesta Responder a este mensaje
#3 Luciano
17/11/2011 - 13:42 | Informe spam
Hola Juan, gracias por tu respuesta!
Te hago una pregunta, donde tengo que colocar el código que me
indicaste? Dentro de la consulta o tengo que crear una Macro?
No quiero abusar de tu tiempo y buena voluntad, si puedes me lo
indicas.

Gracias de antemano!

Luciano

On 15 nov, 03:45, Juan Español wrote:
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 noticiasnews:
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
Respuesta Responder a este mensaje
#4 Luciano
17/11/2011 - 13:45 | Informe spam
Hola José:

Gracias por tu observación. Te comento que actualmente el software del
reloj me permite cargar fichadas que no se han realizado. De todas
maneras, mi idea es generarle un Formulario para que puedan hacer las
correcciones dentro de la base de datos.

Si te interesa ver bien la información puedo subir la base de datos
comprimida para que veas la tabla con datos reales.

Gracias de antemano.

Luciano
On 16 nov, 05:17, José Mª Fueyo wrote:
Hola
El principal problema que veo, es como relacionar cada entrada con
cada salida. ¿Que ocurre, por ejemplo, sí un usuario se olvida de
fichar a la salida o a la entrada? ¿le sacas más de 24 horas de
jornada? ¿y sí realmente han pasado esas 24 horas?
Salu2,

José Mª Fueyo
-
MS MVP Access
Respuesta Responder a este mensaje
#5 Juan Español
18/11/2011 - 00:36 | Informe spam
Hola Luciano:
La idea es que tú modificases el código de la primera sentencia SQL para
donde pone Tabla1,
tú pusieras el nombre real de tu Tabla de datos.
(ojo el nombre de la Tabla no el nombre del fichero de la base de datos)
Pero para no liarte más es mejor que subas el fichero como le indicas
a Jose Mª Fueyo y así será más fácil.
Mi email es

Saludos.-


"Luciano" escribió en el mensaje de noticias
news:
Hola Juan, gracias por tu respuesta!
Te hago una pregunta, donde tengo que colocar el código que me
indicaste? Dentro de la consulta o tengo que crear una Macro?
No quiero abusar de tu tiempo y buena voluntad, si puedes me lo
indicas.

Gracias de antemano!

Luciano

On 15 nov, 03:45, Juan Español wrote:
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
noticiasnews:
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
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida