Access - ¿Como Generar "Código de artículo" al introducir las características del artículo?

   
Vista:

¿Como Generar "Código de artículo" al introducir las características del artículo?

Publicado por Arturo Eduardo (3 intervenciones) el 10/08/2015 17:52:45
Saludos Amigos, Agradezco de antemano su ayuda en esta consulta. No soy programador pero estoy intentando aprender.

La situación es esta.

Tengo una Tabla "Artículos", con los campos "ID de Articulo", "Código de Articulo", "Categoría", "Descripción de Articulo", ..., y Otra Tabla "Categorías", con los campos "ID de Categorìa","Nombre de Categoría".

Ambas están relacionadas por los campos "Artículos.Categoría" => "Categorìas.ID"

La intención es que al capturar los datos de los campos. "Articulo.Categoría" y "Articulo.Descripción del Articulo", en automático se calcule el campo "Código de Articulo"... el cual estaría constituido por el " ID de Categoría" (de dos dígitos) y un numero ( de tres dígitos) que represente la posición del articulo dentro de esa categoría, Ejemplo

ID - Código - Categoría - Descripción - ...
01 - 01001 - Cereal - asdfasd
02 - 01002 - Cereal - aasdfas
03 - 01003 - Cereal - asdfasdfa
04 - 02001 - Frutas - aaffs ssdf
05 - 02002 - Frutas - fs sse ea
* ...

En si, mis problemas son dos:
Uno es que no se como generar automáticamente los últimos tres dígitos del campo "Código".
El otro es, como seria mas adecuado generaría ese "Código", por medio de un campo calculado directo en la tabla, o por medio de un valor predeterminado en un cuadro de texto de un formulario de captura de datos ("Formulario Artìculos") .
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

¿Como Generar "Código de artículo" al introducir las características del artículo?

Publicado por Enrique Heliodoro (1663 intervenciones) el 10/08/2015 21:39:57
Lo mas natural acostumbra a ser que los códigos se generen a la vez que se crea el articulo.

Habitualmente se utiliza la función DMAX y 'dentro de ella' funciones de manejo de texto para generar el filtro y localizar al mas alto de su subconjunto, tras ello se la incrementa se le aplica la función FORMAT y se reconstruye el nuevo código.

Asumamos que el cuadro de texto que indica categoría se llamase 'L_categoria' y que el destino (y origen) 'L_codigo'

El numero mas alto (de cualquier categoría) en la tabla seria: Val(MID([código],3))
El filtro para que sea el mas alto de la actual categoria (L_categoria) seria asi: Left([categoría],2) = L_Categoria

La función DMax:
DMax("Val(MID([código],3))", "[aquí la tabla]", "Left([categoría],2) ='" & Me.L_Categoria & "'")

Ya disponemos del mayor, lo incrementamos:
DMax("Val(MID([código],3))", "[aquí la tabla]", "Left([categoría],2) ='" & Me.L_Categoria & "'") + 1

Una vez incrementado, le damos el formato de tres dígitos:
Format(DMax("Val(MID([código],3))", "[aquí la tabla]", "Left([categoría],2) ='" & Me.L_Categoria & "'") +1 ,"000")

Solo nos quedaría añadir la categoría:
Me.L_categoria & Format(DMax("Val(MID([código],3))", "[aquí la tabla]", "Left([categoría],2) ='" & Me.L_Categoria & "'") +1 ,"000")

Y finalmente asignárselo al campo de formulario, para que en conjunto con el resto de datos generar un nuevo registro

Me.LCodigo = Me.L_categoria & Format(DMax("Val(MID([código],3))", "[aquí la tabla]", "Left([categoría],2) ='" & Me.L_Categoria & "'") +1 ,"000")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

¿Como Generar "Código de artículo" al introducir las características del artículo?

Publicado por Arturo Eduardo (3 intervenciones) el 11/08/2015 01:40:42
Muchas gracias mi estimado Enrique Heliodoro, me acabas de sacar de mi ignorancia... andaba totalmente perdido...

Me queda claro que esta expresión no se puede colocar como expresión en un campo calculado de tabla, creo que tampoco es recomendable colocarlo como el valor predeterminado de campo, lo idóneo seria colocarlo dentro del formulario, como parte de del procedimiento de evento "Al cambiar" del cuadro combinado donde elijo la "Categoria" del articulo... ¿O me equivoco?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Como Generar "Código de artículo" al introducir las características del artículo?

Publicado por Arturo Eduardo (3 intervenciones) el 11/08/2015 03:42:39
Caballero... con la novedad... al implementar el codigo que fuiste tan amable de compartir, note que la función Dmax generaba un valor Null cuando la categoria no tenia articulos por contar, lo cual a concatenar las cadenas solo aparecia un codigo de 2 digitos, es decir solo el codigo de la categoria sin el resultado de Dmax... por ende se me ocurrio asignar el resultado de Dmax a una variable Ultimo... evaluar ese valor... al final quedo asi...

1
2
3
4
5
6
7
8
9
Private Sub Categoria_Change()
    Dim Ultimo As Variant
    Ultimo = DMax("Val(Mid([Articulos].[Codigo], 3))", "[Articulos]", "Left([Articulos].[Categoria],2) ='" & Me.Categoria & "'")
    If IsNull(Ultimo) Then
        Ultimo = 0
    End If
    Ultimo = Ultimo + 1
    Me.Codigo = Format(Str(Me.Categoria), "00") & Format(Str(Ultimo), "000")
End Sub

Con este cambio note que si usas el formulario en cuestión para modificar la categoría de algun articulo almacenado, dicho articulo pasa a ocupar el ultimo lugar en la categoria... solo habra que tener cuidado de usar el formulario solo para agregar datos y no para modificarlos...

De antemano... muchas gracias por tu apoyo... quedo en deuda contigo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Como Generar "Código de artículo" al introducir las características del artículo?

Publicado por Enrique Heliodoro (1663 intervenciones) el 11/08/2015 08:16:42
El recrearlo sobre la marcha impidió darle el acabado perfecto: aplicar la función NZ sobre la función DMax.

El adecuado seria este:
Me.L_categoria & Format(Nz(DMax("Val(MID([código],3))", "[aquí la tabla]", "Left([categoría],2) ='" & Me.L_Categoria & "'"), 0) +1 ,"000")

Para impedir aplicar un nuevo código 'al trastear' con el cambio de categoría, bastaría condicionarlo, podemos hacerlo de dos formas:
.- Verificar si es o no un nuevo registro
IF Me.NewRecord Then Me.LCodigo = Me.L_categoria & Format(Nz(DMax("Val(MID([código],3))", "[aquí la tabla]", "Left([categoría],2) ='" & Me.L_Categoria & "'"), 0) +1 ,"000")

.- Verificar que 'actualmente' el campo en cuestión tiene un valor asignado:
IF Nz(Me.L_Codigo,"") ="" Then Me.LCodigo = Me.L_categoria & Format(Nz(DMax("Val(MID([código],3))", "[aquí la tabla]", "Left([categoría],2) ='" & Me.L_Categoria & "'"), 0) +1 ,"000")



Puntos a considerar:
.- Si el usuario clasifica como fruta a un tomate y posteriormente corrige el error ¿con que 'codigo' debería quedarse con el de la fruta o el de la nueva categoría?.
.- En el 'supuesto' de un cambio de categoría, qué se debería hacer con el código que se desprecia ¿eliminarlo o despreciarlo?
.- En el mismo supuesto anterior, el código despreciado (cuando es borrado) si no fuese el ultimo ¿es reciclable? ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar