Restar valores entre subformulario y consulta

Bueno otra pregunta interesante creo por mi parte, ya que, la solución le podría ayudar a varias personas.

Tengo el siguiente subformulario llamado "SubformularioEntradasySalidas" el cual esta alojado en el formulario de salida de materiales.

Ahora también tengo una consulta llamada "invent" que entrega el inventario de todos los materiales en el sistema.

SubformularioEntradasySalidas (este es el subformulario)

invent (esta es la consulta)

Bueno lo que deseo lograr es lo siguiente:

Que al momento que el usuario ingrese la cantidad de salida del producto en el subformulario realice el siguiente calculo.

Restar el valor del campo "salida" del id Producto "SFERT4B5" (subformulario)al mismo producto SFERT4B5 el valor que se encuentra en el campo "Stock" (consulta). Por lo tanto si esto llegase a dar un valor negativo arrojara un cuadro de mensaje que dirá "si realizas esta salida el stock de este producto quedara con valor negativo. Quieres continuar?". Con alternativa SI o NO

En el caso de que sea SI se permite el valor ingresado en el campo salida, de lo contrario borrar el valor en el campo salida ingresado.

1 Respuesta

Respuesta
2

Antes de darte una respuesta, permíteme comentarte un par de cosas que considero "erróneas" en el planteamiento de tu pregunta:

1º/ Quieres restas un valor a un campo de una consulta. Esto puede ser o no ser un error según cómo sea tu consulta y cómo obtengas el campo Stock. Si Stock es un campo calculado (una resta entre entradas y salidas), no vas a poder restarle nada directamente. Si Stock es un valor que viene directamente de una tabla, sí podrías hacerle la resta directamente (con alguna excepción si la consulta es "especial"). En cualquier caso, dado que la consulta toma valores de una o más tablas, lo más adecuado sería restar el valor en la tabla correspondiente o según como sea tu BD, añadir un registro nuevo en la tabla de salidas.

2º/ Quieres confirmar salidas que dejen un Stock en negativo. Si bien a nivel de código y de base de datos no hay ningún problema en hacerlo (la BD es como el papel, admite todo), es un error muy grave permitir dar salida a más unidades de las que tienes en almacén. Imagino que si un cliente te pide 20 unidades, paga por ellas y solo le llegan 15, te montará una buena...

Dicho esto, así podrías hacerlo según lo planteas, poniendo el código en el evento "después de actualizar" del campo Salida (y sin hacer validaciones de la cantidad de salida):

If Dlookup("Stock","Invent","[id producto]='" & me.[id producto] & "'")-Me.Salida>=0 Then
   CurrentDb.Execute "UPDATE Invent SET Stock=Stock-" & Me.salida & " WHERE [Id Producto]='" & Me.[Id Producto] & "'"
Else
   If Msgbox("Si realizas esta salida el stock de este producto quedara con valor negativo. Quieres continuar?",vbInformation+vbYesNo,"CONFIRMAR SALIDA")=vbYes Then
      CurrentDb.Execute "UPDATE Invent SET Stock=Stock-" & Me.salida & " WHERE [Id Producto]='" & Me.[Id Producto] & "'"
   Else
      'Aquí lo que quieras hacer si pulsa no (no hacer nada, borrar la salida...)
   End If
End If

¡Gracias!  

tienes mucha razón con respecto al ítem 2 siendo así como realizaría el mismo código sin la opción de permitir el valor.

If Dlookup("Stock","Invent","[id producto]='" & me.[id producto] & "'")-Me.Salida>=0 Then
   CurrentDb.Execute "UPDATE Invent SET Stock=Stock-" & Me.salida & " WHERE [Id Producto]='" & Me.[Id Producto] & "'"
Else
   Msgbox "La cantidad de salida excede el stock disponible, tendrás que modificarla", vbCritical, "SIN STOCK"
   'y aquí lo que quieras hacer (no hacer nada, borrar la salida...)
   End If
End If

Muchas gracias por tu valioso tiempo va perfecto

Hola sabes encontré un problema que cuando quiero sacar lo que queda en stock me arroja error por como ve en el ejemplo como se ve en la imagen tengo 40 sierras y quiero sacar las 40 me da error

después de compactar y reparar sucede esto?

solucionado  un millón de gracias

Me alegra ver que lo has solucionado.

Quizás estaría bien que pusieses cómo lo has hecho, por si ayuda a otros usuarios.

Bueno la solución a mi problema fue así:

If DLookup("Stock", "Inventario", "[id producto]='" & Me.[id producto] & "'") - Me.Salida < 0 Then
Me.Salida = ""
MsgBox "La cantidad de salida excede el stock disponible, tendrás que modificarla", vbCritical, "SIN STOCK"
End If

Tan solo elimine la segunda linea ya que no necesito actualizar ninguna tabla, solo el calculo y el mensaje, ademas agregue Me.Salida = "" para que dejase el valor del campo nuevamente en blanco, no se si sera lo mas efectivo pero me funciona y no pido mas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas