Como crear un numero consecutivo personalizado en access

Tengo un formulario y necesito crear un campo cve_folio el cual de manera automática me cree el folio consecutivo al momento de capturar un nuevo registro me lo ponga en ese campo y lo bloquee

El formato de ese numero consecutivo es 15-00001 ( donde el 15 son los últimos dos dígitos del año y el 0001 es el consecutivo) así mismo que este folio se reinicie cada año con el mismo formato pero seria con el año siguiente es decir 16-0000,16-0001 y así sucesivamente

La forma de hacerlo seria con código vba

Respuesta
6

Prueba este código:

Dim vAutonum As Variant, vUltimo As Variant
Dim vAño As Long
'Le damos a la var. vAño el valor del año actual
vAño = Right(Year(Date),2)
'Cogemos el valor del campo cve_folio
vAutonum = Me.cve_folio.Value
'Si vAutonum no es nulo, es porque ya hay valor en él, entonces salimos del procedimiento
If Not IsNull(vAutonum) Then Exit Sub
'vUltimo es igual al máximo de los 5 últimos caracteres de la derecha del campo
'cve_folio y cuyo año sea igual al actual
vUltimo = Right(DMax("cve_folio", "Tabla", "Left(cve_folio, 2)=" & vAño), 5)
'Si vUltimo es nulo, es porque no hay ningún cve_folio, entonces le damos valor 0
If IsNull(vUltimo) Then
vUltimo = 0
End If
'Sumamos 1 al valor anterior
vUltimo = vUltimo + 1
Me.cve_folio= vAño & "-" & Format(vUltimo, "00000")

Lo puedes poner en el evento "Al activar registro" de tu formulario. Lo único que tienes que cambiar es donde pone "Tabla" poner el nombre de la tabla donde guardas los datos.

El campo cve_folio lo puedes dejar ya bloqueado en las propiedades del formulario, pues entiendo que no lo vas a modificar manualmente.

El código también lo puedes poner, si prefieres, en el evento "Antes de insertar" del formulario.

me funciono de maravilla  solo que en vez de incrementar el consecutivo lo decrementa es decir el primer registro que me puso fue el 15-0001 y al darle guardar para ingresar otro registro me puso el 15-0000 y al darle guardar me dice que no se puede guardar ya que no pueden existir registros duplicados en el índice o clave principal

Pues entonces de maravilla, maravilla, no funcionó... je je. El código lo escribí "al vuelo", voy a probarlo en una BD y te digo algo en breve.

de acuerdo  gracias

quedo asi

' Asignar folio consecutivo con el formato 15-0000 que cambiara cada año
    Dim vAutonum As Variant, vUltimo As Variant
    Dim vAño As Long

    'Le damos a la var. vAño el valor del año actual
        vAño = Right(Year(Date), 2)

    'Tomamos el valor del campo Cve_Folio
        vAutonum = Me.Cve_Folio.Value

    'Si vAutonumno es nulo, es por que ya hay valor en el entonces saluimos del procedimiento
        If Not IsNull(vAutonum) Then Exit Sub

    'vUltimo es igual al maximo de los 5 ultimos caracteres de la derecha del campo
    'Cve_Folio y cuyo año sera igual al actual
        vUltimo = Right(DMax("Cve_Folio", "Tab_FichaTec", "Left(Cve_Folio,2)=" & vAño), 5)

    'Si vUltimo es nulo, es por que no hay ningun Cve_Folio, ENTONCES LE DAMOS VALOR 0
        If IsNull(vUltimo) Then
            vUltimo = 0
        End If

    'Sumamos 1 al valor anterior
        vUltimo = vUltimo + 1
        Me.Cve_Folio = vAño & "-" & Format(vUltimo, "0000")

el campo que te señalo en rojo es donde iria el folio y pues una vez que se ponga el folio se bloquee el campo para que no pueda ser modificado por nadie

Pues a mi el código me funciona perfectamente. Te dejo aqui la BD sobre la que hice la prueba: http://www.filebig.net/files/yXWAnrZpBF 

Fíjate que el código que te propuse pones este formato: 15-00001 (5 dígitos después del guión, como indicabas en un primer momento), y ahora veo que pones sólo 4...

Si quieres sólo 4 dígitos, cambia estas dos líneas:

vUltimo = Right(DMax("cve_folio", "Tabla", "Left(cve_folio, 2)=" & vAño), 5)
...
Me.cve_folio= vAño & "-" & Format(vUltimo, "00000")

por estas otras:

vUltimo = Right(DMax("cve_folio", "Tabla", "Left(cve_folio, 2)=" & vAño), 4)
Me.cve_folio= vAño & "-" & Format(vUltimo, "0000")

ok lo voy a probar y te informo en breve

Ah, otra cosa, para bloquear el campo, puedes cambiarle la propiedad Bloqueado A Si o Habilitado a No en sus propiedades, o lo puedes hacer por código (al final del anterior) con alguna de estas dos líneas:

Me.Cve_Folio.Locked=True

Me.Cve_Folio.Enabled=False

Para desbloquearlo, usa la contraria.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas