Formato horas en resultado suma de una consulta access

En una consulta de access la columna (t cuota) es una suma de horas de trabajo.
Cuando me devuelve el resultado no me da las horas totales pues pasan de 24h.
El resultado podría ser por ejemplo 125:25:00.
No se como aplicar el formato le he puesto hora larga pero no funciona.
Luego necesito un campo calculado que me calcule las horas que hay desde el 1/1/2015 hasta hoy y el resultado en columna nueva
y despues dividir la columna euros por la columna (t cuota) y el resultado en una columna nueva.
Sé muy poco de acces así que no se si me habré explicado correctamente
gracias,

1 Respuesta

Respuesta
1

Sin ver la BD es un poco difícil hacerme a la idea de lo que tienes y lo que buscas. Si puedes pasarme una copia de la misma (con que tenga las tablas y la consulta a las que haces referencia es suficiente), con unos cuantos registros inventados, le echo un vistazo e intento darte una solución.

Sube la BD a dropbox, o web tipo mega, filebig... o similar, y pon aquí el enlace de descarga.

Hola Sveinbjorn

en la consulta "rendibilitat clients" la columna "suma de total cuota" tiene que ser:

CLIENTE       RESULTADO 

270                      343:50:00

317                        64:31:00

este es el enlace al arxivo gracias, 

https://drive.google.com/file/d/0B3A2lmE0q3tteGptR0xvZzhzMVk/view?usp=sharing 

Buff, tiene miga la pregunta...

Al final, algo conseguí, a ver si te sirve: https://dl.dropboxusercontent.com/u/59469930/REND%20MINI.accdb 

Te explico lo que hice, que está todo en la consulta "Rendibilitat clients v2". Además, eliminé de las tablas los registros vacíos (los que no tenían valor en el campo client), que supongo que los tienes porque importas los datos desde un excel:

1º/ En primer lugar, le quité el formato hora larga al campo en el que sumas las horas, lo renombré como aux y lo desplacé hacia la derecha (está en penúltimo lugar).

2º/ Creo un nuevo campo calculado (totalCuota) para mostrar la suma de las horas con el formato que deseas, con la salvedad de que ahora es un dato de tipo texto, y no de fecha/hora.

Para ello, trabajo sobre el campo "aux", sabiendo que para access, las fechas y horas son un número de tipo Doble, y que la parte entera representa los días, y la parte decimal las horas, minutos y segundos.

Teniendo esto en cuenta, si el campo "aux" empieza por 0, es que las horas no llegan a 24, y si empiezan por uno o más, la suma excede de 24 horas. En ese caso, hay que sacar los días, con la función Int(), que devuelve la parte entera de un número, y multiplicarlo por 24 horas. Por ejemplo, para el caso del cliente 270 nos da que acumuló 14 días, a 24 horas cada día, son 336 horas.

Esto lo hace esta parte del campo calculado: Int([aux])*24

A continuación, hay que calcular las horas, minutos y segundos que se corresponde la parte decimal de "aux", usando la función ParcFecha():
para las horas: ParcFecha("h";Int([aux])-[aux])

Para los minutos: ParcFecha("n";Int([aux])-[aux])

para los segundos: ParcFecha("s";Int([aux])-[aux])

Para el cliente 270 te da 7 horas, 15 min y 0 seg, que sumado a las 336 horas de los 14 días, da el total de 343:15:00

Ahora sólo queda juntar lso datos para obtener el formato deseado:

Format(Int([aux])*24+ParcFecha("h";Int([aux])-[aux]) & ":" & ParcFecha("n";Int([aux])-[aux]) & ":" & ParcFecha("s";Int([aux])-[aux]);"hh:nn:ss")

3º/ Para crear el campo que te calcule las horas entre el 01/01/2015 y el día actual, usas la función DifFecha(), así:

HorasHastaHoy: DifFecha("h";#01/01/2015#;Fecha())

Para crear un campo llamado HorasHastaHoy que muestre esa diferencia.

Si quieres saber las horas hasta la hora del día actual, para precisar más los cálculos, te hice este otro campo:

HorasHastaAhora: DifFecha("h";#01/01/2015#;Ahora())

Como verás, la diferencia está en el tercer parámetro, pues en el primer caso, utilizo la función Fecha() y en el segundo la función Ahora(), que además de la fecha devuelve la hora actual.

4º/ El siguiente campo calculado, no tengo muy claro qué es lo que pides, pero creo entender que quieres calcular un "precio/hora", dividiendo el TOTAL FRA entre el número de horas.

Para hacer esta división, hay que volver a trabajar con el campo "aux" y transformarlo todo a horas. Eso lo consigues con el campo calculado horasCuota:

Int([aux])*24+ParcFecha("h";Int([aux])-[aux])+ParcFecha("n";Int([aux])-[aux])/60+ParcFecha("s";Int([aux])-[aux])/3600

Que como verás es similar al cálculo del punto dos, pero ahora los minutos los transformo en horas dividiendo entre 60 y los segundos entre 3600, y sumando todo

Luego divides los dos campos, para obtener el campo PrecioHora. Además, le paso la función CMoneda() para que convierta en resultado en importe monetario:

PrecioHora: CMoneda([Total FRA]/[horasCuota])

Como comentario final, decirte que si quieres eliminar (u ocultar) de la consulta los campos "aux" y "horasCuota", has de reemplazar en las fórmulas anteriores aux por Suma([t cuota]) y [horasCuota] por toda la fórmula para calcularlo. Además, fíjate que los campos calculados están agrupados por "Expresión"

Un saludo, y espero que sea lo que pedías.

Hola Sveinbjorn,

muchas Gracias, era exactamente lo que necesitaba.

Te agradezco mucho tu ayuda y tu rapidez en la respuesta.

¡Gracias! 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas