** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Suma Horas
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoSuma Horas

 Responder Responder
Autor
Mensaje Invertir el orden de clasificación
Nomada Ver desplegable
Colaborador
Colaborador


Unido: 03/Julio/2011
Localización: España
Estado: Sin conexión
Puntos: 1719
Enlace directo a este mensaje Tema: Suma Horas
    Enviado: 05/Junio/2019 a las 10:56
Perfecto.
Muchas gracias.
Este hilo se puede cerrar satisfactoriamente

Arriba
Nomada Ver desplegable
Colaborador
Colaborador


Unido: 03/Julio/2011
Localización: España
Estado: Sin conexión
Puntos: 1719
Enlace directo a este mensaje Enviado: 04/Junio/2019 a las 18:44
Gracias.
Voy a probarlo y te cuento.
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 04/Junio/2019 a las 18:34
Hola!

Mírate este ejemplo, es muy sencillo:

http://www.filebig.net/files/qVcSE2gEYR
Un Saludo.
Arriba
Nomada Ver desplegable
Colaborador
Colaborador


Unido: 03/Julio/2011
Localización: España
Estado: Sin conexión
Puntos: 1719
Enlace directo a este mensaje Enviado: 04/Junio/2019 a las 17:32
Perdón por no explicarme bien.
En un formulario continuo tengo 10 campos Fecha/Hora para cada día de la semana (5 para "EntradaX" y 5 para "SalidaX").
Ahora mediante el siguiente código obtengo el tiempo de cada día en el campo correspondiente (vL, vM, etc.), lo sumo y el resultado lo paso a un campo de texto de nombre TotalHoras:
Este es el código:
Dim vL, vM, vX, vJ, vV As Variant
Dim vTotal As Single, vMinutosRealizados As Double
'Calculo Lunes
vL = Nz(Round(DateDiff("n", [EntradaL], [SalidaL]) / 60, 2), 0)
'Calculo Martes
vM = Nz(Round(DateDiff("n", [EntradaM], [SalidaM]) / 60, 2), 0)
'Calculo Miercoles
vX = Nz(Round(DateDiff("n", [EntradaX], [JSalidaX]) / 60, 2), 0)
'Calculo Jueves
vJ = Nz(Round(DateDiff("n", [EntradaJ], [SalidaJ]) / 60, 2), 0)
'Calculo Viernes
vV = Nz(Round(DateDiff("n", [EntradaV], [SalidaV]) / 60, 2), 0)
vTotal = vL + vM + vX + vJ + vV
vMinutosRealizados = Round((vTotal - Int(vTotal)) * 60, 0)
Me.TotalHoras.Value = Int(vTotal) & ":" & Format((vMinutosRealizados), "00")

Con este código, si por ejemplo los 3 primeros días ha trabajado de 7:00 a 7:35, cada día ha trabajado 35 minutos, lo que da como resultado 1:45 minutos. Pues el campo "TotalHoras" me muestra 1:44.
Qué es lo que está mal?
Espero haberme explicado un poquito mejor.
Gracias y saludos.


Editado por Nomada - 04/Junio/2019 a las 17:51
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 04/Junio/2019 a las 14:54
Hola!

Sí nos dijeras, ¿que es lo que quires hacer? y los campos y algun dato ficticio, a lo mejor podríamos intentar ayudarte.
Un Saludo.
Arriba
Nomada Ver desplegable
Colaborador
Colaborador


Unido: 03/Julio/2011
Localización: España
Estado: Sin conexión
Puntos: 1719
Enlace directo a este mensaje Enviado: 04/Junio/2019 a las 13:26
Gracias Xavi.
Realmente el campo vSumaTotalHoras, viene del código:
vHorasRealizadas = Round(DateDiff("n", (HEntrada], [HSalida]) / 60, 2)
con lo cual no tiene exactamente horas y minutos, sino como ves la diferencia de entrada salida con el redondeo y 2 decimales.

Probe también con este otro código, con la diferencia de que no suma las horas de los registros, sino en un mismo registro las horas de los distintos días de la semana, pero hace lo mismo:
Dim vHorasRealizadasL, vHorasRealizadasM As Variant, vTotal As Single, vMinutosRealizados As Double
'Calculo Lunes
vHorasRealizadasL = Nz(Round(DateDiff("n", [EntradaL], [SalidaL]) / 60, 2), 0)
'Calculo Martes
vHorasRealizadasM = Nz(Round(DateDiff("n", [EntradaM], [SalidaM]) / 60, 2), 0)
vTotal = vHorasRealizadasL + vHorasRealizadasM
vMinutosRealizados = Round((TOTAL - Int(TOTAL)) * 60, 0)
Me.Horas.Value = Int(TOTAL) & ":" & Format((vMinutosRealizados), "00")
Me.J_TotHoras.Value = Me.Horas.Value
Sinceramente me gusta más este último código, pero como digo tampoco funcionada correctamente.



Editado por Nomada - 04/Junio/2019 a las 13:48
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 04/Junio/2019 a las 12:54
Se supone que el control vSumaTotalHoras contiene horas y minutos.
Se supone que el control vMinutos es para mostrar solo los minutos (sospecho que el redondeo es la causa de que no te cuadre)

No entiendo la necesidad de crear un tercer campo para mostrar la parte entera de horas y los minutos de forma formateada. ¿No es lo mismo que aparece en vSumaTotalHoras?

En cualquier caso, para mostrar una hora:minutos disponemos de TimeSerial

Xavi, un minyó de Terrassa

Mi web
Arriba
Nomada Ver desplegable
Colaborador
Colaborador


Unido: 03/Julio/2011
Localización: España
Estado: Sin conexión
Puntos: 1719
Enlace directo a este mensaje Enviado: 04/Junio/2019 a las 10:51
Buenas.
Tengo un formulario continuo con un campo de Fecha/Hora (C_Horas).
En el pie del formulario un campo independiente con Origen de control:
=Suma([C_Horas]) cuyo nombre es vSumaTotalHoras

otra campo también independiente con Origen de control:
=Redondear(([vSumaTotalHoras]-Int([vSumaTotalHoras]))*60;0) de nombre vMInutos

por último el campo donde muestro la suma de horas de todos los registros:
=Int([vSumaTotalHoras]) & ":" & Format(([vMinutos]);"00")

Pues la suma de tres registros donde el campo C_Horas tenga 5 minutos cada registro me da 14.

Alguna sugerencia?

Gracias y un saludo.


Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable