** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Calcular horas y multiplicar por precio
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoCalcular horas y multiplicar por precio

 Responder Responder
Autor
Mensaje
pascual14 Ver desplegable
Asiduo
Asiduo


Unido: 30/Junio/2014
Localización: madrid
Estado: Sin conexión
Puntos: 480
Enlace directo a este mensaje Tema: Calcular horas y multiplicar por precio
    Enviado: 04/Enero/2017 a las 10:11
Hola, estoy haciendo una gestión de partes de trabajo dodne se mete la hora de inicio, la de fin, se hace el cálculo de las horas y se multiplica por el precio/hora. La diferencia entre horas me sale bien con una simple resta tipo 9:00 a 14:00 total 5:00 horas, pero al ir a multiplicar ese resultado (5:00) por el precio hora (12€) me sale mal, yo supongo que es porque la resta tiene formato de hora y al multiplicar por los euros no sale bien. ¿como puedo hacer esto? es decir pasar el 5:00 a número y que multiplique por 12€. Gracias
Arriba
buho Ver desplegable
Administrador
Administrador
Avatar
Abuelo FELIZ

Unido: 10/Abril/2004
Localización: Valladolid
Estado: Sin conexión
Puntos: 11317
Enlace directo a este mensaje Enviado: 04/Enero/2017 a las 10:28
Buenos días, muy rapido y sin pensar mucho, pasa por la funcion VAL, las horas, en este caso la diferencia de horas...

Val(horas)

Expulsado de la cárcel por robar los barrotes
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 12234
Enlace directo a este mensaje Enviado: 04/Enero/2017 a las 12:46
Había preparado una parrafada bastante indigesta para explicar las fechas de forma interna y como utilizarlas en este caso pero me parece que la mejor manera de "solucionar" tu problema es aplicar correctamente las "herramientas" que Access pone a nuestra disposición (y de paso explicar solo un poco las fechas)

Dices: La diferencia entre horas me sale bien con una simple resta...

A mi modo de entender ahí está el error. Las fechas internamente son números dobles dónde la parte entera son los días transcurridos desde 01/01/1900 y la parte decimal son las horas dentro del día:

42739 es la representación del día de hoy. 42739,375 son las 9 de la mañana de hoy. 42739,5833333333 son las 14:00 de hoy. Al restar obtenemos 0,208333333335759. Ese valor, pasado a horas (multiplicado por 24) nos devuelve un numero muy cercano a 5... que es lo que vemos porque seguramente lo hemos formateado así.

En ese punto existen 2 soluciones: 
a) seguir con la resta teniendo en cuenta qua habrá que realizar una conversión a doble, una multiplicación x24 y un redondeo para evitar esos decimales "lejanos": Horas = round(cdbl(#01/04/2017 14:00:00# - #01/04/2017 09:00:00#)*24, 2)

b) utilizar las funciones que nos proporciona Access: DateDiff, en este caso.  Horas = DateDiff("h",#04/01/2017 09:00:00#,#04/01/2017 14:00:00#)
Eso devuelve 5. El problema es cuando hay fracciones:
Horas = DateDiff("h",#04/01/2017 09:00:00#,#04/01/2017 14:30:00#) 
también devuelve 5.
¿Como se soluciona?
Pues aplicando otra "unidad de conteo": los minutos
Minutos = DateDiff("n",#04/01/2017 09:00:00#,#04/01/2017 14:30:00#) 
Eso devuelve 330
Sobre ese valor aplicamos la operación \ para obtener las horas enteras
Horas = DateDiff("n",#04/01/2017 09:00:00#,#04/01/2017 14:30:00#) \ 30
y la operación Mod para obtener el resto:
MinutosDeMas = DateDiff("n",#04/01/2017 09:00:00#,#04/01/2017 14:30:00#) Mod 30
El resultado de esa operación la "proporcionamos" sobre 60 para convertirlo en decimal y lo sumamos a las horas obtenidas. 
De esa forma tan complicada seguro que obtenemos los valores exactos de horas en formato decimal.
En mi caso yo crearia una función con 2 argumentos de tipo Date que devolviera un Double con todo ese cálculo.

Nota: vaya cosa tan complicada me ha salido. Espero que a alguien le sirva la explicación...
Xavi, un minyó de Terrassa

Mi web
Arriba
pascual14 Ver desplegable
Asiduo
Asiduo


Unido: 30/Junio/2014
Localización: madrid
Estado: Sin conexión
Puntos: 480
Enlace directo a este mensaje Enviado: 04/Enero/2017 a las 17:07
Pues a mi la resta sin mas me sale perfecta, eso si, poniendo un formato al resultado de hora corta...
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 12234
Enlace directo a este mensaje Enviado: 04/Enero/2017 a las 17:34
Como ya he dicho antes, las fechas (y por extensión las horas) son un numero doble. Después las puedes presentar como tu quieras. En tu caso utilizas formato de fecha corta que es lo suficientemente inteligente como para convertir un numero decimal en una representación horaria.

¿Me equivoco si el resultado que estás obteniendo al multiplicar las "5 horas" por 12 € es de 2.50?

Xavi, un minyó de Terrassa

Mi web
Arriba
Toni Jurado Ver desplegable
Habitual
Habitual


Unido: 16/Marzo/2012
Localización: España
Estado: Sin conexión
Puntos: 140
Enlace directo a este mensaje Enviado: 06/Enero/2017 a las 00:06
La explicación de Xavi es perfecta y precisa.

Yo que no domino tanto, soluciono el problema de una forma mucho más rudimentaria, pero funciona...

Si multiplico 5h x 12€ efectivamente el resultado es 2,5 por todas las explicaciones de Xavi.

Para solucionarlo, multiplica por factor 24 cualquier operación que tenga Tiempo y Dinero. Es decir

5h x 12€ x 24 = 60

Espero que te ayude el aporte.


Toni Jurado
Arriba
pascual14 Ver desplegable
Asiduo
Asiduo


Unido: 30/Junio/2014
Localización: madrid
Estado: Sin conexión
Puntos: 480
Enlace directo a este mensaje Enviado: 20/Enero/2017 a las 11:12
Hola amigos, perdón por el retraso pero he tenido poco tiempo para pruebas. efectivamente como bien dice Xavi y Toni Jurado, al multiplicar 5 horas por 12€ me sale 2.5. Pero he hecho lo que me dice Toni Jurado y sale bien. Por lo tanto lo dejo así. Me ha sido de gran ayuda.
Gracias como siempre por vuestros consejos. Sois los mejores.
Podéis cerrar el hilo.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable