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

Desglose de horas.

 Responder Responder
Autor
Mensaje
mfafa Ver desplegable
Asiduo
Asiduo


Unido: 23/Septiembre/2009
Localización: España
Estado: Sin conexión
Puntos: 497
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita mfafa Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Desglose de horas.
    Enviado: 25/Febrero/2021 a las 11:24
Buenos días!

Tengo las siguientes siglas y sus valores en horas:-

- Mv = 4 horas
- Mw = 3,5 horas
- Mr = 3 horas
- Ms=2,5 horas
- Mi = 2 horas
- Mx < 2 horas


En un formulario recojo las horas trabajadas de cada trabajador, supongamos que el trabajador1 ha hecho durante un mes 26 horas, estas serían según las siglas: Mv (6 veces) + Mi (1 vez).
Otro trabajador ha generado 25,5 horas, estas serían = Mv (6 veces) + Mx (90 minutos).

¿Como podría hacer el cálculo?

Muchas gracias


Editado por mfafa - 25/Febrero/2021 a las 13:02
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14732
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Febrero/2021 a las 13:58
Hola,

Yo lo enfocaría con un "step-by-step"

Tomaría las horas iniciales y haría la división entera por el valor de tramo más alto (Mv). 
intVeces = NumHoras \ Mv

Y también obtendría el residuo de esa división
dblResiduo = NumHoras Mod Mv

Si intVeces > 1, empezaria la cadena de resultado: Mv (intveces)
Si dblResiduo = 0 es que ya hemos terminado.

En el siguiente paso ya no tomaria las horas para calcular las veces si no el residuo del primer paso
intVeces = dblResiduo \ Mw
Si intVeces > 0, concateno esas veces al resultado --> strResultado = strResultado & "+ Mw (intVeces) 
y calculo el nuevo residuo --> dblResiduo = dblResiduo Mod Mw
Evaluo el nuevo residuo y, si es 0, ya puedo salir.

A partir de aqui solo se trata de copiar el código cambiando el valor de referencia (Mr, Ms, Mi, Mx)

Finalmente tratar la cadena resultante para eliminar los + de más al principio

Unica pega: cuando calculo cuantas veces cabe un entero en un decimal (2 \ 2.5) me dice que 1... y no se porqué.

Bueno, ahí tienes la idea.

Xavi, un minyó de Terrassa

Mi web
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3523
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita prga Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Febrero/2021 a las 16:47
Hola.
Creo, y digo creo, que el operador \ "solo" trabaja con Enteros(long) y si se encuentra un Decimal, lo redondea a entero. En el redondeo el 2.5 lo convierte a 2, da ahí el 1
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14732
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 25/Febrero/2021 a las 18:07
Pues tiene toda la lógica. Supongo que yo optaría por multiplicarlo todo por 100 para evitar decimales.

Xavi, un minyó de Terrassa

Mi web
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable