Incrementar en +1 valor alfanumérico en tabla referencias access

Tengo una base de datos en Access de unas referencias. El identificador de la referencia tiene el formato "GN0000000000" los "0" varían según el esquema que teníamos anteriormente con una posible referencia así: "GN0102100021". El problema que tengo ahora es que mi jefe quiere cambiar la nomenclatura de estas referencias y que la próxima referencia que se cree, sea la "GN1000000000" e ir incrementando en +1 cada vez que cree una referencia nueva. GN1000000001... GN1000000002... Así sucesivamente cada vez que le doy a guardar una referencia nueva, dándole otros valores que tengo en la tabla.

A ver si me podéis ayudar que sois unos cracks.

1 Respuesta

Respuesta
2

Supongamos que ya tengo una tabla con unas referencias puestas

Y tengo un formulario, donde voy poniendo el cursor en registros nuevos

El código del evento al recibir el enfoque del cuadro de texto Referencia es

Private Sub Referencia_GotFocus()
If IsNull([Referencia]) Then
Referencia = "GN1" & "" & Format(DCount("*", "Contratos", "left(referencia,3)=""GN1""") + 1, "000000")
End If
End Sub

En el código , en format, le pones los ceros que quieras

Buenas, 

He estado haciendo pruebas con el código y me ha funcionado muy bien hasta hoy. Te explico mi problema. He estado haciendo incremental el código articulo: GN1000000001...GN1000000002 así sucesivamente y a funcionado bien. Pero hemos tenido que recuperar 2 códigos antiguos que he puesto después del GN1000000051 he puesto GN4004110001, GN4004110003. Y el problema es que cuando voy al formulario de alta de referencia y doy FOCUS a COD_ARTICULO, me muestra el GN1000000051 y no me hace el incremento para pasar al GN1000000052. Si lo pongo yo manualmente el GN1000000052, cuando le doy FOCUS, me sale el GN1000000052 otra vez. No me hace el incremento en 1.

Que puede estar pasando?

Muchas gracias de antememano.

Ya sé lo que ha pasado, ahora investigando lo que hizo el usuario de introducir códigos, creó una referencia con el número GN1000000044 y luego la elimino, no se introdujeron más códigos desde ese día y ahora al introducir nuevos códigos no me hacía el incremento. He añadido el código GN1000000044 y luego me ha continuado haciendo el incremento.

Se puede hacer en el código que cuando se elimina un código por el medio, pueda continuar haciendo el incremento en 1?

Muchas gracias.

Sin problemas. Vamos a suponer que tenemos el formulario Clientes, donde en Código va poniendo GN1000000001, incrementando. Cuando llega a uno nuevo te pondrá, por ejemplo, ... 05, pero escribes, por ejemplo HH... que serían esos registros que le has añadido.

Da igual, cuando el cursor llegue al siguiente en blanco

El código es

Private Sub Código_GotFocus()
If IsNull([Código]) Then
Código = "GN1" & Format(DCount("*", "clientes", "left([código],3)=""GN1""") + 1, "000000000")
End If
End Sub

Buenas Icue y feliz año!!

Gracias por tu ayuda, pero esto me lo hacia el código que me pasaste, he ido intercalando referencias que no tenían el GN1... y sin problemas, me hacía el incremento correctamente.

El problema a venido cuando se ha eliminado una referencia GN1000000044 o cualquier otra, cuando he ido a introducir una nueva referencia, no me aumentaba en 1 en la tabla. Yo había introducido hasta la referencia GN1000000076, sin problemas y eliminaron la referencia entonces, en el formulario de dar de alta nueva referencia, al hacer FOCUS encima del campo para añadir, me sale otra vez la referencia GN1000000076, no hace el incremento en 1 cuando se ha eliminado una referencia con el incremento.

No se si me he explicado bien.

Saludos y gracias.

Vamos a suponer que tengo el formulario

Voy a hacer que rellene unas cuantas referencias, le pondré dos distintas y continuará rellenando con las siguientes

Como puedes ver, le he puesto dos distintas(en realidad me puso ... 04, pero la borré y puse 8888, lo mismo con 9999. Luego al poner el cursor en un registro nuevo me pone el que sigue, o sea el ... 04, 05,06

Ahora voy a eliminar el ... 05

Como puedes ver ya no hay el 5. Si ahora pongo el cursor en el siguiente vacío( o sea, el de Bon app)

Puedes ver que le ha puesto el número siguiente El código del evento Al recibir el enfoque del cuadro de texto Referencia le pongo

If IsNull([Referencia]) Or Referencia = "" Then
Referencia = "GN1" & Format(Nz(Right(DLast("referencia", "clientes", "left([referencia],3)=""GN1"" and referencia is not null"), 9), 0) + 1, "000000000")
End If

Es decir, que tome la última referencia que tenga valor y que empiece por GN1, y que le extraiga los 9 últimos dígitos, le sume 1 y que lo junte con GN1 en el nuevo valor de Referencia

Es muy raro lo que me hace ahora mismo, te paso a explicar lo que me pasa:

Voy añadiendo referencias sin problemas, he puesto tu código que me has pasado, con mi formato:

Private Sub COD_ARTICULO_GotFocus()
If IsNull([COD_ARTICULO]) Or COD_ARTICULO = "" Then
COD_ARTICULO = "GN1" & Format(Nz(Right(DLast("COD_ARTICULO", "REFERENCIAS", "left([COD_ARTICULO],3)=""GN1"" and COD_ARTICULO is not null"), 9), 0) + 1, "000000000")
End If
End Sub

Y ahora en vez de añadirme el siguiente, ahora me añade el GN1000000045???

En vez de añadirme el GN1000000089 me añade el GN1000000045, no lo puedo añadir porque es un id único y daria valores repetidos, pero lo edito manualmente el GN1000000089, al hacer focus en el siguiente, me pone el GN1000000045...

Me he intentado mirar el código pero no le encuentro la lógica de porque pone esta referencia en vez de la última +1.

Saludos y gracias.

Perdona, te pego una captura para que veas que después del GN1000000045 se han introducido más códigos y también se han ido intercalando códigos sin este formato de numeración. Con el primer código que me pasaste de la macro.

Creo que lo mejor es que si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando un ejemplo. Si lo haces, en el asunto del mensaje pon tu alias Eduard Padrós, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas