Necesito modificarlo para que me valga para el turno de noche. Tengo medio código hecho, pero no se cómo terminarlo. Tengo lo siguiente:
Código:
Esto en teoría hace que si se va a crear un nuevo registra en el día, primero mira el día anterior para ver si ha finalizado la tarea.Private Sub CmdAceptar_Click() Dim IdOperario As Long IdOperario = Nz(DLookup("CodigoOperario", "operario2", "clave=" & Me.Txtclave), 0) 'Comprobamos si existe la clave introducida If IdOperario <> 0 Then If DCount("*", "PartesDeTrabajo", "CodigoOperario=" & IdOperario & " AND Fecha=#" & Format(Date, "mm/dd/yyyy") & "#") > 0 Then 'si no existe todavía, miramos si está terminado el registro anterior If DCount("*", "PartesDeTrabajo", "CodigoOperario=" & IdOperario & " AND Fecha=#" & Format(Date - 1, "mm/dd/yyyy") & "# and nz(horafinal)=space(0)") > 0 Then DoCmd.OpenForm "hora3", acNormal, , "CodigoOperario=" & IdOperario & " AND Fecha=#" & Format(Date - 1, "mm/dd/yyyy") & "# and nz(horafinal)=space(0)" 'cerramos el form numeros DoCmd.Close acForm, Me.Name Else MsgBox "esta parte aún no la he hecho XD" End If Else 'está en la tabla If miramos hora de salida en blanco Then 'colocamos hora de salida Else 'registro operario-dia completo (posible doble turno) End If Else MsgBox "La contraseña introducida no corresponde a ningun empleado", vbCritical, "CONTRASEÑA ERRONEA" End If End Sub
He intentado hacer algo, no me da error pero si hago una tarea el día 24 y cambio la fecha al 25 (con el campo horafinal en blanco) me hace un nuevo registro. En principio está puesto que si el campo horafinal está en blanco abra el último registro (que sería el día 24 por no haberlo terminado). Lo que he puesto ahora es lo siguiente:
Código:
Private Sub CmdAceptar_Click() Dim IdOperario As Long IdOperario = Nz(DLookup("CodigoOperario", "operario2", "clave=" & Me.Txtclave), 0) 'Comprobamos si existe la clave introducida If IdOperario <> 0 Then If DCount("*", "PartesDeTrabajo", "CodigoOperario=" & IdOperario & " AND Fecha=#" & Format(Date, "mm/dd/yyyy") & "#") > 0 Then 'si no existe todavía, miramos si está terminado el registro anterior If DCount("*", "PartesDeTrabajo", "CodigoOperario=" & IdOperario & " AND Fecha=#" & Format(Date - 1, "mm/dd/yyyy") & "# and nz(horafinal)=space(0)") > 0 Then DoCmd.OpenForm "hora3", acNormal, , "CodigoOperario=" & IdOperario & " AND Fecha=#" & Format(Date - 1, "mm/dd/yyyy") & "# and nz(horafinal)=space(0)" 'cerramos el form numeros DoCmd.Close acForm, Me.Name Else DoCmd.OpenForm "hora3", acNormal, , "CodigoOperario=" & IdOperario & " AND Fecha=#" & Format(Date, "mm/dd/yyyy") & "#" 'cerramos el form numeros DoCmd.Close acForm, Me.Name End If Else DoCmd.OpenForm "hora3", acNormal, , , acFormAdd Forms!hora3!CodigoOperario = IdOperario 'Forms!hora!fecha = Date'Esta no hace falta ya que tienes en la tabla Partes de trabajo 'El campo fecha con valor predeterminado la fecha actual 'cerramos el form numeros DoCmd.Close acForm, Me.Name End If Else MsgBox "La contraseña introducida no corresponde a ningun empleado", vbCritical, "CONTRASEÑA ERRONEA" End If End Sub