Enumerar registros en formulario access en función de combinación de dos campos

Tengo una tabla para dar de alta artículos. Los clasifico por grupos, familias y referencia. Las familias pueden repetirse y quisiera que en el campo "referencia" se pusiera solo una enumeración cada vez que elija el grupo y familia correspondiente comenzando por 110. Es decir que por cada combinación de grupo y familia tengo un conjunto de artículos y en cada conjunto quisiera una enumeración desde el 110 para obtener el código completo del artículo. Los datos los introduzco através de formulario. Gracias de antemano

Respuesta
2

Yo interpreto tu pregunta de forma diferente a Icue, que es que la referencia es consecutiva pero dentro del mismo grupo y familia, es decir, que si tienes el grupo 10, familia 101, el primer producto que metas tendrá la referencia 110, el segundo la 111 y así, pero si metes un producto de grupo 10, familia 102, la primera referencia volvería a ser la 110.

Eso lo consigues fácilmente con un código parecido (yo lo pongo en el evento "después de actualizar del campo Familia, pero te serviría igual en el campo Producto):

Private Sub Familia_AfterUpdate()
Me.Referencia = 110 + Nz(DCount("*", "TDatos", "Grupo=" & Me.Grupo & " AND Familia=" & Me.Familia))
Me.Codigo = Me.Grupo & "." & Me.Familia & "." & Me.Referencia
End Sub

Como ves en la imagen, mientras la combinación grupo-familia es única, la referencia es 110, y al repetirse un grupo-familia, la referencia se incrementa en 1.

Te dejo aquí la BD de ejemplo: http://www.filebig.net/files/eUMTuq5vNy 

Un saludo.


Muchas gracias a los dos. La segunda opción es exactamente lo que necesito pero me da un error como puedo enviar la base de datos para que me lo corrijáis el fallito. Si es posible

Puedes subirla a filebig.net y poner el enlace de descarga (como hice yo), o bien, pon aquí el código, e indica en qué línea te da el error y cual es ese error.

 Los datos los introduzco en el formulario Código

Cuando añado el código que me indicas en el CC Familia me da el error

y he probado a eliminar todos los códigos pero no consigo dar con la tecla. Por favor ayuda. Ahí esta la bbdd                  http://www.filebig.net/files/6FAgdYfY5u 

Tienes varios errores, y todos derivados de esto:

No puedes copiar un código de una BD de ejemplo y pegarlo tal cual en la tuya, porque con un 99,99% de probabilidad no te va a funcionar, principalmente porque los nombres que se usan no coincidan con los que tu tienes... y tendrás que ajustarlo...

El primer error es que no tienes un campo llamado Codigo, sino que en tu caso se llama Código (con acento). Usar nombres de tablas, campos, controles... con acentos, espacios en blanco, signos "raros", solo complica las cosas. Mi consejo es que los evites.

El segundo es que tu tabla no se llama TDatos, sino que se llama Código

El tercero es que de nada te sirve pegar un código en un módulo si no lo asocias efectivamente a un evento. Lo normal es primero ir a las propiedades del control que quieras programar, pestaña Eventos, generar el evento y luego pegar el código en el editor. Si pegas directamente el código en el módulo, pero no "creas" el evento en esa pestaña, para access no existe.

Una vez corregido eso, el código (en los dos sitios donde lo tienes) te quedaría:

Me.Referencia = 110 + Nz(DCount("*", "[Código]", "Grupo=" & Me.Grupo & " AND Familia=" & Me.Familia))
Me.[Código] = Me.Grupo & "." & Me.Familia & "." & Me.Referencia

PERO, si lo ejecutas, te dará un error, porque Código es un campo calculado y no le puedes asignar un valor directamente. Por tanto tendrás que borrar la segunda linea y quedarte solo con la de Me.Referencia=.....

¡Gracias! Fantástico.

Me acabas de quitar un dolor de cabeza. Te estoy muy agradecido por dedicarme tu tiempo. De verdad muchas gracias.

Ya veo que tengo mucho que aprender.

Saludos

1 respuesta más de otro experto

Respuesta
3

Si pudieras poner un ejemplo, más o menos completo sería mejor. Al decir a partir de 110, entiendo que el código está formado, por grupo, familia y luego 111,112,113, etc. O sea, lo de la imagen

El código del evento después de actualizar del cuadro de texto Artículo es

Private Sub Articulo_AfterUpdate()
Codigo = Grupo & "." & Familia & "." & Format(110 + Me.CurrentRecord, "000")
End Sub

Si siguieras poniendo datos sería

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas