Cómo hacer sumas de tiempos en informe de Access

Tengo una BD en Access con un informe que muesra distribuidas las actividades por día, semana y mes. Los totales de horas por días me los suma bien, los totales de horas de las semanas los suma bien. La suma total de las horas del mes el valor que arroja no es el correcto, el real debía ser 43.40 y me muestra 23.40.¿cuál pudiera ser la causa? Adjunto cómo se muestra el informe ejecutado con datos ficticios a manera de prueba.

Así está en la vista diseño

3 Respuestas

Respuesta
1

Es cierto que faltan 4 horas.

Mira, quizá soy repetitivo, pero los ordenadores no trabajan con fecha ni con horas, trabajan con números. Al día 31/12/1899 se le asignó el 0, al día 01/01/1900 el 1, al día 02/01/1900 el 2 y así hasta ahora. Por ejemplo

Las horas, minutos y segundos son decimales de ! Día, por tanto cuando la suma supera el 1, las cuenta como se fueran del día siguiente. Por ejemplo

Si sólo trabajas en formato 00:00 puedes ver que te da como suma 05:05 cuando en realidad debería ser 29:05, pero como supera las 24 horas( 1 día) solo te muestra las horas del día siguiente.

En verde puedes ver el valor real de esas horas. Es decir, 07:58 equivalen a 0,33... de 1 día.

Para llegar a lo que aparece en amarillo, en el evento Al dar formato de la sección Pie del informe le pongo

Private Sub PieDelGrupo1_Format(Cancel As Integer, FormatCount As Integer)
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")
TotalHoras = horas & ":" & Format([minutos], "00")
End Sub

Se puede hacer más breve pero creo que así es más didáctico

Respuesta
1

No se complique le dejo esta función que también he suministrado en otras oportunidades para totalizar tiempo. Guarde esta función en un módulo

Function tiempoencadena(Interval As Double) As String
    tiempoencadena = DateDiff("h", 0, Interval) & _
                   Format$(Interval, ":nn:ss")
End Function

EJEMPLO DE USO

1. En un informe en un subtotal o total puede llamarla, por ejemplo,

  =tiempoencadena(SUM(nombrecampo))

2. Varios subtotales

 =tiempoencadena(sub1+sub2+sub3+,....)

3. En la ventana de inmediato

?tiempoencadena(#5:30#+#5:10#+#17:40#+#4:00#+#9:00#+#4:00#+#13:00#+#4:00#), resultado 62:20, de acuerdo con los subtotales de las semanas de su pregunta.

Si aplica la función al ejemplo de Julián sería más sencillo así

?tiempoencadena(#07:58#+#11:25#+#09:42#)
29:05:00

En un reporte sería algo como:

=tiempoencadena(Sum(FormatoHora))
Respuesta
1

Me cuadraría más que faltase una anotación de cuatro horas que sumadas a las veinte de diferencia, diesen como resultado un día completo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas