Actualizar Inventario del Producto seleccionado

Tengo una base de datos que controla las compras y ventas de un almacen. Y tengo organizada las tablas así:
1. Producto= CodProducto + CodCateg + Nombre + Unid + Stock
2. Venta= NoVenta + Fecha + Empleado
3. DetalleVenta= CodDetVenta + NoVenta + CodProducto + Cantidad
4. Compra = NoCompra + Fecha + Empleado + Nota
5. DetalleCompra= CodDetCompra + NoCompra + CodProducto + Cantidad

Diseñe un Form - SubForm de Venta y DetalleVenta, para hacer facturas de venta, donde Una Venta puede tener varios productos. Y en un botón llamado Descargar después del campo Cantidad puse el siguiente código:

' Actualizar stock codigo DAO
Dim dbs As DAO.Database
Dim rstProducto As DAO.Recordset
Dim rstDetalleVenta As DAO.Recordset
Set rstDetalleVenta = CurrentDb.OpenRecordset("select * from DetalleVenta where NoVenta = " & Me!NoVenta)
Set rstProducto = CurrentDb.OpenRecordset("select * from Producto where CodProducto=" & Me!CodProducto)
Do Until rstDetalleComp.EOF
rstProducto.FindFirst "CodProducto=" & rstDetalleVenta!CodProducto
If rstProducto.NoMatch Then
'No se encontrol el Producto Seleccionado
Else
rstProducto.Edit
rstProducto!Stock = rstProducto!Stock + rstDetalleComp!Cantidad
rstProducto.Update
End If
rstDetalleventa.MoveNext
Loop
rstDetalleVenta.Close
Set rstProducto = Nothing

La acción se realiza correctamente cuando ingreso un producto y hago clic en el botón, pero si ese mismo producto lo selecciono una vez más en la misma venta, se suman las dos cantidad y se descarga del stock. Lo que necesito, es que solamente se descargue la cantidad en el registro donde estoy posesionado.

1 Respuesta

Respuesta
2

Jorge: La síntesis de lo que pretendes la entiendo bién y el código hasta la línea>>

Set RstProducto ............., lo ve aunque sobre la variable dbs As DAO.Database, porque en lo que pones no lo usas.

Si dices que te funciona ese código he de creerte, pero inmediatamente después de la línea que te cito hay la de un Recordset que no veo declarado >> Do Until RstDetalleComp. EOF

Casi al final adelantas un registro de RstDetalleVenta...

En definitiva, y a mi modo de ver, primero debes buscar la coherencia del código, ya que tu debes saber en qué evento es el mejor. No obstante si necesitas algo más de ayuda me comentas. Un saludo >> Jacinto

La verdad que ajuste el código a una respuesta que mire por allí. Pero no se como resolver el inconveniente. En una venta con Noventa: 24 agregué 4 líneas de producto y aplique el código y se me descarga la cantidad. Pero si luego agregó otra línea de producto con el codproducto igual a otro ingresado me suma las cantidades de las dos líneas de producto y luego me resta del stock. Sabiendo que ha había aplicado la descarga de ese otro producto. Lo que no sé cómo hacer es que solamente se descargue o aplique el código sobre el registro seleccionado, sin importar que haya ingresado el mismo Producto antes en la misma venta.

Partiendo de que ese código pueda arreglarse y seguro que funcionaría, lo que veo es que no hay necesidad de usar todo eso cuando puedes ejecutar una consulta de Actualización y éste código en el Evento después de Actualizar de Cantidad en DetalleVenta.

Suponiendo que tu Formulario de Venta se llama igual que la Tabla o sea >> Venta y el SubFormulario se llama DetalleVenta, escribe éste código (en el SubFormulario):

Private Sub Cantidad_AfterUpdate()
DoCmd.RunCommand acCmdSaveRecord
DoCmd.SetWarnings False
DoCmd.RunSQL"UPDATE Producto Set Stock=Stock-Cantidad WHERE CodProducto=Forms!Venta!DetalleVenta.Form!CodProducto"
DoCmd.SetWarnings True
End Sub

Si copias y pegas, recuerda activar el [Procedimiento de Evento]. Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas