Access - Operar con Horas

 
Vista:
sin imagen de perfil
Val: 56
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

Operar con Horas

Publicado por Leandro (21 intervenciones) el 27/06/2018 02:49:50
Hola, tengo una tabla donde se registran salidas intermedias y devolución de horas, para ello tengo HoraSalida y HoraEntrada, en otro campo CantidadHoras calculo la diferencia entre las horas, CantidadHoras = HoraEntrada - HoraSalida. También existe un campo donde establece si es Salida o Devolución (Tipo). Mi problema es calcular cuantas horas se deben ya que las de Devolución deberían restar a la sumatoria de Salida.
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Operar con Horas

Publicado por Anonimo (3322 intervenciones) el 27/06/2018 10:18:37
En principio (si funciona matemáticamente la acumulación de horas) no debería haber problema con que (también matemáticamente) se pudiesen disminuir horas, pues en definitiva las horas (para Access) no son mas que un numero que interpreta como decimal.

En definitiva:
Si el día equivaliese a un metro, las horas serian los centímetros y los segundos el equivalente a los milímetros (en todo su conjunto: simples números).


Access posee funciones integradas para la conversión de tramos de tiempo a su valor real (números) tales como CDate o DateDiff (o la aplicación directa de las matemáticas: un ejemplo 8 horas = 8/24 ….. etc.)

Si existe algún problema concreto, ese es el que (expuesto correctamente) podría obtener solución.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 56
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

Operar con Horas

Publicado por Leandro (21 intervenciones) el 27/06/2018 23:22:48
Hola intento y no me acumula, traté de usar sumatoria y me da las opciones de contar, promedio, mínimo y máximo, no me da otra opción.
la Tabla HorasES esta compuesta por:
Campo Tipo de Datos Formato
DNI Número Entero Largo
Fecha Fecha/Hora Fecha Corta
Hora1 Fecha/Hora Fecha Corta - mascara "hh":"nn"
Hora2 Fecha/Hora Fecha Corta - mascara "hh":"nn"
Cant_Horas Fecha/Hora Fecha Corta - mascara "hh":"nn"
Tipo Texto opciones "Salida"/"Devolucion"

Al formulario lo filtro por DNI, y en el botón agregar coloque:
1
2
3
4
5
6
7
8
Private Sub agregar_Enter()
Forms!formHorasES.DNI = Forms!formPersonas!DNI
If Me.Tipo <> "Salida" Then
 Cant_Horas = (Hora2 - Hora1) * (-1)
Else
 Cant_Horas = (Hora2 - Hora1)
End If
End Sub

Esto me hace correctamente la diferencia entre las horas pero no me la transforma en negativa cuando la multiplico por (-1), cuando a la columna Cant_Horas le pongo sumatoria no me da la opción y si lo hago desde el diseño de la consulta me arroja números ######E2, etc.

No se si debería usar una variable auxiliar o un campo donde acumule los resultados, o hacerlo desde un campo calculado.
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Operar con Horas

Publicado por Anonimo (3322 intervenciones) el 28/06/2018 02:28:47
No entrare en detalles, solo indicar que el diseño de esa tabla no me parece el optimo

Tal como se intenta calcular, creo que lo correcto seria invertir los términos (en lugar de multiplicar por la unidad en negativo) … yo en ese detalle estoy de acuerdo con Access: los relojes solo caminan en una dirección.

Unos cálculos efectuados en la ventana de inmediato:
Le asignamos valores a las variables de tipo Date
Hora1= cdate("10:45")
Hora2= cdate("18:05")

Calculamos la diferencia
?hora2 - hora1
0,305555555555556

Que es la misma si invertimos los terminaos (lo que invierte es el signo)
?hora1 - hora2
-0,305555555555556

le aplicamos un formato NORMALIZADO (el que se guardaría como valor calculado)
?format(hora2 - hora1, "hh:nn")
07:20
?format(hora2 - hora1, "short time")
07:20
?format(0.305555555555556, "hh:nn")
07:20

Lo mismo invirtiendo los términos:
?format(hora1 - hora2, "hh:nn")
07:20
?format(hora1 - hora2, "short time")
07:20
?format(-0.305555555555556, "hh:nn")
07:20


Conclusión: el error lo genera el guardar el dato calculado, ese mismo calculo efectuado en la consulta no daría problemas (algo que se puede hacer en una consulta con un clásico IIF)

Antes:
1
2
3
4
5
If Me.Tipo <> "Salida" Then
 Cant_Horas = (Hora2 - Hora1) * (-1)
 Else
 Cant_Horas = (Hora2 - Hora1)
 End If

Después (y en la consulta, incluso como sumatorio):
1
IIF(Tipo = "Salida"; Hora2 - Hora1; Hora1 - Hora2)

OJO, ATENCION: si el calculo devuelve mas de 24 horas, devolverá días + horas + minutos (no horas + minutos) como resultado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 56
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

Operar con Horas

Publicado por Leandro (21 intervenciones) el 10/07/2018 00:02:07
Hola me fue muy útil, logre que sume y reste según sean salidas o devoluciones, pero se me presentó un nuevo problema que no puedo determinar si este saldo es a favor o en contra (si debe horas o le deben horas). Te agradecería me ayudes en eso. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Operar con Horas

Publicado por Anonimo (3322 intervenciones) el 10/07/2018 08:20:26
Al desconocer la aplicación que se pueda haber efectuado para obtener el resultado, solo puedo indicar que Access NO contempla la presentación negativa del tiempo (considera poco probable que 'puedan pasar menos tres días'.

Pero si se muestra ese resultado sin darle el formato fecha (si el resultado es inferior a 24 hora lo mostrara como un decimal) si mostrara el signo y según sea este, deducir quien es el deudor.

Normalmente (para casos como el actual), soy partidario de convertir la fecha a numero y operar con elementos simples, es al finalizar cuando (con la adecuada conversión) se mostraría el resultado en el formato de nuestro interés (por ejemplo: en lugar de un día + 3 horas + diez minutos ==> 27 horas y diez minutos)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar