Access - Ayuda a actualizar inventario por fas

 
Vista:

Ayuda a actualizar inventario por fas

Publicado por Mimy (4 intervenciones) el 26/06/2007 23:03:10
Hola ya estuve probando el código que me envió pero me hace lo mismo, anteriormente se me olvidó comentar que al momento de actualizar manda un mensaje el sig: Va a actualizar 5 filas(s) si hace clic en sí, no podrá utilizar el comando deshacer... ¿Está seguro de que desea actualizar estos registros? si o nó. osea actualiza todos loe registros que tengo.

por favor si alguien me puede ayudar, esto es la explicación de mi duda:
tengo mi BD para un punto de venta de una farmacia, mis tablas son: productos, clientes, proveedores, departamentos, personal que labora, ventas,detalle de venta, en un formulario de ventas tengo un subformulario de detalle de ventas en donde tengo Idventa, fecha, datos del cliente, personal que atendió la venta, IdProducto,Descripción,Precio,Descuento,PrecioconDescuento, CantidadExistencia, CantidadSolicitada =Cantidad,subtotal y total. En el campo CantidadSolicitada en el evento despues de actualizar tengo un código para que al momento que escriba la cantidad requerida me aparezca si hay o no y que me actualice la existencia en la tabla productos, pero tengo un error porque me actualiza toda la columna de CantidadExistencia, ej: si tengo 3 Vitacilina y pido 2 me resta esas 2 a todos los productos y solo debe ser a la vitacilina. El código que tengo es el siguiente:

Private Sub Cantidad_AfterUpdate()

Dim Actualiza As String
If Me.CantidadExistencia <= 0 Then
MsgBox "No hay Existencias de este Artículo", vbCritical, "Aviso"
Me.Cantidad.SetFocus: Me.Cantidad = 0
Exit Sub
End If
If Me.CantidadExistencia < Me.Cantidad Then
MsgBox "La Compra no puede ser mayor que las Existencias actuales." & _
Chr(10) & "Esta Compra queda reducida a " & Me.CantidadExistencia & " Unidades.", vbInformation, "Aviso"
Me.Cantidad = Me.CantidadExistencia And CantidadExistencia = 0
End If
Actualiza = "UPDATE productos SET CantidadExistencia = CantidadExistencia - Cantidad WHERE IdProducto ='" & Me.IdProducto & "'"
DoCmd.RunSQL Actualiza
Me.CantidadExistencia.Requery
If CantidadExistencia < 0 Then
CantidadExistencia = 0
End If
End Sub

saludos
Mimy
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Actualización de existencia en tabla de productos al realizar ventas

Publicado por Alejandro (4142 intervenciones) el 14/08/2023 21:39:11
El problema que estás experimentando se debe a que tu sentencia SQL en la variable `Actualiza` está actualizando todos los registros en la tabla `productos` en lugar de solo el registro correspondiente al `IdProducto` seleccionado en el formulario. Para solucionar esto, debes asegurarte de que la condición del `UPDATE` esté correctamente filtrada por `IdProducto`.

Aquí está el código corregido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Cantidad_AfterUpdate()
 
    Dim Actualiza As String
    If Me.CantidadExistencia <= 0 Then
        MsgBox "No hay Existencias de este Artículo", vbCritical, "Aviso"
        Me.Cantidad.SetFocus: Me.Cantidad = 0
        Exit Sub
    End If
    If Me.CantidadExistencia < Me.Cantidad Then
        MsgBox "La Compra no puede ser mayor que las Existencias actuales." & _
        Chr(10) & "Esta Compra queda reducida a " & Me.CantidadExistencia & " Unidades.", vbInformation, "Aviso"
        Me.Cantidad = Me.CantidadExistencia
    End If
    Actualiza = "UPDATE productos SET CantidadExistencia = CantidadExistencia - " & Me.Cantidad & " WHERE IdProducto ='" & Me.IdProducto & "'"
    DoCmd.RunSQL Actualiza
    Me.CantidadExistencia.Requery
    If CantidadExistencia < 0 Then
        CantidadExistencia = 0
    End If
End Sub

En el código corregido, he modificado la parte del `UPDATE` para que solo afecte al registro con el `IdProducto` correspondiente. También he corregido la línea `Me.Cantidad = Me.CantidadExistencia And CantidadExistencia = 0`, que estaba causando una comparación incorrecta.

Asegúrate de probar este código y ajustarlo según tus necesidades específicas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar