Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Quitar los segundos

Estas en el tema de Quitar los segundos en el foro de Bases de Datos General en Foros del Web. Veamos, tengo en un informe que me hace las sumas totales de horas, permitiendo que pase de las 24h. El cálculo de las horas las ...
  #1 (permalink)  
Antiguo 20/06/2008, 03:02
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Quitar los segundos

Veamos, tengo en un informe que me hace las sumas totales de horas, permitiendo que pase de las 24h.

El cálculo de las horas las hago a través de un módulo que contiene lo siguiente:

Function TimeToString(Interval As Double) As String
TimeToString = DateDiff("h", 0, Interval) & _
Format$(Interval, ":nn:ss")
End Function

Y en el formulario, tengo varios campos de texto (ya que son varias sumas) y para poneros un ejemplo tengo puesto lo siguiente:

=TimeToString(Suma([HorasFestivas]))

Lo que quiero es los segundos no me los cuente. He intentado quitando en el módulo las ":ss". En el informe no me muestra los segundos, pero los sigue teniendo en cuenta para un cálculo que hace posteriormente.

Cómo hago para que no me sume los sgeundos?
__________________
Cámara Oscura
Etheria
  #2 (permalink)  
Antiguo 20/06/2008, 03:23
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Respuesta: Quitar los segundos

Esa funcion lo que hace es convertir en texto un valor de fecha que le pases. Los segundo ya estaran sumados antes de pasarselos a la funcion. Si no quieres tener en cuenta los segundos, tendras que modificar el campo HorasFestivas de alguna forma, con una consulta, para que no sume los segundos.

Un saludo
  #3 (permalink)  
Antiguo 20/06/2008, 03:39
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Quitar los segundos

entonces vayamos más atrás. El informe está basado en la siguiente consulta:

SELECT DISTINCTROW operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.obra, Clientes.Nombre, PartesDeTrabajo.horas, PartesDeTrabajo.mañana, PartesDeTrabajo.tarde, PartesDeTrabajo.noche, PartesDeTrabajo.sabado, PartesDeTrabajo.festivo, IIf([festivo]=-1,[horas],0) AS HorasFestivas, IIf([mañana]=-1 And [sabado]=0 And [festivo]=0,[horas],0) AS HorasM, IIf([tarde]=-1 And [sabado]=0 And [festivo]=0,[horas],0) AS HorasT, IIf([noche]=-1 And [sabado]=0 And [festivo]=0,[horas],0) AS HorasN, IIf([sabado]=-1 And [festivo]=0,[horas],0) AS HorasS, operario2.[preciohora trabajado], operario2.[preciohora noche], operario2.[preciohora sabado], operario2.[preciohora festivo], operario2.[valor nomina], PartesDeTrabajo.actividad, PartesDeTrabajo.subactividad, operario2.[nº cuenta bancaria]
FROM operario2 INNER JOIN (Clientes RIGHT JOIN (OBRA RIGHT JOIN PartesDeTrabajo ON OBRA.[nombre obra] = PartesDeTrabajo.obra) ON Clientes.IDDeCiente = OBRA.[codigo cliente]) ON operario2.CodigoOperario = PartesDeTrabajo.CodigoOperario
WHERE (((PartesDeTrabajo.fecha) Between [fecha inicial] And [fecha final]));


Para explicarlo un poco a lo referente a mi duda, está el campo horas, mañana, tarde, noche, festivo y sábado (excepto horas,el resto de campos son de tipo si/no). Si te fijas, (cogemos el ejemplo de horas festivas) tengo puesto una cosa así IIf([festivo]=-1,[horas],0) AS HorasFestivas.

De esta manera le estoy diciendo que si las horas que están en el registro tienen marcado como sí a festivas coge esas horas, si está marcado como no van para otro turno.

Tengo que añadir otros campos o modificar los que tengo?
__________________
Cámara Oscura
Etheria
  #4 (permalink)  
Antiguo 20/06/2008, 04:00
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Quitar los segundos

me acabo de acordar que en otro formulario, tuve la necesidad de coger la hora de un campo que guardaba tanto fecha como hora:

Expr1: ValorHora([horainicio])

No hay algo parecido?
__________________
Cámara Oscura
Etheria
  #5 (permalink)  
Antiguo 20/06/2008, 05:49
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Quitar los segundos

Creo que voy avanzando. En la consulta he añadido un nuevo campo con lo siguiente:

Exp1: Hora([horas]) & ":" & Minuto([horas])

Y sale casi bien. Me explico, si en el campo horas está puesto 17:04:11 en el campo Exp1 me marca 17:4

Cómo hago para que me ponga 17:04?
__________________
Cámara Oscura
Etheria
  #6 (permalink)  
Antiguo 20/06/2008, 05:53
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Respuesta: Quitar los segundos

Prueba asi:

Exp1: Hora([horas]) & ":" & format(Minuto([horas]);"00")

Un saludo
  #7 (permalink)  
Antiguo 20/06/2008, 06:07
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Quitar los segundos

vale, así funciona correctamente, el problema viene ahora en que no puedo abrir el informe, ya que al introducir las dos fechas me dice el siguiente mensaje:

"Esta expresión no está escrita correctamente o es muy compleja para evaluarse. Por ejemplo, una expresión numérica puede contener muchos elementos complicados. Intente simplificar la expresión asignando a variables partes de la misma."

La consulta si que me la abre perfectamente. Puede ser porque intenta hacer la suma de las horas?
__________________
Cámara Oscura
Etheria
  #8 (permalink)  
Antiguo 20/06/2008, 08:17
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Quitar los segundos

revisando el informe, me da error en la suma, ya que en vez de sumar el campo horas, ahora quería sumar el campo Exp1 de la siguiente manera:

=TimeToString(Suma[Esp1])

Alguna forma de poder sumarlo?
__________________
Cámara Oscura
Etheria
  #9 (permalink)  
Antiguo 23/06/2008, 03:15
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Quitar los segundos

Me he fijado en otro dato que no se si es cosa mía o ya del propio programa. Para probar si servía de algo todo lo que estoy intentando (ya que no he conseguido que funcione), he quitado los segundos totales de cada registro de un día. Ahora vamos con un ejemplo.

Un trabajador ha trabajado en total 2:34:00
Su precio/hora es: 1,8
En total (que sería horas totales * precio/hora) me marca en el informe es de 4,62

Ahora, yo cojo la calculadora y hago 2,34*1,8 y me da el resultado de 4,212....

No tendría que dar lo mismo?

EDITADO

Ya me he fijado porqué calcula mal XDDD (pero lo de los segundos sigue vigente). Veamos, como las horas totales están mostradas en horas, minutos y segundos, si lo intento multiplicar por el precio me da error, así que hice un campo de texto (invisible >.<) que en vez de tener puesto =TimeToString(Suma([HorasM])+Suma([HorasT])) tiene puesto =(Suma([HorasM])+Suma([HorasT]))*24

Por lo que ya no se me ocurre qué hacer, en uno me muestra 2 horas y 34 minutos y en el campo de texto 2,57.... >.<
No hay forma de coger el campo de horas totales y después convertirlo en número o algo para hacer el cálculo?
__________________
Cámara Oscura
Etheria

Última edición por Koudelka; 23/06/2008 a las 03:21
  #10 (permalink)  
Antiguo 23/06/2008, 05:36
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Quitar los segundos

Bueno, he intentado dar con otra solución, el problema es que me funciona a medias.

Cogiendo las horas totales, he creado un campo de texto cuyo origen de datos es =(Hora([normales])) & "," & Formato(Minuto([normales]);"00")

Funciona con un día normal, pero si le pongo todo el mes, al superar las 24 horas de esta manera no me funciona >.<
__________________
Cámara Oscura
Etheria
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:21.