Access - Sumar horas

   
Vista:

Sumar horas

Publicado por ANTONIO (78 intervenciones) el 13/05/2014 12:15:15
Buenos días a todos

Sé que esta cuestión se ha planteado en varias ocasiones en el foro pero me da un error en la realización.

He creado un formulario donde quiero crear un campo calculado en el pie de este, donde aparezca el sumatorio de un campo [horas] con formato hora larga. Así tengo 04:15:00 +05:00:00 +12:11:00 +00:50:00.el total que quiero que me aparezca sería =22:16:00

Mi pregunta es como obtener el sumatorio correctamente y que aparezca 22:16:00

Si tengo que realizar un informe, como sería el tratamiento para conseguir el mismo efecto?

Muchas gracias por adelantado y perdonar las molestias.
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
Imágen de perfil de Neckkito

Sumar horas

Publicado por Neckkito (1104 intervenciones) el 13/05/2014 22:08:29
Hola, Antonio:

Ahí tienes un ejemplo de cómo hacerlo con un campo calculado, que te sirve tanto para el informe como para el formularo: https://www.mediafire.com/?6hyzm81vdakx1md

Si lo quieres hacer por VBA la mecánica sería la misma que la seguida en el campo calculado.

Saludos,

http://neckkito.siliconproject.com.ar
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

Sumar horas

Publicado por ANTONIO (78 intervenciones) el 16/05/2014 14:27:46
Muchísimas Gracias

Es justo lo que quería.
Me ha sido muy útil al igual que el link a tu página web que es extraordinaria. Te agradezco muchísimo ejemplos como los tuyos, que para los torpes como yo nos salvan la vida.

Saludos
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

Sumar horas

Publicado por Alberto (19 intervenciones) el 19/06/2014 18:55:00
Cordial Saludo

Neckkito, soy nuevo en este foro y también en acces. Baje tu ejemplo y me sirvió para solucionar parte de mi problema (mil gracias), pero aunque he buscado en todos los temas y en la web no he podido solucionar del todo mi problema, el cual voy a plantear haber si alguien POR FAVOR me AYUDA.

Tengo un formulario principal de nombre "CONTROL", asociado a una tabla, y dentro de este un Subformulario de nombre "Subformulario1", asociado a otra tabla.

El subformulario tiene los siguientes campos (entre otros):
* Hora_Entrada (tipo Fecha/hora, formato hora corta)
* Hora_Salida (tipo Fecha/hora, formato hora corta)
* Total_Horas (en este campo hago la diferencia entre Hora Salida y Hora entrada así: =([Hora_Salida]-[Hora_Entrada]))

Esto es para llevar el control día a día de la entrada y salida de unos empleados con el fin de saber cuantas horas trabajo diario y al final saber cuantas al mes

2) Cree un campo en el pie del Subformulario para que me acumule esta suma con el siguiente código:

=Suma(Format(CFecha(CDoble([Hora_Salida])-CDoble([Hora_Entrada])),"hh:nn:ss"))

3) Cree un campo en el Formulario Principal "CONTROL", para que me vaya mostrando el total de las horas que lleva acumulada un empleado, de la siguiente manera:
* En origen del control ---- Generador de Expresiones, y lo asocie al campo del pie del subfomulario donde estoy acumulando las horas.

Quiero que en el formulario me muestre la suma Total de horas, ejem: 34:30...48:00......He intentado con varias formulas y codigos que he encontrado aca y en otras paginas pero no he podido..

GRACIAS DE ANTEMANO A LA PERSONA QUE ME PUEDA AYUDAR
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
Imágen de perfil de Neckkito

Sumar horas

Publicado por Neckkito (1104 intervenciones) el 19/06/2014 19:26:47
Prueba con esto:

- Al cuadro de texto del pie del formulario ponle de nombre txtTotalHorasSubForm (propiedades -> Pestaña Otras -> Nombre)

- Inserta un cuadro de texto en el formulario principal y ponle de nombre txtTotalHoras (ídem)

- En el evento "Al activar registro" de tu formulario principal ponle este código:

...
Private Sub...
me.txtTotalHoras.value=nz(me.[NombreSubform].Form.txtTotalHorasSubForm.value,"00:00")
End sub
...

Doy por supuesto que el campo de unión entre formulario y subformulario está referido al identificador (o similar) de cada trabajador, de manera que cuando cambias de trabajador el subformulario te muestra las horas de ese trabajador en concreto.

Saludos,

Neckkito
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

Sumar horas

Publicado por Luis Alberto (19 intervenciones) el 19/06/2014 21:44:41
Neckkito, muchas gracias por su respuesta tan ágil. he seguido puntualmente sus indicaciones pero me sale un error al momento de digitar el codigo. no se si sea por las relaciones que tengo de las tablas.

Adjunto una imagen de las tablas que tengo de mi DB

Tabla 1: Liquidacion: es en la que voy a almacenar el control de las horas (esta depende el subformulario).

Tabla 2: Mercaderistas: va a contener los datos de todas las mercaderistas y en la cual se va a seguir agregando a medida que se vayan contratando

Tabla 3: Almacenes: va a contener la información de los diferentes almacenes que hay

Tabla 4: Control: es la que va a almacenar la informacion de control diaria ( en esta voy a traer la información de las demas tablas y de la cual haré las respectivas consultas e informes).... de esta es la que depende el formulario principal



******************************************** / ******************************************
cuando intento agregar el codigo " Form.txtTotalHorasSubForm.value,"00:00") "que hace referencia al campo del subformulario no me lo valida.

Lo estoy colocando en el evento "después de actualizar" y también lo probé en el evento "al hacer clic", porque el que ud me indica no aparece

DE NUEVO MUCHAS GRACIAS POR SU AYUDA.....La verdad llevo 2 semanas y no he podido solucionar esto... es lo unico que me falta para poner a funcionar mi DB
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
Imágen de perfil de Neckkito

Sumar horas

Publicado por Neckkito (1104 intervenciones) el 19/06/2014 22:38:29
Hazte una miniBD con sólo los elementos implicados (puedes borrar los datos, pero déjame algunos aunque sean inventados) y le echo un vistazo.

Puedes pasarme la BD (comprimida en zip o rar, por favor) a neckkito(ARROBA)gmail(PUNTO)com.

Por favor, sólo los elementos implicados. Indícame en el mail el nombre del form principal.

Saludos,

Neckkito
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

Sumar horas

Publicado por Luis Alberto (19 intervenciones) el 19/06/2014 23:42:10
OK.... la DB fue enviada a tu correo

Mil 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
Imágen de perfil de Neckkito

Sumar horas

Publicado por Neckkito (1104 intervenciones) el 20/06/2014 08:36:22
Hola!

El problema te viene porque estás aplicando erróneamente el cálculo de la diferencia de horas. Ello es así porque mi respuesta anterior, al no ver tu BD y no saber cómo lo habías estructurado, no fue correcta. A ver si soy capaz de explicarme con claridad.

Simplificando, tú tienes en el pie de tu subformulario esto:

suma(HoraSalida-HoraEntrada)

¿Qué es HoraEntrada? Pues es, simplemente, nada. Lo mismo para HoraSalida. ¿Por qué? Porque en realidad tú no quieres la HoraEntrada, sino que lo que quieres es la suma de las horas de entrada. Access no entiende a qué te refieres cuando dices HoraEntrada u HoraSalida.

Resumiendo, que la fórmula te funcionaría si operaras a nivel de registros, pero no a nivel de agregados.

Se podría crear un campo calculado que realizara todas las operaciones a la vez, pero sería un poco farragoso y difícil de leer. En lugar de eso, y para que lo veas más claro, en la BD que te he remitido te lo calculo por pasos. Así creo que lo verás mucho más diáfano.

En el nuevo subformulario que he creado, en su pie, encontrarás:
- Un primer textbox, que te calcula la suma de horas de entrada y lo convierte a doble
- Un segundo textbox, que te calcula la suma de horas de salida y lo convierte a doble
- Un tercer textbox, que te calcula simplemente la diferencia entre el segundo y el primero,
- Un cuarto textbox, que te convierte esa diferencia a horas

En el nuevo formulario que te he creado he introducido ese nuevo subform. En el textbox del formulario principal que te recoge el total de horas, si se quiere ir por código, se tiene que realizar una operación un poco más complicada, por lo que he descartado utilizar código. Por eso verás que ese textbox independiente lo he convertido en un campo calculado.

Por si te pica la curiosidad he descartado utilizar VBA porque no se produce una prelación de acontecimientos adecuada. Es decir, que si lo hicera por código lo que pasaría sería lo siguiente:

- Abres el formulario (o, ya abierto, te desplazas a otro registro)
- PRIMERO actúa el código. Eso significa que busca el total del subformulario. No encuentra total y te escribe "00:00"
- SEGUNDO actúa el campo calculado del subform, y realiza la diferencia entre horas de entrada y salida. En el subform sí te muestra un valor diferencial.
- Como el código ya ha actuado no se refresca la información, por lo que tu textbox del form principal seguiría marcando "00:00"

Para solucionarlo habría que recurrir a otras tácticas, lo que creo que no vale la pena dado que al convertirlo en un campo calculado funciona perfecto.

Para quien lea esto y se pregunte "¿campo calculado?" diré que el textbox del subform que recoge esa diferencia de horas se llama txtTotalHorasSubForm, y que el subformulario lo he llamado subFrmInventario. Entonces la expresión del textbox del form principal debería ser:

=[subFrmInventario].Form.[txtTotalHorasSubForm].value

Finalmente, comentarte que si no quieres que se vean los textbox del pie de formulario (del subformulario) estos tienen una propiedad que está en la pestaña Formato, que es Visible. Si cambias esa propiedad a NO no se verán.

Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Sumar horas

Publicado por Luis Alberto (19 intervenciones) el 20/06/2014 23:40:19
Buenas Tardes

Neckkito, permítame darte las gracias de todo corazón. Gracias por su ayuda tan puntual y desinteresada; personas como ud son las que contribuyen para una mejor sociedad..

Tu ayuda fue muy efectiva pero te informo que cuando las horas pasan de 24:00 se reinicia el contador y queda 01:00:00.... lo que necesito es que me acumule el total de horas por mes...

Espero me pueda seguir colaborando

Saludos.....

Alberto
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
Imágen de perfil de Neckkito

Sumar horas

Publicado por Neckkito (1104 intervenciones) el 21/06/2014 11:15:29
Para hacer lo que pides puedes utilizar la función de Juan M. Sánchez. Te la escribo aquí, pero si quieres ver la fuente puedes ir a este link: http://bit.ly/TgH28Y

La función es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'---------------------------------------------------------
'
' TimeToString
'
' Código escrito originalmente por Juan M. Sánchez.
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
'
' Este código se brinda por cortesía de
' Juan M. Sánchez
'
Function TimeToString(Interval As Double) As String
    TimeToString = DateDiff("h", 0, Interval) & _
                   Format$(Interval, ":nn:ss")
End Function
'---------------------------------------------------------

Te explico cómo aplicarla:

Con tu Access abierto, pulsa ALT+F11. Eso te abrirá el VBE.

En el VBE -> Menú -> Insertar -> Módulo

Copias y pegas ahí la función de Juan M. Sánchez. El módulo lo puedes guardar como, por ejemplo, mdlSumarHoras.

Te vas a tu subformulario y lo pones en vista diseño. Coges el textbox txtTotalHorasSubForm y en su interior escribes lo siguiente:

=TimeToString([txtDifHoras])

Y listo.

Saludos,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Sumar horas

Publicado por ANTONIO (78 intervenciones) el 22/06/2014 21:20:29
Estoy de acuerdo que ojalá hubiese más neckkitos en el mundo y todo cambiaría seguro.

Muchas gracias por las aportaciones que se han hecho a mi comentario que me son muy útiles
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

Sumar horas

Publicado por Luis Alberto (19 intervenciones) el 24/06/2014 18:17:16
Cordial Saludo

Neckkito, Mil y Mil Gracias .... PROBLEMA SOLUCIONADO, su ayuda fue enorme y muy puntual

Gracias por ser parte de este circulo y de este blog... ojala las demás personas sigan su ejemplo y contribuyan a la solución de los que menos sabemos del tema.

Un Abrazo desde Bogotá - Colombia y hasta una próxima oportunidad

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

Sumar horas

Publicado por cristian (6 intervenciones) el 29/03/2016 17:21:32
estimados, cree una consulta de tabla ref. cruzadas (con este modelo descrito abajo) los dias 1,2,3,4... son dinamicos ya que se ajustan a los dias de la semana......... necesito obtener el Total de las horas trabajadas pero en formato HH:MM, ejemplo 38:55,


Tabla de horas trabajadas por dia de la semana por funcionario.
[Nombre] ------ [Dia 1] ------ [Dia 2] ------ [Dia 3] ------ [Dia 4] ------ [Dia 5] ------ [Dia 6] ------ [Dia 7] ------ [TOTAL ??????]
juan -------------- 09:45------- 10:05-------- 09:50-------- 10:10-------- 11:03------- 09:45-------- 09:45------- xxxxxx <- aqui deseo que muestre 71:38
pedro------------- 08:46------- 10:45-------- 09:45-------- 10:05-------- 11:07------- 09:45-------- 09:45------- xxxxxxxx

espero se entienda....

gracias de antemano por su ayuda
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