Necesito generar un Código de Expediente automático en Access

A ver. Os cuento. Tengo una base de datos con una tabla con dos campos: 'idmunicipio', que es un autoumérico, y 'municipio', que es el municipio en cuestión. La idea es hacer un formulario donde en un desplegable me aparezcan todos los municipios de ese campo 'municipio' de la tabla. Yo selecciono el que sea y al lado pongo un botón que dice "Dar de Alta al Expediente". Hasta aquí perfecto. Lo que necesito es que al pulsar el botón "Dar de Alta al Expediente" con el municipio que sea, se me abra otro formulario donde lo primero que me aparezca sea un código generado automáticamente para ese expediente: por ejemplo, EXP001/2021, donde el EXP es una parte literal siempre fija al igual que el 2021. Lo único que hay que ir actualizando es el 001. ¿Cómo? Mi idea es que ese nuevo expediente se vaya grabando en una nueva tabla llamada "Expedientes" que vaya registrándolos por orden según se van dando de altas. A ver si logro explicarme mejor:

Imaginemos que en el primer formulario elijo como Ayuntamiento a "Madrid" y pulso el botón "Dar de Alta al Expediente". Automáticamente me llevaría a ese otro formulario donde el código generado automáticamente para ese expediente sería "EXP001/2021" y me lo graba en la tabla "Expedientes" que tiene tres campos:

Idexpediente (el secuencial autonumérico del que se coge el secuencial para el código de expediente)

Expediente (que sería el código de expediente generado)

Ayuntamiento (que sería el ayuntamiento asociado a ese expediente)

Ejemplo: Al dar de alta a Madrid, la tabla "Expedientes" quedaría así:

Idexpediente: 1

expediente: EXP001/2021

Ayuntamiento: Madrid

Ahora supongamos que voy a generar otro expediente para otro ayuntamiento, por ejemplo Barcelona. En el primer formulario en el desplegable elijo "Barcelona" y le doy al botón "Dar de Alta al Expediente". En el nuevo formulario el código que debería aparecer asociado a ese nuevo expediente sería el EXP002/2021 puesto que es el segundo y en la tabla "Expedientes" tendría un nuevo registro:

Idexpediente: 2

expediente: EXP002/2021

Ayuntamiento: Barcelona

Y así sucesivamente.

1 Respuesta

Respuesta

He preparado este ejemplo, consta de 2 tablas, 1 formularios y un módulo de VBA con algo de "Enciclopedia Británica" como dicen.

TABLAS

FORMULARIO

Al hacer clic en el botón Dar de Alta obtengo el siguiente mensaje:

Hago clic en Sí

Hago clic en Aceptar y obtengo la tabla actualizada, pero se podría cambiar por un formulario.

Observe que aparece el expediente EXPP003/2021 para Zaragoza.

CÓDIGO DEL BOTÓN DAR DE ALTA

Private Sub btnAlta_Click()
 If Not IsNull(Me.cboMunicipio) Or Me.cboMunicipio <> "" Then
   If MsgBox("¿Está seguro que adiciona el expediente?", vbQuestion + vbYesNo + vbDefaultButton2, "Expedientes") = vbYes Then
     CurrentDb.Execute "INSERT INTO tblexpedientes(expediente,ayuntamiento) VALUES('" & sgte_exp() & "','" & Me.cboMunicipio.Column(1) & "')"
     If Err.Number = 0 Then
       MsgBox "Expediente registrado OK", vbInformation, "Expedientes"
       DoCmd.OpenTable "tblexpedientes", , acReadOnly
     End If
   End If
 End If
End Sub

Observe como llamo la función sgte_exp() para obtener el siguiente expediente, esta es la parte interesante. Aunque mando a abrir la tabla puede cambiarlo por un formulario.

CÓDIGO DEL MÓDULO

Public Function sgte_exp() As String
  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim strSQL As String
  Set db = CurrentDb
  strSQL = "SELECT Last(tblexpedientes.expediente) AS ultimo, Max(Val(Mid([expediente],4,3))) AS cons FROM tblexpedientes;"
  Set rs = db.OpenRecordset(strSQL)
  If IsNull(rs!cons) Then
     sgte_exp = "EXP" & "001/2021"
  Else
    sgte_exp = "EXP" & Format(rs!cons + 1, "000") & "/2021"
  End If
End Function

Aunque lo hice en un módulo también puede hacerse desde el formulario basta con suprimir la palabra Public. Se pueden hacer muchas mejoras, pero esta es la idea.

Si quiere el ejemplo puede solicitarlo a [email protected], favor anotar en el asunto la consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas