Como algunos ya sabéis (porque esto va sobre un formulario que ya posteé otras veces ¬¬), yo tengo un formulario en el cual se introduce una contrasea y después te lleva a otro formulario. Bien, por si no lo dije, en el segundo formulario, hay una lista que muestra los registros de ese día de trabajador que corresponde a la contraseña antes introducida.
Vaaale, hasta aquí todo bien explicado. Si recordáis, hace tiempo intenté redondear las horas totales de cada día de los trabajadores. No se cómo, pero al final lo conseguí. El problema es que a mi jefe le ha dado nuevamente por cambiar el horario de los trabajadores, por lo que tengo que volver a modificar el dichoso formulario (a mi me van a volver loca -.-).
Esto va a ser mejor que lo explique. Hay varios turnos, pero el que concierne al problema es el de tarde que va desde las 15:30 hasta la 1:00:00 del día siguiente (hay otro turno de tarde, pero la mayoría hace este). Explicado cómo es el turno, voy a explicar el formulario.
Para hacer memoria, en dicho formulario tengo la lista que muestra lo que se ha hecho durante el día, un campo que dice a qué hora comenzó para así después calcular el tiempo que le ha llevado el registro y unos cuantos campos más. El caso es que para poder redondear, lo que hice fue que sumase las horas que se mostraban en la lista y por cada total que registraba se iba redondeando (y en los informes sólo tengo que mostrar la hora más alta redondeada). Hasta ahí todo bien.
El caso es que la cosa no acaba aquí, esa es al lista visible y es donde se suman todos los registros. Puesto que tienen un tiempo de descanso, cuando ellos marcan como actividad descanso, no se les tendría que sumar, por lo que hice otra lista (oculta) que mostrase sólo los registros de ese día como descanso y sumase sus horas para después restarlo a la suma de la primera lista. Con esto conseguía las horas exactas trabajadas (y después se redondeaba).
El problema surgió cuando cambiaron el turno de tarde, por lo quela suma que se hacía en la primera lista no me valía ya que si cerraban un registro al cambiar el día en el ordenador, la suma de a lista no se realizaba, por lo que al final el redondeo no mostraba sus horas totales. Se me ocurrió una manera y funcionaba, pero en parte, ya qeu si abrían el registro a las 23 y lo cerraban a la 1:00:00 no había problema porque conseguí que se sumase con lo del día anterior (el día que le corresponde), el problema me surge cuando, por ejemplo, abre un registro a las 0:30 y lo cierra a la 1:00:00, ya que esa media hora no se me suma por más que lo intente.
Al abrir el formulario, tengo puesto lo siguiente:
Cita:
Para explicarlo, las listas son las siguientes:Private Sub Form_Load()
Me.ahora = Now
Me.Lista.RowSource = "Select CodigoOperario, fecha,obra,actividad,horas from PartesDeTrabajo where CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#"
Me.Lista2.RowSource = "Select CodigoOperario, fecha,obra,actividad,horas from PartesDeTrabajo where actividad='Descansos' AND CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#"
Me.Lista3.RowSource = "Select CodigoOperario, fecha,obra,actividad,horas, tarde, noche, horainicio from PartesDeTrabajo where horainicio>15:00:00 AND tarde=-1 AND CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date - 1, "mm/dd/yyyy") & "#"
Me.Lista4.RowSource = "Select CodigoOperario, fecha,obra,actividad,horas, tarde, noche, horainicio from PartesDeTrabajo where horainicio>15:00:00 AND actividad='Descansos' AND tarde=-1 AND CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date - 1, "mm/dd/yyyy") & "#"
Me.ahora2 = HoraMinutosSegundos(DateDiff("s", TxtHoraInicio, ahora))
Me.Textoo = Me.nombrecito
If IsNull(Me.CodigoOperario) Then
Me.TxtHorasTotales = 0
Me.TxtHorasTotales2 = 0
Me.TxtHorasTotales3 = 0
Me.TxtHorasTotales4 = 0
Else
Me.TxtHorasTotales = DSum("Horas", "PartesDeTrabajo", "CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#")
Me.TxtHorasTotales3 = DSum("Horas", "PartesDeTrabajo", "tarde=-1 AND CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date - 1, "mm/dd/yyyy") & "#")
Me.TxtHorasTotales2 = DSum("Horas", "PartesDeTrabajo", "actividad='Descansos' AND CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#")
Me.TxtHorasTotales4 = DSum("Horas", "PartesDeTrabajo", "actividad='Descansos' AND tarde=-1 AND CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date - 1, "mm/dd/yyyy") & "#")
Me.calculo = HoraMinutosSegundos(DateDiff("s", TxtHoraInicio, ahora))
Me.descanso = Me.Texto211
Me.redondeo3 = Me.redondeo2
End If
End Sub
Me.ahora = Now
Me.Lista.RowSource = "Select CodigoOperario, fecha,obra,actividad,horas from PartesDeTrabajo where CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#"
Me.Lista2.RowSource = "Select CodigoOperario, fecha,obra,actividad,horas from PartesDeTrabajo where actividad='Descansos' AND CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#"
Me.Lista3.RowSource = "Select CodigoOperario, fecha,obra,actividad,horas, tarde, noche, horainicio from PartesDeTrabajo where horainicio>15:00:00 AND tarde=-1 AND CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date - 1, "mm/dd/yyyy") & "#"
Me.Lista4.RowSource = "Select CodigoOperario, fecha,obra,actividad,horas, tarde, noche, horainicio from PartesDeTrabajo where horainicio>15:00:00 AND actividad='Descansos' AND tarde=-1 AND CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date - 1, "mm/dd/yyyy") & "#"
Me.ahora2 = HoraMinutosSegundos(DateDiff("s", TxtHoraInicio, ahora))
Me.Textoo = Me.nombrecito
If IsNull(Me.CodigoOperario) Then
Me.TxtHorasTotales = 0
Me.TxtHorasTotales2 = 0
Me.TxtHorasTotales3 = 0
Me.TxtHorasTotales4 = 0
Else
Me.TxtHorasTotales = DSum("Horas", "PartesDeTrabajo", "CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#")
Me.TxtHorasTotales3 = DSum("Horas", "PartesDeTrabajo", "tarde=-1 AND CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date - 1, "mm/dd/yyyy") & "#")
Me.TxtHorasTotales2 = DSum("Horas", "PartesDeTrabajo", "actividad='Descansos' AND CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date, "mm/dd/yyyy") & "#")
Me.TxtHorasTotales4 = DSum("Horas", "PartesDeTrabajo", "actividad='Descansos' AND tarde=-1 AND CodigoOperario=" & Me.CodigoOperario & "AND fecha=#" & Format(Date - 1, "mm/dd/yyyy") & "#")
Me.calculo = HoraMinutosSegundos(DateDiff("s", TxtHoraInicio, ahora))
Me.descanso = Me.Texto211
Me.redondeo3 = Me.redondeo2
End If
End Sub
Lista: Es la primera lista de todas, la que muestra lo hecho a lo largo del día
Lista2: lo mismo que la primera pero sólo los descansos
Lista3: es como la primera, pero muestra los registros del día anterior que están seleccionados como tarde.
Lista4: lo mismo que la segunda pero del día anterior.
Y aquí viene la pregunta, cómo hago para que me sume el registro abierto a partir de las 0:00 al día que le corresponde y que no se sume a lo que correspondería al día siguiente?
PD: ya siento haber hecho un post tan largo >.<