** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Codigo para disminuir stock no funciona bien
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoCodigo para disminuir stock no funciona bien

 Responder Responder
Autor
Mensaje
maxpro Ver desplegable
Colaborador
Colaborador


Unido: 04/Marzo/2006
Localización: Argentina
Estado: Sin conexión
Puntos: 1558
Enlace directo a este mensaje Tema: Codigo para disminuir stock no funciona bien
    Enviado: 12/Julio/2023 a las 19:18
Estimados buen dia por aqui, en San Luis , Argentina.

Tengo un código que esta en un subformulario de ventas el cual tiene un campo "Cantidad" (nos centraremos en ese campo que es el que me esta causando problemas en el codigo) Antes que nada aclarar que tanto en la tabla, el la consulta y en el formulario el formato es Numerico, fijo y 0 decimales.

La consulta DisminuirStock es una consulta que depende de las tablas "tbProductos" relacionado por Id a la tabla "tbSalidas" y los campos son "Id" de "tbProductos" , "CantVentas" de "tbSalidas"

El codigo lo que debe hacer es agregar a la "tbSalidas" el valor que este en el campo cantidad al presionar el boton Guardar.

El problema es que si en el campo "Cantidad" coloco 1 el codigo en la tabla coloca 2 en lugar de 1, el codigo es el siguiente:

Private Sub Guardar_Click()
    Dim rs As DAO.Recordset
    Set rs = Me![VentaRapidaSub Subformulario].Form.RecordsetClone
    
    rs.MoveFirst
    
    Do Until rs.EOF
        ' Obtener el código del producto
        Dim Codigo As String
        Codigo = rs("Codigo")
        
        ' Actualizar la tabla DisminuirStock para el producto actual
        Dim strSQL As String
        strSQL = "UPDATE DisminuirStock SET DisminuirStock.CantVentas = DisminuirStock.CantVentas + " & CInt(rs("Cantidad")) & " WHERE DisminuirStock.Id = '" & Codigo & "'"

        CurrentDb.Execute strSQL
        
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
MsgBox "El Stock de los Productos se ha Actualizado correctamente.", vbInformation, "Actualizar Stock"
DoCmd.GoToRecord , , acNewRec
End Sub

Saludos
-------Maxpro-------

San Luis - Argentina
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1536
Enlace directo a este mensaje Enviado: 15/Julio/2023 a las 23:13
A mí no me gusta ejecutar consultas de acción (UPDATE) sobre consultas de selección, te puedes encontrar resultados extraños. Como al final lo que interesa ajustar es un campo de una tabla, es más seguro dirigirse directamente a ese campo:

strSQL = "UPDATE tbSalidas SET tbSalidas.CantVentas = tbSalidas.CantVentas + " & CInt(rs("Cantidad")) & " WHERE tbSalidas.Id = '" & Codigo & "'"

Pero tú tienes datos en un subformulario, y por lo que parece, está basado en una consulta o tabla. Así, la pregunta es: ¿de qué tabla o consulta toma los datos ese subformulario? Porque también puede ocurrir que estés actualizando esa cantidad 2 veces.
Arriba
maxpro Ver desplegable
Colaborador
Colaborador


Unido: 04/Marzo/2006
Localización: Argentina
Estado: Sin conexión
Puntos: 1558
Enlace directo a este mensaje Enviado: 17/Julio/2023 a las 15:46
Hola pitxiku.

Estoy revisando el código porque aun poniendo el nombre de la tabla no hace nada el codigo! me sale el msgbox que se realizo exitosamente pero aun asi no modifica nada.

Gracias igual por tu recomendacion.

Saludos
-------Maxpro-------

San Luis - Argentina
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1536
Enlace directo a este mensaje Enviado: 17/Julio/2023 a las 18:59
Si sigues con el primer código que posteaste, el MsgBox saldrá siempre que no ocurra un fallo, independientemente de si se actualizó algún registro.

Pon un punto de interrupción para ver los valores de las variables, valores, controles,... O usa la ventana Inmediato para ver la sentencia SQL que estás ejecutando. Te será más fácil para encontrar el fallo.
Arriba
maxpro Ver desplegable
Colaborador
Colaborador


Unido: 04/Marzo/2006
Localización: Argentina
Estado: Sin conexión
Puntos: 1558
Enlace directo a este mensaje Enviado: 17/Julio/2023 a las 22:06
Si, fue lo primero que hice y nada, ningun error pero sigue sin funcionar, lo reescribi y ahi funciona!
el nuevo codigo es:

Private Sub Guardar_Click()
    Dim rs As DAO.Recordset
    Set rs = Me![VentaRapidaSub Subformulario].Form.RecordsetClone
    
    rs.MoveFirst
    
    Do Until rs.EOF
        ' Obtener el código del producto
        Dim Codigo As String
        Codigo = rs("Codigo")
        
        ' Actualizar la tabla DisminuirStock para el producto actual
        Dim strSQL As String
        strSQL = "UPDATE tbSalidas SET tbSalidas.CantVentas = tbSalidas.CantVentas + " & rs("Cantidad") & " WHERE tbSalidas.Id_Venta = '" & Codigo & "'"
        CurrentDb.Execute strSQL
        
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
    MsgBox "El Stock de los Productos se ha Actualizado correctamente.", vbInformation, "Actualizar Stock"
    DoCmd.GoToRecord , , acNewRec
End Sub

Gracias igual por preocuparte en colaborar.
Saludos.

Edito: Ya se puede cerrar el hilo.


Editado por maxpro - 17/Julio/2023 a las 22:06
-------Maxpro-------

San Luis - Argentina
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable