Como poner un cronometro en retroceso a aun Campo - Access

Como mencione antes en una pregunta que hice soy novato en esto de access y hace unos días un amigo me pido hacer un pequeño programita para dar mantenimiento a vehículos.

Yo necesito en un campo de fecha o campo texto poner un cronometro en retroceso, que una vez se fije una fecha. Por ejemplo cada dos semanas se le aplica el mantenimiento a un equipo. Ese cronometro tiene que empezar a restar desde las dos semanas hasta llegar el día de que le toca el mantenimiento, pero tiene que dar una alerta faltando de uno a dos mostrando cuales de los equipos le toca el mantenimiento.

Ese es el campo que necesito que empiece a contar hacia atrás, y que cuando falte dos días me presente en pantalla una alerta de los o el vehículo que esta de mantenimiento.

Espero puedan entenderme. Lo que estoy explicando.

Respuesta
1

He preparado un ejemplo asumiendo que solo se tiene en cuenta la fecha. El ejemplo contempla la posibilidad de fijar las semanas de acuerdo con el vehículo, desde 1 hasta 4 semanas, con base en el formulario del registro de vehículos se pueden buscar vehículos y registrar mantenimientos, el cual consta de la Fecha del mantenimiento y una observación para anotar en que consistió el mantenimiento, al registrar el mantenimiento se calcula con base en el parámetro de semanas el siguiente mantenimiento.

El ejemplo consta de 2 tablas 1 una consulta y 2 formularios.

Si hay mantenimientos al iniciar el sistema se mostrarán aquellos vehículos que cumplan la condición como muestra la figura.

TABLAS DEL SISTEMA

Esta tabla contiene la información básica del vehículo y permite ver la fecha del próximo mantenimiento. Igualmente permite activarlo y desactivarlo para impedir el registro de un mantenimiento.

En esta tabla se registran los mantenimientos que se le han hecho a vehículo para así consultar los mantenimientos que ha tenido un vehículo.

Formulario vehiculos

Mediante este formulario se registran y editan los datos básicos del vehículo, igualmente, se puede activar y desactivar un vehículo. Si está activo permite hacer el registro del mantenimiento, en caso contrario se deshabilita el botón "Registrar Mantenimiento".

Código del formulario

FORMULARIO MANTENIMIENTOS

Este formulario solo se activa desde el formulario de vehículos. Por defecto se fija la fecha del sistema, en el campo observación se anota el mantenimiento realizado. Cuando haga clic sobre el botón "Registrar", se registra el movimiento y actualiza el campo fecha_sgte_revision de la tabla vehículos con base en el número de semanas que se haya parametrizado para el vehículo.

CODIGO DEL FORMULARIO

Private Sub cmdRegistrar_Click()

 On Error GoTo hay_err
  Dim strSQL As String
  Dim semanas As Integer
  Dim mfechasgte As Date
  Dim midvehiculo As Long
  If IsNull(Me.fecha_ultima_revision) Or IsNull(Me.observacion) Then
     MsgBox "Faltan datos", vbCritical, "Registro mantenimiento"
     Exit Sub
  End If
  midvehiculo = Me.OpenArgs

  semanas = Nz(DLookup("[semanas_mantenimiento]", "tblvehiculos", "idvehiculo=" & midvehiculo), 0)
  mfechasgte = DateAdd("ww", semanas, Me.fecha_ultima_revision)
  DoCmd.SetWarnings (False)
  strSQL = "INSERT INTO tblreparaciones(idvehiculo,fecha_ultima_revision,observacion) VALUES(" & Forms!frmvehiculos.idvehiculo & "," & "#" & Format(Me.fecha_ultima_revision, "mm/dd/yyyy") & "#" & ",'" & Me.observacion & "'" & ");"

  DoCmd.RunSQL strSQL
  strSQL = "UPDATE tblvehiculos SET tblvehiculos.fecha_sgte_revision =" & "#" & Format(mfechasgte, "mm/dd/yyyy") & "#"
  strSQL = strSQL & "  WHERE  tblvehiculos.idvehiculo =" & midvehiculo & " AND tblvehiculos.activo=True;"

 
 DoCmd.RunSQL strSQL
 Forms!frmvehiculos.Refresh
hay_err_exit:
  Exit Sub

 
hay_err:
      MsgBox Err.Description, vbCritical, "ERROR...."
      Resume hay_err_exit
     

End Sub

Observe que el formulario recibe el idvehiculo como argumento.

CONSULTA DE ELEGIDOS 

Esta consulta selecciona los vehículos cuya fecha de reparación sea 2 días siguientes a la fecha del sistema y es el origen de datos del formulario elegidos.

CODIGO DEL FORMULARIO ELEGIDOS

Private Sub Form_Open(Cancel As Integer)

  Dim miRS As Recordset
   Set miRS = Me.Recordset.Clone
    If miRS.RecordCount = 0 Then
     MsgBox "No hay vehÍculos para mantenimiento", vbInformation, "VEHICULOS"
     Cancel = True
     DoCmd.OpenForm "frmvehiculos"
  End If
 End Sub

Private Sub Form_Close()
  DoCmd.OpenForm "frmvehiculos"
End Sub

Si hay registros se muestran como se presentó en la primera imagen, al cerrar se activa el formulario de vehículos, sino hay registros muestra el mensaje "No hay vehículos para mantenimiento", cierra el formulario y abre el formulario del registro de vehículos.

Bueno, realmente esto es solo una idea que se puede mejorar bastante, faltan reportes y muchas cosas.

Si desea el ejemplo puede solicitarlo a [email protected]

1 respuesta más de otro experto

Respuesta
3

No dices sin horas o días. Voy a suponer que te refieres a días. Su`pongamos que tienes una tabla, en la que hay un campo donde aparece el día que le toca revisión. Le he añadido un campo Si/No para "marcarlo cuando se le haya hecho la revisión y que no lo tenga en cuenta.

Como puedes ver hay dos vehículos que le corresponde la revisión en dos días. Como tampoco dices cuando quieres que te avise, he creado un formulario Formulario1, aunque podría ser en cualquier otro

Lo normal sería que lo pusieras en el formulario de inicio, el que se muestra al abrir la base, pero para el ejemplo vale este. Cuando lo voy a abrir

Si le digo Sí

Me abre el formulario vehículos sólo con aquellos que "vencen" en dos días.

El código es

Private Sub Form_Load()
If DCount("*", "vehiculos", "fecharevision-date()<=2 and revisado=0") Then
Dim respuesta As Byte
respuesta = MsgBox("En los próximos dos días hay que revisar " & DCount("*", "vehiculos", "fecharevision-date()<=2 and revisado=0") & " vehiculos", vbYesNo, "¿Qieres verlos?")
If respuesta = vbYes Then
DoCmd.OpenForm "vehiculos", , , "fecharevision-date()<=2 and revisado=0"
DoCmd.Close acForm, "formulario1"
ElseIf respuesta = vbNo Then
DoCmd.CancelEvent
End If
Else
Exit Sub
End If
End Sub

Pero se puede hacer de más formas, es sólo una idea.

De esta manera me sirve. Muchas gracias. Pero la otra pregunta sería. El código va dentro de un evento relacionado con la fecha de revisión y el campo si/no o puede ir en un módulo a parte.

Vamos a ver, te he puesto un ejemplo, pero se puede hacer de muchas maneras. Por si tuvieras "ocupado" el evento Al cargar de dicho formulario, podrías crear un módulo con una función, pero tendrías que poner esa función en algún evento, con lo que prácticamente estaríamos en lo mismo.

Lo de la casilla Sí/No es para que, supongamos que te avisa que el día 02/04/2019 le toca la revisión a un vehículo, y que el día 01 decides hacerla. Si no le dices nada, al día siguiente te volvería a decir que ese vehículo tiene revisión, cuando ya la habías hecho.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas