Access - Gestión de stock - Aviso rotura de stock

Tengo una base de datos de una empresa que gestiona el stock de la misma. Pues bien, para que Access nos avise de que el pedido de un cliente produce una rotura de stock, he probado creando una regla de validación en el formulario, pero no funciona.

Tengo las relaciones que se muestran en la imagen.

La regla de validación la establezco en el campo [Unidades] del formulario y es la siguiente: >[Stock], es decir, si las unidades de los pedidos de los clientes superan al stock muéstrame el mensaje que existe la opción "Texto de validación", como "Rotura de stock". Se puede ver esto en la imagen.

¿Por qué no funciona esta regla? No sé la razón. Me gustaría saber el motivo.

Y por otro lado, ¿cómo harías vosotros para que Access nos avise de la rotura de stock?

Muchas gracias. Saludos.

Frenchu

Respuesta
1

Debe programar el evento Antes de Actualizar, algo como

Private Sub Form_BeforeUpdate(Cancel As Integer)
  Dim lnStock As Integer
  lnStock = Nz(DLookup("STOCK", "PRODUCTOS", "CÓDIGOARTÍCULO=" & Me.CÓDIGO_ARTÍCULO))
  If Me.UNIDADES > lnStock Then
    MsgBox "Las unidades superan el Stock", vbInformation, "Le informo"
    Cancel = True
  End If
End Sub

Y suprimir la regla de validación del formulario. Trate en lo posible hacerlo por código.

Muchas gracias, Eduardo!!!

Lo que pasa es que no usar código, no lo entiendo. Es culpa mía porque no lo había indicado en el enunciado. 

Saludos!!!

2 respuestas más de otros expertos

Respuesta
1

Deberías concretar lo que quieres que se vea o que haga si la cantidad( unidades) supera el Stockmínimo. Por ejemplo, si tengo la tabla Productos, donde hay un campo que fija la mínima cantidad de ese producto que debe haber en el almacén.

Fíjate en el Té que el mínimo son 12. Y tengo un formulario Ventas con un subformulario DetalleVenta

Fíjate que voy a vender 90 de las 95 unidades que hay en el almacén y que el stock mínimo era 12. El cursor aún está en el control Cantidad. Cuando pulso Enter

Y habría que definir lo que quieres que haga una vez pulses Aceptar.

Muchas gracias, Julián!!

Muy chulo es formulario "Ventas", sobre todo lo de los campos [Antes] y [Después]. Estos los has calculado con una consulta o con código. No sé usar código VBA. Me gustaría saber cómo has calculado ese [Antes] y [Después] sin código. 

En cuanto a mi caso, el stock mínimo sería 0, que no haya rotura.

Y respecto a lo que haga el sistema, que me avise que se ha producido una rotura y que no me deje meter ese valor superior de [Unidades] al de [Stock], como se supone que realiza una regla de validación de Access; por eso lo había probado, pero no funciona. ¿Por qué no me funciona? (pongo imagen; también pongo una imagen de las relaciones de las tablas)

Muchas gracias!!!! Saludos!!

Carawan

Todas las instrucciones las hago por código. Si quieres, repito, si quieres, mándame un mensaje a [email protected] y te mando el ejemplo. O si quieres, haz una copia de tu base con dos o tres registros inventados y le echo un vistazo.

Cuando elijo un producto, en Antes me pone las existencias que hay en el almacén, por tanto nunca podría vender más de las que hay.

Si lo haces, en el asunto del mensaje pon tu alias Carawan, ya que si no sé quien me escribe, ni los abro.

Respuesta
-1

Para que funcione la regla, en el cuadro de texto que se llama STOCK tendría que estar el valor real del campo STOCK de la tabla productos y actualizarlo cada vez que se seleccionase el producto.
Si el producto se selecciona con un combo, basta que se le añada una columna al combo y en esa columna (que estaría oculta) poner Stock asociado al producto.
El actual cuadro de texto tiene opciones:

.- Una es cambiarle su origen referenciándolo a la columna del combo
(Al cambiar de producto se actualiza automáticamente el cuadro de texto STOCK)
.- Otra es eliminarlo y hacer esa referencia directamente
(Se compara con la columna del combo en lugar del cuadro de texto)
Posiblemente (y sin código) la primera opción es mas sencilla si acepta el parámetro 'Column(NN)' del combo.
La metodología para conocer la rotura de Stock va en función del entorno de trabajo, no tiene las mismas exigencias una aplicación multi-usuario (hay que controlar las concurrencias) que otra que solo tenga un único usuario y sin programación avanzada (solo suele darse el caso de concurrencia en circunstancias muy concretas).

Muchas gracias, Enriqueh!!!

El campo [stock] suele mostrar el valor real, he comprobado al realizar entradas y salidas y actualizar las mismas con consultas.

En mi caso el producto no se soluciona de un combo. 

Y en cuanto a las soluciones que me propones, que no se si se podrán aplicar una vez que te comento que el campo [stock] muestra el valor real y no hay combo, la primera, lo de referenciar, supongo que te refieres (valga la redundancia) a poner en "Origen de control" un dato, pero no lo acabo de entender, puesto que el campo [Unidades] tendrá que tener referencia a los datos [Unidades] de la tabla de "Pedidos_Clientes"  y [Stock] a [Stock] de la tabla "Productos].

Pongo fotos del formulario y de los establecido como regla de validación.

¿Por qué no funciona esa regla?

Me gustaría haberte entendido más, pero mi nivel está por debajo...

Muchas gracias!!! Saludos!!!

Me dio la impresión de ver la misma pregunta en otro foro y en ella el formulario tenia combos (de ese punto parte mi error).
Tu respuesta me llama la atención porque el campo STOCK en la primera exposición parece tener como origen un dato que no existe en la tabla que se supone es el origen de datos.
Si se utilizase una función de dominio para obtenerlo, solo funcionaria si se 'refresca' ese cuadro de texto tras introducir el código del Stock a localizar.

Basándome en el esquema de las tablas publicado en el primer hilo, te recomendaría la revisión del proyecto, en la versión actual solo se admite un concepto por pedido.
Otro punto a considerar es la obtención del código del producto, yo ni me planteo el memorizar el código (de los 99.999 artículos) relacionado el numero 20 con una lata de refresco y el 99.999 con una mesa de ping-pong.

Entre las plantillas que acompañan a Access desde su nacimiento esta la de una base de datos que ha sido la guía y aporte de los creadores de Access para los que se inician en el manejo de Access y las bases de datos relacionales (en mi versión de Access se llama 'Neptuno')

¡Gracias! 

Mi campo [Stock] siempre ha tenido como origen de datos [Stock] de la tabla productos.

Sobre revisión del proyecto: ya sé que se podría añadir una tabla intermedia entre "Pedidos" y "Productos" para que admitiese varios artículos (tú le llamas conceptos) por pedido, pero en este caso el ejercicio era así.

Yo en esta consulta preguntaba por qué no funcionaba la regla de validación y cómo hacían lo del control de stock, para ver cómo lo diseñan otras personas.

Si ha logrado que le funcione: felicidades.
Pero su respuesta me reafirma que si no funcionaba era a consecuencia de que desconoce como funcionan las bases de datos relacionales y los eventos asociados.

Un detalle a tener en cuenta es que 'las validaciones' si no están bien diseñadas Access las ignora (caso muy común cuando se desea filtrar y el filtro no es valido, consecuencia: no se aplica).

En el diseño de relaciones mostrado, el campo STOCK no existe en la tabla 'Pedidos_Clientes' que se utiliza para generar los nuevos registros.
La consecuencia: en un registro nuevo ese dato no tendrá valor porque aun no se sabe que código de producto se va a introducir y si algo aparece en el cuadro de texto STOCK será inventado o aleatorio.
Falta una interacción en el evento 'después de actualizar del campo 'codigo_articulo' para obtener el STOCK real del articulo recién introducido (y 'antes' de introducir la cantidad).

El valor que hubiera en STOCK (por defecto asumo que un NULL en los registros nuevos) hace esa regla inoperante.
Si el registro esta creado, al presentarlo (cargarlo en el formulario) como se dispone del código de articulo, si existe una función de dominio (DBusq o DLookup) se mostrara su STOCK.
(Nota: la función que se utilice para obtener el STOCK como campo calculado, solo actúa por defecto al cargar el formulario, tras ese evento hay que forzar su ejecución para que actualice el dato)

Si desea seguir experimentando le aconsejo que planifique la actualización del STOCk en la tabla artículos según se consuman (sea al introducir un pedido o si se corrige la cantidad en tiempo de ejecución) para que los inventarios no delaten errores.

Hay en muchas Web ejemplos abiertos y gratuitos (además de los que acompañan a Access) de la metodología a utilizar en cada circunstancia y sin código (a lo sumo MACROS como alternativa), porque a tiempo actual el programador es es que tiene que guiar al programa y no viceversa.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas