Error al crear autonumérico en access

Tengo un problema con un código para crear autonumérico en access.

El problema viene cuando llego al detalle CO19-0023/0010 no me crea el detalle CO19-0023/011 sino que se queda en el detalle CO19-0023/0010 

Gracias por la ayuda. Estoy usando este código:

Private Function crearDetCompra() As String
Dim vDetCompra As Variant
Dim vUltimo As Variant

If CurrentProject.AllForms("Compra").IsLoaded Then
vDetCompra = Forms!Compra![Compra Detalles].Form!IdDetCompra
If Not IsNull(vDetCompra) Then Exit Function

Dim Año As Integer
Año = Format(Date, "yy")
vUltimo = Right(DMax("IdDetCompra", "Compras Detalles", "IdCompra ='" & Forms!Compra!IdCompra & "'"), 3)
If IsNull(vUltimo) Then vUltimo = 0
vUltimo = vUltimo + 1
vDetCompra = (Forms!Compra!IdCompra & "/" & "00" & vUltimo)
crearDetCompra = vDetCompra
End If
End Function

1 Respuesta

Respuesta

Ponlo así:

vDetCompra = (Forms!Compra!IdCompra & "/" & Format(vUltimo,"000"))

Si quieres que el número tenga 4 dígitos, ponlo:

vDetCompra = (Forms!Compra!IdCompra & "/" & Format(vUltimo,"0000"))

Pero en ese caso tendrás que cambiar el 3 por el 4 en la función Right().

Un saludo.


Hola Sveinbjorn El Rojo he probado tu código pero cuando por ejemplo llega al Id CO19-0110 no me crea el id CO19-0111 si no que me pone el mismo registro que el último CO19-0110

Has cambiado el 3 por el 4 en el, ¿si en format usas los 4 ceros?

Repito, porque me omitió cosas
¿Has cambiado el 3 por el 4 en el Right(), si en format() usas los 4 ceros?

Yo acabo de probar el código y funciona perfectamente...

¿Puedes poner aquí el código completo tal como lo tienes ahora (con los cambios que has hecho)?

Sí, lo he cambiado. El problema me viene porque tengo me mezcla registros de diferentes años.

El autonumérico me crea un id con el año del registro de la fecha y va añadiendo registros con un autonumérico (CO19-0001,....CO19-0089,....) pero también añado registro de otros años (CO18-0001,CO18-0002,...) y están en la misma tabla, por lo que al utilizar la función dmax me hace cosas raras

Estoy probando con diferentes códigos para que después de insertar la fecha me cree el autonumerico así: si el año de la fecha es 2018 el autonumérico añade un 1 al ultimo registro con ese año y lo mismo si el año de la fecha es 2019. Ejemplo:

La tabla quedaría

CO18-0001

CO18-0002

CO18-0003

CO19-0001

CO19-0002

CO19-0003

CO19-0004

Pero eso no es lo que hace la función sobre la que preguntas, pues por lo que veo en el código, coge el valor de un campo llamado IdCompra (que supongo es el CO19-0023 que citas en tu pregunta), y luego le añade la contrabarra y un número secuencialmente, para que te quede un valor como. CO19-0023/0010.

Y eso, la solución que te ofrecía, lo hace correctamente, porque lo he comprobado.

Private Function crearDetCompra() As String
Dim vDetCompra As Variant
Dim vUltimo As Variant
If CurrentProject.AllForms("Compra").IsLoaded Then
vDetCompra = Forms!Compra![Compra Detalles].Form!IdDetCompra
If Not IsNull(vDetCompra) Then Exit Function
vUltimo = Right(DMax("IdDetCompra", "Compras Detalles", "IdCompra ='" & Forms!Compra!IdCompra & "'"), 4)
If IsNull(vUltimo) Then vUltimo = 0
vUltimo = vUltimo + 1
vDetCompra = Forms!Compra!IdCompra & "/" & Format(vUltimo,"0000")
crearDetCompra = vDetCompra
End If
End Function

Ahora bien, para construir un autonumérico que se reinicie anualmente con ese formato, has de coger el valor máximo de aquel registro que empiece por CO y los dos dígitos del año (para eso tienes la función Left() ) y sumarle 1

Aquí tienes respuestas sobre este mismo tema: Campo numérico que incremente y reinicie por año

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas