Foros del Web » Programación para mayores de 30 ;) » .NET »

Ayuda Fechas

Estas en el tema de Ayuda Fechas en el foro de .NET en Foros del Web. Hola saludos.. he realizado un sofware que registra la Hora de Entrada y la hora de Salida de un empleado, el programa calcula bien las ...
  #1 (permalink)  
Antiguo 14/07/2010, 08:45
 
Fecha de Ingreso: mayo-2010
Mensajes: 49
Antigüedad: 14 años
Puntos: 1
Ayuda Fechas

Hola
saludos..

he realizado un sofware que registra la Hora de Entrada y la hora de Salida de un empleado, el programa calcula bien las horas laboradas por el empleado, el problema es cuando un empleado entra y sale varias al dia el programa calcula las horas por cada entrada y salida........un ejemplo

Tomasito==> FechaEntrada: 2010-07-14 09:00 FechaSalida: 2010-07-14 15:00

el programa calcula que Tomasito trabajo 6 horas

como calculo si entra y sale varias veces al dia....ej:

Tomasito ==> FechaEntrada: 2010-07-14 06:00 FechaSalida: 2010-07-14 10:00

FechaEntrada: 2010-07-14 12:00 FechaSalida: 2010-07-14 14:00

nesecito una idea

gracias de antemano (si puden explicarlo en c# seria mejor)
  #2 (permalink)  
Antiguo 14/07/2010, 08:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda Fechas

Eso es fácil de hacer en la base de datos, vía SQL...
¿Qué estás usando?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/07/2010, 08:56
Avatar de Porlachucha  
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: Ayuda Fechas

Cita:
Iniciado por J0rg3M4r10 Ver Mensaje
Hola
saludos..

he realizado un sofware que registra la Hora de Entrada y la hora de Salida de un empleado, el programa calcula bien las horas laboradas por el empleado, el problema es cuando un empleado entra y sale varias al dia el programa calcula las horas por cada entrada y salida........un ejemplo

Tomasito==> FechaEntrada: 2010-07-14 09:00 FechaSalida: 2010-07-14 15:00

el programa calcula que Tomasito trabajo 6 horas

como calculo si entra y sale varias veces al dia....ej:

Tomasito ==> FechaEntrada: 2010-07-14 06:00 FechaSalida: 2010-07-14 10:00

FechaEntrada: 2010-07-14 12:00 FechaSalida: 2010-07-14 14:00

nesecito una idea

gracias de antemano (si puden explicarlo en c# seria mejor)
?? y cual es el problema? usa el mismo calculo y sumas las horas resultantes...
tienes registradas las horas en una base de datos?. puedes identificar si la marca de tiempo es de entrada o salida? en ese caso, solo debes rescatar los registros por usuario en forma cronologica, y por cada marca, calcular la diferencia de tiempo de cada segmento. adicionalmente vas sumando los segmentos de tiempo, y tienes las horas que trabajo en un dia... debes tener cuidado cuando hay marcas que comienzan en un dia A, y terminan un dia B (ejemplo personas que trabajan en el turno de noche), ya que en este caso, el calculo debe involucrar la fecha.
uno de los mejores metodos para calcular diferencias entre fechas, es calcularlo en la base de datos, mediante un query que te devuelva los datos ya calculados.
ejemplo :

abs(convert( decimal (5,2), datediff(minute, convert(datetime, substring(convert(char(23),inghorsal), 12, 8)), convert(datetime, substring(convert(char(23),inghorent), 12, 8))) / 60.0)) as 'Total_Horas',

con eso calculas en el SP, las horas entre 2 fechas.

espero te sirva
Plch
__________________
Nada mas patetico que "detestar" a Intel o Microsoft o Windows o Apple ... apuesto que eres el tipico teton espinilluo y pajero que usa Linux para sentirse capo ...
  #4 (permalink)  
Antiguo 14/07/2010, 08:59
Avatar de dmassive  
Fecha de Ingreso: febrero-2002
Ubicación: Paraná - Entre Ríos - Argentina
Mensajes: 279
Antigüedad: 22 años, 2 meses
Puntos: 7
Respuesta: Ayuda Fechas

Hola...

Podrias hacerte una Tabla "EntradaSalidas" con 4 campos (Id_EntradaSalida, Fecha_Entrada, Fecha_Salida, Id_Empleado).

Despues podrias tomar mediante SQL una Fecha para un Empleado determinado, e ir sumando las horas de todas las entrada salidas que tuvo ese dia.

Saludos.
__________________
Blümchen... einfach die rave Prinzessin
http://www.dmassive.com.ar/
  #5 (permalink)  
Antiguo 14/07/2010, 09:09
 
Fecha de Ingreso: mayo-2010
Mensajes: 49
Antigüedad: 14 años
Puntos: 1
Respuesta: Ayuda Fechas

ok voy a ser mas claro

en una tabla mysql estan los siguientes camposy s ellenaria asi

idregistro IdEmpleado FechaEntrada FechaSalida
1 123456 2010-07-14 09:00 2010-07-14 15:00

2 999999 2010-07-14 06:00 2010-07-14 10:00

3 999999 2010-07-14 12:00 2010-07-14 15:00


asi quedaria en la base de datos si el empleado 999999 entra y sale 2 veces
  #6 (permalink)  
Antiguo 14/07/2010, 09:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda Fechas

Código MySQL:
Ver original
  1. SELECT IdEmpleado, SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND, FechaEntrada FechaSalida))) TotalTrabajado
  2. FROM entradas
  3. GROUP BY IdEmpleado;
Si lo quieres por día:
Código MySQL:
Ver original
  1. SELECT IdEmpleado, DATE(FechaEntrada) Dia, SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND, FechaEntrada FechaSalida)))  TotalTrabajado
  2. FROM entradas
  3. GROUP BY IdEmpleado, Dia;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 14/07/2010, 09:48
 
Fecha de Ingreso: mayo-2010
Mensajes: 49
Antigüedad: 14 años
Puntos: 1
Respuesta: Ayuda Fechas

Muchisimas gracias a todos, el codigo lo probare ahora en la tarde y te cuento los resultados


Otra vez ....GRACIAS
  #8 (permalink)  
Antiguo 15/07/2010, 08:37
 
Fecha de Ingreso: mayo-2010
Mensajes: 49
Antigüedad: 14 años
Puntos: 1
Respuesta: Ayuda Fechas

el codigo funcionó de maravilla, ahora quiero saber algo; con esos datos que tengo en la base de datos, puedo calcular cuantas horas nocturnas trabajó(que serían despues de las 18:00)?.....es mejor hacerlo desde Mysql o desde C#????

hacer algo como: empleado:9999999 fechaentrada: 2010-07-14 08:00 fecha salida: 2010-07-14 20:00

horasdiurnastrabajadas: 10 horas nocturnas trabajadas: 4


gracias
  #9 (permalink)  
Antiguo 15/07/2010, 09:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda Fechas

Poderse hacer en una consulta... se puede. Pero es una consulta algo compleja porque primero hay que determinar los parámetros de hora de inicio y hora final, y luego calcular los segmentos diurnos y nocturnos.
Ese tipo de consultas es conveniente resolverlas en procedimientos almacenados (stored procedures).
¿Realmente la necesitas hacer?

La cosa anda más o menos por acá (no la he revisado muy bien):
Código MySQL:
Ver original
  1. SELECT IdEmpleado, Dia, SEC_TO_TIME(SUM(Total)) TotalTiempo
  2.   (
  3.   SELECT IdEmpleado, DATE(FechaEntrada) Dia, TIMESTAMPDIFF(SECOND, FechaEntrada, CONCAT(DATE(FechaSalida), ' 08:00:00')) Total
  4.   FROM entradas
  5.   WHERE FechaEntrada BETWEEN CONCAT(DATE(FechaEntrada), ' 00:00:00') AND CONCAT(DATE(FechaEntrada), ' 08:00:00')
  6.   SELECT IdEmpleado, DATE(FechaEntrada) Dia, TIMESTAMPDIFF(SECOND, CONCAT(DATE(FechaSalida), ' 20:00:00'), FechaSalida ) Total
  7.   FROM entradas
  8.   WHERE FechasALIDA BETWEEN CONCAT(DATE(FechaSalida), ' 20:00:00') AND CONCAT(DATE(FechaSalida), ' 23:59:59')
  9.   ) T1
  10. GROUP BY IdEmpleado;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 15/07/2010, 10:14
 
Fecha de Ingreso: mayo-2010
Mensajes: 49
Antigüedad: 14 años
Puntos: 1
Respuesta: Ayuda Fechas

Hola muchisimas gracias por tu ayuda....y disculpa las molestias, estoy probando el codigo, pero no entiendo esta parte
Código XML:
Ver original
  1. TIMESTAMPDIFF(SECOND, FechaEntrada, CONCAT(DATE(FechaSalida), ' 08:00:00')) Total

que se trata de hacer con restar CONCAT(DATE(FechaSalida), ' 08:00:00') ??

por que al hacer TIMESTAMPDIFF(SECOND, FechaEntrada, CONCAT(DATE(FechaSalida), ' 08:00:00')) Total el la columna Total sale vacia

Última edición por J0rg3M4r10; 15/07/2010 a las 10:25
  #11 (permalink)  
Antiguo 15/07/2010, 11:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda Fechas

Como ya te dije, no lo revisé completamente.
El tema es así:
- Tienes que buscar por separado los segmentos matutinos y por el otro los vespertinos. La consulta debe devolver las dos búsquedas unidas (de allí el UNION).
- En el matutino, debes tomar todos aquellos registros que se inicien entre la hora 00:00:00 de cada día y las 08:00:00 de ese mismo día. Con esto se debe calcular el tiempo entre la hora marcada de entrada y las 08:00:00:
Código MySQL:
Ver original
  1. TIMESTAMPDIFF(SECOND, FechaEntrada, CONCAT(DATE(FechaEntrada), ' 08:00:00'))
Esta parte:
Código MySQL:
Ver original
  1. CONCAT(DATE(FechaEntrada), ' 08:00:00')
"crea" un datetime con la misma fecha del inicio, pero hasta las 08:00:00.
- Debe agregarse siempre el ID del empleado para poder realizar luego el agrupamiento. No hay que olvidar que una consulta pasada en el resultado de una subconsulta sólo puede invocar los campos que la subconsulta devuelve.
- El período vespertino se calcula de una forma parecida, pero con la diferencia entre las 20:00:00 y la hora registrada de salida:
Código MySQL:
Ver original
  1. TIMESTAMPDIFF(SECOND, CONCAT(DATE(FechaSalida), ' 20:00:00'), FechaSalida)

¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: fechas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:46.