Access - autonumerico con año incluido y que vuelva a 1 al siguiente año

 
Vista:
sin imagen de perfil

autonumerico con año incluido y que vuelva a 1 al siguiente año

Publicado por carlos (2 intervenciones) el 30/03/2018 14:28:43
querido foro

la pregunta es la siguiente

quisiera un campo autonumerico que ademas separado por una barra o guion me de el año y que al año siguiente el autonumerico regrese a 1

ej 985-18 985 es el autonumerico y 18 es el año ,

si por ejemplo estoy en el ultimo dia de diciembre el siguiente registro de enero tendria que ser 1-19

espero puedan ayudarme. saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

autonumerico con año incluido y que vuelva a 1 al siguiente año

Publicado por Norberto (753 intervenciones) el 26/03/2021 09:56:43
Hola:

Yo tengo hecho algo parecido para un registro de Entrada/Salida y uso dos campos: uno que contine "E" o "S" en función del tipo de registro y otro el número correlativo para cada uno de ellos. Podrías hacer lo mismo ya que es más fácil localizar el máximo valor ya introducido en un campo numérico que en uno de texto formado por dos partes numéricas. Luego se puede usar unido si hace falta.

Los campos Año y Número pueden estar ocultos y puedes poner un cuadro de texto con la expresión =[Número] & "-" & [Año] Mod 100.

Si vas a usarlo en un entorno multiusuario, se podría dar el caso de que dos usuarios intentaran añadir un registro simultáneamente. Para evitar errores, puedes hacer la comprobación del último registro justo antes de guardarlo.

Este sería el código para cada uno de los eventos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Form_BeforeInsert(Cancel As Integer)
    Dim iAño As Integer, miCrit As String
 
    iAño = Year(Date)
    miCrit = "Año = " & iAño
    Me.Número = Nz(DMax("Número", "Tabla", miCrit)) + 1
    Me.Año = iAño
End Sub
 
Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim miCrit As String, iAño As Integer, lNúmero As Long
 
    iAño = Year(Date)
    If Me.NewRecord Then 'Si estamos dando un alta
        miCrit = "Año = " & lAño & " And Número = " & Me.Número 'Localizamos en la tabla en número que correspondía
        If Not IsNull(DLookup("Zenbakia", "Erregistroa", miCrit)) Then 'Si ya existe...
            '...localizamos de nuevo el mayor número para el año en curso
            miCrit = "Año = " & iAño
            Me.Número = Nz(DMax("Número", "Tabla", miCrit)) + 1
            eMsgBox "El número previsto ha cambiado." 'Mensaje explicando que el número previsto inicialmente ha cambiado
        End If
    End If
End Sub

He adaptado lo que tengo hecho y no está probado. Si te da algún error, me lo dices.

Un saludo,

Norberto.

P.S. Sustituye los nombres de la tabla y los campos por los que tengas tú en tu BDD.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar