Crear un consecutivo alfanumérico en Access 2007

Quisiera que me ilustraras sobre lo siguiente:
Estoy construyendo una base de datos para el área de compras en Access 2007 utilizando formularios para la captura de los datos.
En la tabla PRODUCTOS, deseo que cuando vaya a registrar un nuevo producto, al abrir el formulario (PRODUCTOS) y seleccionar el tipo de producto (Aseo, Cafetería, Equipo, Papelería, Repuesto), en el campo ID_PRODUCTO se asigne automáticamente el consecutivo correspondiente con los prefijos según el tipo de producto seleccionado así:
Si selecciono Aseo, automáticamente se asigne el consecutivo PAA0001
Si selecciono Cafetería, automáticamente se asigne el consecutivo PCA0001
Si selecciono Aseo nuevamente, automáticamente se asigne el consecutivo PAA0002
y así sucesivamente...

1 respuesta

Respuesta
1
Creamos una consulta cuyo código SQL sería:
SELECT Left([ID_PRODUCTO],3) AS Prefijo, Max(Right([ID_PRODUCTO],4)) AS Numeral
FROM Productos
GROUP BY Left([ID_PRODUCTO],3);
Esta consulta nos muestra dos campos, Prefijo y Numeral, indicando el máximo numeral de cada prefijo.
En el evento después de actualizar sitúo el código
Dim Pre As String
Pre = DLookup("[Prefijo]", "TIPO_PRODUCTO", "[Nombre] = '" & PRODUCTO & "'")
Me.ID_PRODUCTO = Pre & Format(((DLookup("[Numeral]", "conNumeralMaximo", "[Prefijo] = '" & Pre & "'")) + 1), "0000")

Con este código busco de la consulta anterior el máximo del prefijo correspondiente y lo incorporo en Id_PRODUCTO incrementándolo en una unidad.
Tengo una paginita web que creé un poco de cachondeo para cositas de mi zona, y he incorporado una sección para solucionar vuestros problemas con ejemplos. El link es el siguiente:
http://personales.ya.com/pachaweb
En la sección de descargas iré incorporando los ficheros con la fecha en la que creasteis la pregunta y vuestro nombre de usuario.
Lo estrenas tu con esta pregunta.
Se me olvidaba Manuel:
Los tipos de producto los creo en una tabla que se llama TIPO_PRODUCTO y posee dos campos: NOMBRE (Aseo, Cafetería, Equipo, Papelería, Repuesto) y PREFIJO (PAA, PCA, PEA, PPA, PRA) respectivamente...
Esta tabla esta asociada a la tabla PRODUCTOS en su campo TIPO_PRODUCTO, y en el formulario PRODUCTOS (que utilizo para registrar los productos nuevos) utilizo un ComboBox que me trae los nombres del tipo de producto y allí selecciono el que necesite.
Hola Manuel:
Ante todo mil gracias por tu pronta respuesta. Recibí tu código y lo adapte a mi base de datos, pero cuando ejecuto el formulario de Registro de Productos, selecciono el tipo de producto (Aseo, Cafetería, Equipo, etc) y me asigna el prefijo correspondiente pero con el numero 0001 y no lo incrementa. Ya verifique y la consulta esta bien y el código del formulario no me da error, no se que pasa ahí.
¿Podrías decirme como te hago llegar mi base de datos correspondiente a esas tablas para que lo verifiques y me digas donde esta el error?
La verdad es que no lo encuentro por ningún lado. Quedo atento a tu pronta respuesta.
Cordial saludo,
[email protected]
Envíamela comprimida sino la rechaza mi antivirus y le echo un vistazo.
Yo trabajo en 2003 pero supongo que eso no es el problema.
Una aperta.
Ya he recibido el fichero y parece ser que el problema está en que el primer registro no lo crea por lo que debes de incorporar una línea que diga que si es el primer ID del producto lo cree con el prefijo y "0001", el código completo quedaría así:
Private Sub TIPO_PRODUCTO_AfterUpdate()
Dim Pre As String
Pre = DLookup("[Prefijo]", "TIPO_PRODUCTO", "[Descripcion] = '" & Tipo_Producto & "'")
Me.Id_Producto = Pre & Format(((DLookup("[Numeral]", "conNumeralMaximo", "[Prefijo] = '" & Pre & "'")) + 1), "0000")
If Me.Id_Producto = Pre Then Me.Id_Producto = Me.Id_Producto & "0001"

Supongo que ahora te funcionará.
Una aperta.
UUfffff excelente Manuel, era justamente lo que necesitaba!
Muy agradecido contigo, y espero poder seguir contando con tu ayuda.
De verdad mil y mil gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas