No permitir números negativos en consultas

Dudas sobre Tablas, Consultas, Formularios, Informes...
luci
Nivel 1
Mensajes: 11
Registrado: Mar Ene 14, 2020 3:58 pm

No permitir números negativos en consultas

Mensajepor luci » Mar Ene 14, 2020 4:18 pm

Tengo una base de datos con los productos disponibles. Se facilita un formulario a los trabajadores para que pidan los productos que necesitan. Quiero conseguir que salga algún mensaje cuando pidan un artículo que no está disponible o si piden más de lo que hay.

Tengo estas tablas:
Material: ID, Articulo, Descripcion, Stock, Ubicacion
Pedidos: IdPedido, IDArticulo, Articulo, Asignado a, Cantidad,Prestado(Si/No), Definitivo(Si/No), Fecha
Personal: Código, Nombre, Apellido 1, Apellido 2.

Consultas:
Existencias: Muestra el stock actual disponible. (IDArticulo (Pedidos), Articulo (Material), Descripcion (Material), Stock (Material), Stock_Restante (Stock_Restante: SiInm(EsNulo([Material]![Stock]-[Total_Pedidos]![SumaDeCantidad]);[Material]![Stock];[Material]![Stock]-[Total_Pedidos]![SumaDeCantidad]))
Relaciones: Total_Pedidos (Articulo) - Material (ID), Material (ID) - Pedidos (IDArticulo)

Solicitar_Material: Muestra el stock que ha sido pedido. (Asignado a, Articulo, Cantidad, Prestado, Definitivo, Fecha)
Relaciones: Ninguna

Total_Pedidos: Calcula el Stock total (Articulo (Pedidos), Cantidad (Pedidos) - Total: Suma)
Relaciones: ID (Material) - IDArticulo (Pedidos)

Formulario:
Material: Formulario que usará el admin para añadir un producto. (ID, Articulo, Descripcion, Cantidad, Ubicacion)
Pedidos: Formulario que usará el empleado para pedir un producto. (IDPedido, IDArticulo, Articulo, Descripcion, Asignado a, Cantidad, Prestado, Definitivo, Fecha)

Relaciones: Material [ID] - Pedidos [IDArticulo], dbo_Personal [Nombre] - Pedidos [Asignado a]

Tengo la regla de validación (>=0) insertada en [Stock], [Cantidad] y en el formulario [Pedidos] en el campo [Cantidad].

El problema es cuando alguien desde el formulario pide más material del que hay disponible. El valor (mostrado en Existencias) se vuelve negativo, y eso es lo que quiero evitar, haciendo que salga un mensaje estilo "No queda más del producto seleccionado", pero no sé cómo.

También, al añadir el [IDArticulo] a la tabla "Pedidos" (El cual antes no estaba), me salen las consultas "Existencias" y "Total_Pedidos" en blanco, no sé porqué puede ser. Cuando no estaba ese campo, todo funcionaba bien.
Última edición por luci el Mié Ene 15, 2020 12:14 pm, editado 1 vez en total.

Avatar de Usuario
Fayad
Colaborador
Mensajes: 378
Registrado: Mié Oct 28, 2015 9:43 pm

Re: No permitir números negativos en consultas

Mensajepor Fayad » Mar Ene 14, 2020 6:26 pm

Hola!

Prueba poner en regla de validación del campo cantidad del formulario:-

>=0 AND <= [Stock]
Salu2.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1151
Registrado: Sab Oct 24, 2015 10:12 pm

Re: No permitir números negativos en consultas

Mensajepor Sveinbjorn » Mié Ene 15, 2020 9:41 am

Yo haría la validación de la salida por código, por ejemplo en el evento "antes de actualizar" del campo Cantidad del formulario Pedidos, algo así:

Código: Seleccionar todo

Private Sub Cantidad_BeforeUpdate(Cancel As Integer)
If Me.Cantidad>DLookUp("Stock";"Existencias","Producto=" & Me.Producto) Then
   MsgBox "No hay suficiente stock del producto para esa salida", vbInformation, "REVISA"
   Cancel=True
End If
End Sub


He supuesto que en la consulta Existencias hay un campo llamado Stock, y también un campo llamado Producto, de tipo numérico que coincide con el campo Producto del formulario Pedidos (es todo lo que va en el DLookUp). Todo esto lo hice suponiendo que la relación entre las tablas Articulos y Pedidos es entre los campos Id de Articulos y Producto de Pedidos.

En su web, Neckkito tiene ejemplos de gestión de Almacén, y en ellos tiene formas de no permitir que quede Stock negativo. Por ejemplo puedes ver ésta: http://neckkito.xyz/nck/index.php/ejemp ... on-almacen

Un saludo.
Sveinbjorn El Rojo

luci
Nivel 1
Mensajes: 11
Registrado: Mar Ene 14, 2020 3:58 pm

Re: No permitir números negativos en consultas

Mensajepor luci » Mié Ene 15, 2020 11:53 am

Fayad escribió:Hola!

Prueba poner en regla de validación del campo cantidad del formulario:-

>=0 AND <= [Stock]


Con esto no me deja ingresar ninguna cantidad, me sale el código de error con cualquier cosa

luci
Nivel 1
Mensajes: 11
Registrado: Mar Ene 14, 2020 3:58 pm

Re: No permitir números negativos en consultas

Mensajepor luci » Mié Ene 15, 2020 12:16 pm

Sveinbjorn escribió:Yo haría la validación de la salida por código, por ejemplo en el evento "antes de actualizar" del campo Cantidad del formulario Pedidos, algo así:

Código: Seleccionar todo

Private Sub Cantidad_BeforeUpdate(Cancel As Integer)
If Me.Cantidad>DLookUp("Stock";"Existencias","Producto=" & Me.Producto) Then
   MsgBox "No hay suficiente stock del producto para esa salida", vbInformation, "REVISA"
   Cancel=True
End If
End Sub


He supuesto que en la consulta Existencias hay un campo llamado Stock, y también un campo llamado Producto, de tipo numérico que coincide con el campo Producto del formulario Pedidos (es todo lo que va en el DLookUp). Todo esto lo hice suponiendo que la relación entre las tablas Articulos y Pedidos es entre los campos Id de Articulos y Producto de Pedidos.

En su web, Neckkito tiene ejemplos de gestión de Almacén, y en ellos tiene formas de no permitir que quede Stock negativo. Por ejemplo puedes ver ésta: http://neckkito.xyz/nck/index.php/ejemp ... on-almacen

Un saludo.



Gracias por tu respuesta. Quizá me faltó mostrar en la pregunta los campos que tengo en cada consulta y formulario, ahora lo editaré.
He puesto el código que me has mandado y todo sigue igual, ninguna alerta, ni ningún cambio. Quizá por que te has basado en suposiciones, error mío. Me descargué la bd de neckkito, me ha ayudado en algunas cosas, pero sigo sin saber estructurarlo muy bien. Ahora en la consulta de existencias, no me aparece nada al añadir la ID del articulo de la tabla "Pedidos" en vez de la ID de la tabla "Material" como tenía anteriormente.

Edito la pregunta con las nuevas modificaciones, a ver si me puedes echar una mano.
Muchas gracias por tu tiempo.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1151
Registrado: Sab Oct 24, 2015 10:12 pm

Re: No permitir números negativos en consultas

Mensajepor Sveinbjorn » Mié Ene 15, 2020 1:26 pm

Primeramente, mencionar que hay un error en el código, en la primera linea, pues debe ser:
Private Sub Cantidad_BeforeUpdate(Cancel As Integer)
y no
Private Sub Cantidad_BeforeUpdate(Cancel=True)

Probablemente por eso no te haga nada.

De todas formas, con la nueva información que das, este sería el código:

Código: Seleccionar todo

Private Sub Cantidad_BeforeUpdate(Cancel As Integer)
If Me.Cantidad>DLookUp("Stock_Restante";"Existencias","IDArticulo =" & Me.IDArticulo) Then
   MsgBox "No hay suficiente stock del producto para esa salida", vbInformation, "REVISA"
   Cancel=True
End If
End Sub


Una cosa que veo "rara" en tu consulta Existencias: deberías tener ID(Material) en lugar de IDArticulo(Pedidos), para que cada articulo te aparezca una sola vez. Si haces el cambio, el DLookUp te quedaría: DLookUp("Stock_Restante";"Existencias","ID =" & Me.IDArticulo)
Sveinbjorn El Rojo

luci
Nivel 1
Mensajes: 11
Registrado: Mar Ene 14, 2020 3:58 pm

Re: No permitir números negativos en consultas

Mensajepor luci » Mié Ene 15, 2020 3:24 pm

Cuando inserto ese código, me sale un error...
Se ha producido el error 3075 en tiempo de ejecución: Error de sintaxis (Falta operador) en la expresión de consulta "IDArticulo ="

Este es el código que tiene:

Código: Seleccionar todo

Private Sub Cantidad_BeforeUpdate(Cancel As Integer)
If Me.Cantidad > DLookup("Stock_Restante", "Existencias", "IDArticulo =" & Me.IDArticulo) Then
   MsgBox "No hay suficiente stock del producto para esa salida", vbInformation, "REVISA"
   Cancel = True
End If
End Sub


También, cuando intento insertar el siguiente código me aparece un error de sintaxis "Se esperaba separador de listas o )" y no me deja seguir, por eso cambié el ";" del DLookUp después de "Stock_Restante" por una ",".

Código: Seleccionar todo

Private Sub Cantidad_BeforeUpdate(Cancel As Integer)
If Me.Cantidad > DLookup("Stock_Restante";"Existencias", "IDArticulo =" & Me.IDArticulo) Then
   MsgBox "No hay suficiente stock del producto para esa salida", vbInformation, "REVISA"
   Cancel = True
End If
End Sub

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1151
Registrado: Sab Oct 24, 2015 10:12 pm

Re: No permitir números negativos en consultas

Mensajepor Sveinbjorn » Mié Ene 15, 2020 4:38 pm

Lo del ";" fue fallo mío.
Lo del error 3075, me suena muy, muy raro.... Las únicas explicaciones que se me ocurren es que no tenga valor (lo que no tiene mucho sentido pues deberías elegir primero un artículo antes de poner la cantidad de salida), o que no tengas ese control en el formulario (que según lo que dices sí existe, además de que te daría otro error distinto)

Quizás avanzáramos más si subes una copia de tu BD, con un par de datos inventados, para que vea exactamente lo que tienes y ver qué puede estar pasando con ese error 3075.
Sveinbjorn El Rojo

luci
Nivel 1
Mensajes: 11
Registrado: Mar Ene 14, 2020 3:58 pm

Re: No permitir números negativos en consultas

Mensajepor luci » Mié Ene 15, 2020 5:04 pm

En caso de no poner el Artículo (Antes he estado haciendo una prueba para poner los campos como requeridos) salía ese error, pero probando también, cuando inserto cualquier cantidad en el campo, me sale el mensaje de error introducido en el código, haya o no stock del producto.

Aquí la bd a ver si encuentras el fallo. ¡Muchas gracias! :D https://drive.google.com/open?id=1HcvdQD3dvPxrwkYrdIQxrrZFw1_Bcv4J

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1151
Registrado: Sab Oct 24, 2015 10:12 pm

Re: No permitir números negativos en consultas

Mensajepor Sveinbjorn » Mié Ene 15, 2020 6:01 pm

En el archivo no están las consultas, y así mal va a funcionar el código que tiene que buscar un dato en la consulta, jejeje....
Sveinbjorn El Rojo


Volver a “Objetos Access”

¿Quién está conectado?

Usuarios navegando por este Foro: DaniLopez1991 y 1 invitado