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]