Como sumar la existencia cuando anulo cantidad (salida) o modifico la cantidad de la salida, porque me la vuelve a restar


Option Compare Database

Public Function ActualizaCantidad(Codigo As String, Suma As Boolean, cantidad As Long)
Dim rsOut As New ADODB.Recordset
Dim i As Integer
rsOut.Open "Producto", CurrentProject.Connection, adOpenDynamic, adLockPessimistic
rsOut.Find "Codigo = '" & Codigo & "'"
If rsOut.EOF Then
MsgBox Codigo & " No existe"
Exit Function
End If
If Suma Then
rsOut!Stock = rsOut!Stock + cantidad
Else
rsOut!Stock = rsOut!Stock - cantidad
End If
rsOut.Update
rsOut.Close
End Function

Formulario Compra---------------------------------------

Option Compare Database
Option Explicit

Private Sub Cantidad_AfterUpdate()
Dim i As Variant
i = ActualizaCantidad(Codigo, True, cantidad)
End Sub

Formulario Venta------------------------------------------

Option Compare Database
Option Explicit

Private Sub Cantidad_AfterUpdate()
Dim i As Variant
i = ActualizaCantidad(Codigo, False, cantidad)
End Sub

******************

Ejemplo: yo tengo 10 producto x

Si yo vendi 5 cantidades (me resta), me quedan 5 producto x

Pero si me equivoque y era 3, y lo modifico en el form, me vuelve a restar en la cantidad de existencia. Debería tener en existencia 7 pero me queda 2.. Lo mismo me pasa si anulo la venta, el producto no se suma en la existencia.. ¿me explico?

2 Respuestas

Respuesta
1

Yo hice mi base Access tal cual tu código y funciona perfecto, suma y resta correctamente.

El problema está en otra parte.

Cosas que podrías hacer muy fácilmente:

1) Poner un punto de interrupción en el formulario y seguir la ejecución paso a paso e ir revisando los valores de las variables. En primer lugar ver qué valor recibe la Function.

2) Si el formulario funciona bien, que es lo que creo, buscaría el problema en la variable que se le pasa, ¿puede llegar a ser negativa? En tal caso al restar un negativo suma.

3) En caso de que la Function Seguile la pista a la variable que le pasas, tal vez haya una confusión en el nombre.

Respuesta
1

Al actualizar la venta mandas como cantidad el valor del campo, por lo que cada vez que lo modificas restas al stock dicha cantidad. Lo que debes enviar es la cantidad menos el valor del campo anterior a la modificación:

Private Sub Cantidad_enter()
Dim valorinicial As Variant
valorinicial=nz(me.cantidad)
End Sub

Private Sub Cantidad_AfterUpdate()
Dim i As Variant
i = ActualizaCantidad(Codigo, False, cantidad-valorinicial)
End Sub

Hola, muchas gracias por tu respuesta y tu disponibilidad, pero me da este error:

ERROR DE COMPILACIÓN

NO SE HA DIFINIDO LA VARIABLE

¿que estoy haciendo mal?

Option Compare Database
Option Explicit

Private Sub Cantidad_AfterUpdate()
Dim i As Variant
i = ActualizaCantidad(Codigo, False, cantidad - valorinicial)
End Sub

Private Sub Cantidad_enter()
Dim valorinicial As Variant
valorinicial = Nz(Me.cantidad)
End Sub

El error se produce porque la instrucción option explicit exige que las variables estén definidas antes de ser utilizadas.

Cuando te da el error te debe señalar la variable que no esta definida. Puede que sea el nz( me. Cantidad). Prueba a poner solo nz(cantidad). Si te sigue dando error prueba a colocar todas las declaraciones de variables al principio del código del formulario y no en los subprocedimientos del mismo. Ten en cuenta que también puede ocurrir que cuando escribes el primer subprocedimiento estas utilizando la variable valorinicial la cual no se encuentra definida antes de escribir el código sino después en un procedimiento posterior. Me imagino que así te desaparecerá el error

Hola, perdón mi ignorancia, soy nueva en esto..

el error me lo marca en valorinicial

Private Sub Cantidad_AfterUpdate()
Dim i As Variant
i = ActualizaCantidad(Codigo, False, cantidad - valorinicial)
End Sub

me podes explicar un poquito mas que me quisiste decir: Si te sigue dando error prueba a colocar todas las declaraciones de variables al principio del código del formulario y no en los subprocedimientos del mismo.

desde ya te agradezco tu paciencia..

Veamos. Antes que nada observa que me presento como autodidacta, es decir, solo tengo la experiencia que me da mi inquietud por aprender pero carezco de estudios informáticos, por lo que quizás no sea el más indicado para impartir clases de informática, pero como mi deseo es ayudar me aventuro a compartir lo que conozco y en la forma en que lo cononozco.

Vayamos a tu problema. Cuando te encuentras en la pantalla del código, si observas en la parte superior izquierda tienes un desplegable. Si lo abres encuentras todos los objetos programables del formulario y el primero de todos se llama general y al seleccionarlo te lleva a la primera línea de código. Es en ese lugar donde debes escribir las declaraciones de variables 'Dim valorinicial as variante' y las demás.

Te iba a explicar como declarar las variables, su ámbito, extensión, duración etc... y como me han surgido dudas pues he buscado en google ·vba declaración de variables" y después de leer un poco me doy cuenta de lo poco que sé del tema o de lo mucho que hay que aprender de él, así que mejor que lo investigues por tu cuenta, que te vas a enterar mejor.

Bueno, de momento y para salir del paso, coloca las declaraciones donde te he indicado y no dejes de leer por todos lados y experimentar lo leído, que es la mejor manera de aprender y entender.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas