Asignar numero y año a un campo

Estoy diseñando una base de datos en Access para registrar los movimientos de notas que entran y salen de una institución, me solicitan que las notas sean numeradas de la siguiente manera: cada nota debe tener un número creciente acompañado del año de la nota (por ej 214/2017), cada vez que cambia el año el nro de nota debe iniciar nuevamente desde 1.
¿Alguien puede darme una idea de como empezar con esto?

2 respuestas

Respuesta
1

Tienes otra forma

Supongamos que tienes una tabla Notas con FechaNota, NumNota, etc

En el formulario, en el evento Después de actualizar del cuadro de texto FechaNota puedes poner

If IsNull([NumNota]) Then
NumNota = (DCount("fechanota", "Notas", "year([fechaNota])=year(date())") + 1) & "/" & Year(Date)
End If

Así, cuando le pongas una fecha en el cuadro de texto FechaNota, contará cuantos registros hay en la tabla Notas con un año igual al del sistema. Lógicamente, en el primer registro, al contar no habrá todavía ninguno, por eso el suma un 1, y t aparecerá como 1/2017, cuando en el segundo registro escribas otra fechanota, contará y como y hay 1, le suma 1 y te aparecerá como 2/2017

Cuando cambie el año, si escribes una fechanota tipo 01/01/2018, contará, pero como no ha ninguno, le suma 1 y aparece como 1/2018

Respuesta
1

Adrian:

Parto de la Base de que tienes lo siguiente, para que el siguiente código te funcione.

Un Formulario

1 Cuadro de texto para que te muestre el identificador de la Nota, que voy a llamar IDNota

1 Cuadro de Texto que voy a llamar NumEntrada

Otro cuadro de texto que será en el que comienzas a escribir la Nota

El formulario tendrá como Origen la Tabla con los datos que te he comentado

Una Tabla que voy a llamar TblAutoxxxaaaa

Los campos mínimos >>

IDNota >> Tipo Texto de longitud 9

NumEntrada de tipo Número Entero

Otro campo de tipo Texto, para la Nota que vayas a escribrir

Entonces Programa el Evento BeforeInsert del Formulario con éste código

Private Sub Form_BeforeInsert(Cancel As Integer)
'Asignamos las variables que después usaremos
Dim BarraYAño As String
Dim NumAsignado As Long
'Como ves el código original no es mío, pero no recuerdo lo que he cambiado del mismo
'Codigo Cortesia de Jefferson Jimenez:  Extraido de una Funcion Publica de Eduardo Olaz  y adapatdo para la LWP de forma simple
'Creamos una Constante numérica que antepondrá cuatro digitos de ceros eliminandose por valores enteros
Const Ceros As String = "000"
'Creamos la variable que nos dara el año en curso
BarraYAño = "/" & Format(Now, "yyyy")
BarraYAño = Nz(DMax("IDNota", "TblAutoxxxxaaaa", "IDNota Like '" & "*" & BarraYAño & "'"), Ceros & BarraYAño)
'Creamos la variable que nos dará el Numero de la Nota e iremos sustituyendo los ceros de la derecha por valores numéricos según sea tomado el año en curso
NumAsignado = Val(Left(BarraYAño, Len(Ceros)))
NumAsignado = NumAsignado + 1
'Indicamos la formula que ha de tomar para asignarle valor al campo de IDNota e igualmente al NumEntrada
Me.IDNota = Format(NumAsignado, Ceros) & Right(BarraYAño, 5)
Me.NumEntrada = Format(NumAsignado, Ceros)
End Sub 'Finalizamos

Si todo ha ido bien te dará algo como >> 0001/2017…………..xxxx/2017 y en el 2018 saltará a 0001/2018 etc Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas