Problemota en diferencias de horas access 2007

Que tal ojala me puedas ayudar ya que me tiene harto este problema y no puedo avanzar con mis demás deberes
te cuento
estoy haciendo una diferencias en horas militares
ejemplo salida 1300 llegada 1500 TiempoTotal 0200 (horas con minutos)
En este es donde tengo el conflicto salida 2300 llegada 0100 TiempoTotal -1320 aquí lo estaba manejando enmi consulta como difffecha y lo pero del caso es que tengo que sacar la diferencia de otros 2 campos dobles
lo que realmente necesito es
salida 1200 llegada 1300 TiempoTotal 0100 (como te comente son horas con minutos)
Salida 1400 llegada 1430 TiempoTotal 0030 ( 30 minutos)
Salida 2300 llegada 0245 TiempoTotal 0345 (3 horas 45 minutos)
Todo esto me tiene que llevar a un campo TiempoTotal=0515
todo esto que se guarde en una consulta
no se SQL ni VB lo intente toamdno ejemplos de VB pero no entiendo
ojala em puedas ayudar ya que llevo 2 semanas atorado con eso
Saludos y garcías

3 Respuestas

Respuesta
1
Con fechas y horas juntas la función fechadiff te lo daría automático
pero bueno
lo mejor es que si la primera hora es mayor que la segunda, a la segunda le sumes 24
a ver, le sumas 2400 al segundo y ya
podrías tomarlos como un numero y restarlos a ver si sabes como
o mandame lo que tienes y te lo pongo a ver si te sirve
[email protected]
Ok te lo mando
Saludos y gracias
Me llego tu email pero sin lo que me mandas
Respuesta
1
Por lo que veo has mandado la consulta tanto por Excel como por Access.
Te indico la solución con Excel y si necesitases en Access ya lo veríamos (ahora descartaré la pregunta de Access).
Lo que tienes que hacer es definirte unas funciones para sumar y restar horas. Entra en el editor de Visual Basic (<Alt><F11>) y copia este código:
Option Explicit
Function sumaHoras(ByVal horaSumando1 As String, ByVal horaSumando2 As String) As String
    Dim hhS1 As Integer
    Dim mmS1 As Integer
    Dim hhS2 As Integer
    Dim mmS2 As Integer
    Dim hh As Integer
    Dim mm As Integer
    If Not snOkFormatoHHMM(horaSumando1) Or Not snOkFormatoHHMM(horaSumando2) Then
        MsgBox "Error no se han pasado 2 horas con formato correcto 'HHMM'."
        sumaHoras = "ERROR"
        Exit Function
    End If
    hhS1 = Val(Left$(horaSumando1, 2))
    mmS1 = Val(Right$(horaSumando1, 2))
    hhS2 = Val(Left$(horaSumando2, 2))
    mmS2 = Val(Right$(horaSumando2, 2))
    hh = hhS1 + hhS2
    mm = mmS1 + mmS2
    If mm > 60 Then
        hh = hh + 1
        mm = mm - 60
    End If
    sumaHoras = Format$(hh, "00") & Format$(mm, "00")
End Function
Function restaHoras(ByVal horaMinuendo As String, ByVal horaSustraendo As String) As String
    Dim hhM As Integer
    Dim mmM As Integer
    Dim hhS As Integer
    Dim mmS As Integer
    Dim hh As Integer
    Dim mm As Integer
    If Not snOkFormatoHHMM(horaMinuendo) Or Not snOkFormatoHHMM(horaSustraendo) Then
        MsgBox "Error no se han pasado 2 horas con formato correcto 'HHMM'."
        restaHoras = "ERROR"
        Exit Function
    End If
    hhM = Val(Left$(horaMinuendo, 2))
    mmM = Val(Right$(horaMinuendo, 2))
    hhS = Val(Left$(horaSustraendo, 2))
    mmS = Val(Right$(horaSustraendo, 2))
    ' Si la horaMinuendo es menor que la horaSustraendo, significa que ha pasado
' de fecha, por lo que tendremos que sumarle 24 horas
    If horaMinuendo < horaSustraendo Then hhM = hhM + 24
    ' Restamos las horas
    hh = hhM - hhS
    mm = mmM - mmS
    If mm < 0 Then  ' Si quedan minutos negativos pasamos 1 hora a minutos
        hh = hh - 1
        mm = mm + 60
    End If
    restaHoras = Format$(hh, "00") & Format$(mm, "00")
End Function
Function snOkFormatoHHMM(ByVal hhmm As String) As Boolean
    ' Comprueba que un valor tenga formato hora (HHMM)
    snOkFormatoHHMM = False
    If Len(hhmm) <> 4 Then Exit Function                ' Tiene que tener 4 caracteres
    If Not IsNumeric(hhmm) Then Exit Function           ' Tiene que ser un número
    If Val(Right$(hhmm, 2)) >= 60 Then Exit Function    ' Los minutos entre 0 y 59
    snOkFormatoHHMM = True
End Function
Con ese código puedes sumar y restar dos horas en formato texto 'HHMM'. Si en tus celdas tienes valores numéricos, puedes pasar como parámetro el valor convertido a texto. Por ejemplo: sumaHoras(texto(A1;"0000");texto(B1;"0000"))
Los cálculos que indicabas serían así:
A1 1200
B1 1300
C1 =restaHoras(B1;A1)
D1 =C1
A2 1400
B2 1430
C2 =restaHoras(B2;A2)
D2 =sumahoras(D1;C2)
A3 2300
B3 0245
C3 =restaHoras(B3;A3)
D3 =sumahoras(D2;C3)
Si lo que quieres es hacerlo en una base de datos, lo que tendrás que hacer es calcular las sumas y restas en minutos y después con una función convertir los minutos a horas/minutos.
Respuesta
1
Normalmente ese tipo de información se prepara mediante vb y se almacena luego en la o las tablas necesarias, luego lo tratas con las consultas. Para ello es mejor crear un campo para los minutos y luego creas la función que te convierta los minutos en horas, porque se entiende que si tuviéramos que pagar esa horas, serían un nº entero, es decir la suma del campo "minutos" de varios registros que fuese por ejemplo 3456 minutos, debería la función dar el resultado de 57 horas y 36 minutos.
Sería algo así en un cuadro de texto:
=Ent([CampoSumaMinutos]/60) & "Horas y " & Ent([CampoSumaMinutos] Mód 60) & " Minutos."
Sería algo asi en vb:
Int([CampoSumaMinutos]/60) & "Horas y " & Int([CampoSumaMinutos] Mod 60) & " Minutos."

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas