Consulta de Stock no funciona

Quería pedir ayuda para realizar una consulta con 4 tablas que son, Articulos;  Detalle_F_Venta; Detalle_F_Compra; Detalle_B_Venta. Las tablas están relacionadas por Codigo_Articulo de uno a varios con la combinación "incluir solo las filas donde los campos combinados de ambas tablas sean iguales". Al agregar la tabla Articulos y Detalle_F_Compra funciona bien, el problema esta al agregar cualqueira de las otras tablas, ya que hay varias Facturas y Boletas que se vende el mismo producto. Por ejemplo; En la tabla Detalle_F_Compra tengo 20 ampolletas y en la tabla Detalle_F_Venta tengo dos facturas, una con 2 ampolletas vendidas y la otra factura con 5 ampolletas. Al revisar la consulta en la columna cantidad aparecen las dos cantidades de dichas facturas, pero en la columna cantidad de la tabla Detalle_F_Compra aparece 2 veces la cantidad de 20 ampolletas.

1 Respuesta

Respuesta
2

La combinación de la tabla artículos con las otras tres tiene que ser del tipo: "mostrar todos los registros de Artículos y solo aquellos de LaOtraTabla donde los campos combinados sean iguales"

Para que lo veas con un ejemplo, es lo mismo que aquí, pero en tu caso con más tablas: http://neckkito.xyz/nck/index.php/ejemplos/19-aplicaciones/186-gestion-almacen 

Excelente Master, una vez más. Muchas gracias por tu ayuda

Me podrías aclarar la programación de FSALIDA . Que significa "Declaramos las variables"  vProd; vCant; vCantStock, ya que me gustaría agregarlo a mi formulario pero no se si funcionara con esos datos

Private Sub CantS_AfterUpdate()
'Declaramos las variables
Dim vProd As Long
Dim vCant As Integer, vCantStock As Integer

Así es como me quedo el código, pero me sale un error cuando en el formulario cargo la cantidad a vender.

Private Sub CANTIDAD_FV_AfterUpdate()
'Declaramos las variables
Dim vProd As Long
Dim vCant As Integer, vCantStock As Integer
Dim rst As DAO.Recordset
'Cogemos el identificador del producto
vProd = Nz(Me.CODIGO_ARTICULO_FV.Value, 0)
'Cogemos la cantidad introducida
vCant = Nz(Me.CANTIDAD_FV.Value, 0)
'Si no hubiera cantidad introducida salimos del proceso
If vCant = 0 Then Exit Sub
'Creamos el recordset
Set rst = CurrentDb.OpenRecordset("STOCK_E_INVENTARIO", dbOpenSnapshot)
With rst
'Nos situamos en el primer registro
.MoveFirst
'Iniciamos el recorrido de registros hasta encontrar la referencia
'con la que estamos trabajando en el formulario
Do Until .EOF
'Cuando lo encontramos...
If .Fields("CODIGO_ARTICULO_A").Value = vProd Then
'Cogemos el stock existente
vCantStock = .Fields("STOCK").Value
'Le restamos la cantidad que estamos sacando
vCantStock = vCantStock - vCant
Select Case vCantStock
'Si el resultado es negativo no permitimos sacar esa cantidad
Case Is < 0
MsgBox "NO HAY STOCK SUFICIENTE DE ESTE PRODUCTO" & vbCrLf & vbCrLf _
& "EL STOCK ACTUAL DEL PRODUCTO ES" & vCantStock + vCant & _
" unidades", vbCritical, "SIN STOCK"
'Borramos la cantidad introducida
Me.CODIGO_ARTICULO_FV.Value = Null
'Es necesario hacer un rebote de foco para volver a situar
'el enfoque en CantS
Me.CODIGO_ARTICULO_FV.SetFocus
Me.CANTIDAD_FV.SetFocus
Exit Do
'Si queda stock, pero es inferior a 10 unidades, lanza un aviso
Case Is <= 10
MsgBox "¡ATENCION! EL STOCK QUE QUEDARA DE ESTE PRODUCTO ES DE" _
& vCantStock & " UNIDADES", vbInformation, "STOCK CRÍTICO"
Exit Do
End Select
End If
.MoveNext
Loop
End With
'Cerramos conexiones y liberamos memoria
rst.Close
Set rst = Nothing
End Sub

Con la línea Dim vProd As Long, estás declarando una variable de tipo número largo, y por lo que veo, tu código de producto es un texto, por eso el error te fice que no coinciden los tipos. La variable la tendrás que declarar así :

Dim vProd As string

Y asignarla así :

vProd = Nz(Me.CODIGO_ARTICULO_FV.Value, "")

Ahora me sale este error

Ya corregí este ultimo error, cambiando el nombre del campo. así que muchas gracias por tu ayuda. El sistema funciona a la perfección. una brazo

Me alegro de que hayas sido capaz de resolver ese error y de ver que todo te funciona correctamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas