Suma continua de horas en un informe de access

Tengo un informe que recoge las horas realizadas por días, existe un control independiente de suma continua, el problema es que cuando suma más de 12 horas comienza desde el principio Pej 4:30 + 4:30 sale 9:00 horas pero al día siguiente que son 5:45 horas el acumulado es de 2:45 cuando tendrían que ser 14:45

Adjunto imagen de mi informe

Tambien adjunto imagen del informe

2 respuestas

Respuesta
1

Pedro, las fechas tal como las ves en el ordenador realmente no existen. Ningún ordenador del mundo trabaja con fechas y mucho menos con horas. Al día 01/01/1900 se le asignó el 1, al día 02/01/1900 se le asignó el 2 y así hasta ahora que andamos por el cuarenta y tantos mil. Las horas, minutos, segundos, etc. son fracciones de un(1) día. Por tanto, si sumas horas( fracciones de día) y superan las 24, los ordenadores entienden que te refieres al día siguiente. Cuando dices, por ejemplo, 23/09/2022 17 horas 25 minutos, en realidad le estás diciendo 43595,73648923... Mira, en la imagen trato de explicártelo( sólo con 5 decimales)

Cuando tu sumas las horas en marrón claro, como superan las 24, te las presenta como 5:05, aunque en realidad son 24(un día completo)+5:05.

En los cuadros verdes puedes ver su valor decimal y ahí si te hace la suma correcta.

En este caso, repito, en este caso el código es

Dim horas As Single, minutos As Single
horas = Int((DSum("[horasalida]-[horaentrada]", "tabla1", "nombre='" & Me.Nombre & "'")) * 24)
minutos = Format(((DSum("[horasalida]-[horaentrada]", "tabla1", "nombre='" & Me.Nombre & "'") * 24) - horas) * 60, "00")
Texto29 = horas & ":" & Format([minutos], "00")

El texto 29 es el amarillo donde aparece 29:05

Buenas tarde y gracias, en el pie de informe tengo puesta la siguiente fórmula

Lo Esta es la fórmula que tengo en el pie, donde tendría que poner el código que me manda

Muchas Gracias

Si el cuadro de texto se llama así Total_horas y está en el pie del informe, en las propiedades de la sección Pie de informe, en sus Propiedades-Eventos-Al dar formato tendrías que poner

Dim horas As Single, minutos As Single
horas = Int((DSum("[horasalida]-[horaentrada]", "tabla1", "nombre='" & Me.Nombre & "'")) * 24)
minutos = Format(((DSum("[horasalida]-[horaentrada]", "tabla1", "nombre='" & Me.Nombre & "'") * 24) - horas) * 60, "00")
Total_horas = horas & ":" & Format([minutos], "00")

Pero no sé si los cuadros de texto donde reflejas las horas de entrada y salida se llaman como el mío. Tampoco sé como se llama la tabla donde guardas los datos y si el campo que identifica al empleado se llama Nombre. Ni si la suma de horas es por empleado, etc. etc.

Respuesta
1

En el campo que suma, no se muestra parte de la hora (si es am/pm) y por eso engaña.

Sumando horas así al alcanzar las 24:00 contara un dia (que posiblemente no se muestre).

Si deseas sumar tiempo real, súmalo en el menor de sus valores (minutos) y preséntalo como quieras, la regla es sencilla una hora = 60 minutos así podrás acumular y al final de mes habrá 145 horas y 18 minutos (o lo que, de la suma, el futuro lo dirá).

¡Gracias! 

Amplio un poco:

Para obtener en minutos (también horas, días o segundos) un intervalo de tiempo es útil la función DateDiff.

Esta función devuelve el intervalo, en el tipo de dato que indiquemos, sus parámetros son tres, el tipo de dato a devolver, el inicio y el final del periodo.

Si solo se tiene un dato (la suma de horas del día) se utiliza el cero como priomer parámetro y la suma de horas como el segundo.

Para visualizar el tiempo en horas y sus minutos, la conversión es sencilla, supongamos que son 4568 (minutos)

= minutos\60 & Format (minutos mod 60,"\:00")

En la ventana de inmediato:

Minutos = 4568
?Minutos\60 & format(Minutos mod 60,"\:00")
76:08

Mas ejemplos en la ventana de inmediato:

H_Inicio= #10:00#
H_Final = #14:30#
?DateDiff("n",H_Inicio, H_final)
 270 
?270\60 & Format (270 mod 60,"\:00")
4:30
? DateDiff("n", 0, H_Final)
870 
?870\60 & Format (870 mod 60,"\:00")
14:30

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas