none
¿Como restar productos en el stock al momento de efectuar una venta? RRS feed

  • Pregunta

  • Como la pregunta especifica, ando realizan un sistema de venta, hasta ahorita logro realizar la mayor parte de las operaciones hasta llegar al crystal report, sin embargo, tengo un detalle, necesitao restar la cantidad de productos que salen al total de productos que hay en existencia de ese articulo.

    Ahora, un detalle importante a mencionar es que tengo que recorrer dos listbox para obtener su nombre y la cantidad de productos que salen. Estos listbox se llenan con los datos correspondientes de acuerdo a los productos que el usuario haya marcado. El formulario se ve algo asi:

      Listbox1           Listbox2

    Acumulador       Cantidad

     Producto1               1

     Producto2               1

     Producto3               1

    Como es de suponer necesito realizar un UPDATE para actualizar los productos que salen, sin embargo, cuando ejecuto mi codigo, mi proceso se realiza de acuerdo al numero de productos que tenga mis listbox; es decir, si tengo 5 productos en los listbox, se realiza 5 veces, si tengo 3 se realiza 3 veces y asi suceviamente.

    Serian tan amables de decirme como evito ese error, de antemano gracias por sus respuestas, eh aqui mi codigo:

     For j = 0 To Me.LsbBCI.Items.Count - 1
                For i = 0 To Me.LsbCantidad.Items.Count - 1
                    If conexion.State() = ConnectionState.Closed Then
                        conexion.Open()
                    End If
                    'Conexión a base de datos.
                    sql = "SELECT existencia FROM acumulador"
                    mycommand.Connection = conexion
                    mycommand.CommandText = sql
                    Try
                        mycommand.Parameters.Clear()
                        mycommand.CommandText = "UPDATE acumulador SET existencia=existencia - " & Me.LsbCantidad.Items(i) & " WHERE bci='" & Me.LsbBCI.Items(j) & "'"
                        mycommand.ExecuteNonQuery()
                        MsgBox("Operacion realizada correctamente.", MsgBoxStyle.Information, "¡Notificación!")
                        Refresh()
                    Catch ex As Exception
                        MsgBox(ex.Message)
                    End Try
                    conexion.Close()
                Next
            Next


    domingo, 19 de mayo de 2013 14:03

Respuestas

  • hola

    lo primero que puedo ver como incorrecto es porque usas ListBox ? este control es incorrecto para lo que lo usas

    deberias utilizar un datagridview para mostrar la info en forma de tabla y por cada row mostrar el producto y la cantidad de forma relacionada

    -------

    despues para que usas esto

    mycommand.Parameters.Clear()

    si ni quiera estas usando parametros, lo que ahces e concatener en un string los valores

    deberias usar

    Try
    
    	If conexion.State() = ConnectionState.Closed Then
    		conexion.Open()
    	End If
    
    	Dim query As String = "UPDATE acumulador SET existencia=existencia - @cant WHERE bci= @bci"
    	SqlCommand mycommand = new SqlCommand(query,conexion)
    	For i = 0 To Me.LsbBCI.Items.Count - 1
    		
    		mycommand.Parameters.Clear()
    		mycommand.Parameters.AddWithValue("@cant", Me.LsbCantidad.Items(i))
    		mycommand.Parameters.AddWithValue("@bci", Me.LsbBCI.Items(i))
    		mycommand.ExecuteNonQuery()
    				
    	Next
    
    	MsgBox("Operacion realizada correctamente.", MsgBoxStyle.Information, "¡Notificación!")
    	Refresh()
    	conexion.Close()
    	
    Catch ex As Exception
    	MsgBox(ex.Message)
    End Try

    se supone que la cantidad de items de los listbox son identica por lo que haces solo el loop de una sola

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    domingo, 19 de mayo de 2013 14:41

Todas las respuestas

  • hola

    lo primero que puedo ver como incorrecto es porque usas ListBox ? este control es incorrecto para lo que lo usas

    deberias utilizar un datagridview para mostrar la info en forma de tabla y por cada row mostrar el producto y la cantidad de forma relacionada

    -------

    despues para que usas esto

    mycommand.Parameters.Clear()

    si ni quiera estas usando parametros, lo que ahces e concatener en un string los valores

    deberias usar

    Try
    
    	If conexion.State() = ConnectionState.Closed Then
    		conexion.Open()
    	End If
    
    	Dim query As String = "UPDATE acumulador SET existencia=existencia - @cant WHERE bci= @bci"
    	SqlCommand mycommand = new SqlCommand(query,conexion)
    	For i = 0 To Me.LsbBCI.Items.Count - 1
    		
    		mycommand.Parameters.Clear()
    		mycommand.Parameters.AddWithValue("@cant", Me.LsbCantidad.Items(i))
    		mycommand.Parameters.AddWithValue("@bci", Me.LsbBCI.Items(i))
    		mycommand.ExecuteNonQuery()
    				
    	Next
    
    	MsgBox("Operacion realizada correctamente.", MsgBoxStyle.Information, "¡Notificación!")
    	Refresh()
    	conexion.Close()
    	
    Catch ex As Exception
    	MsgBox(ex.Message)
    End Try

    se supone que la cantidad de items de los listbox son identica por lo que haces solo el loop de una sola

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    domingo, 19 de mayo de 2013 14:41
  • Muchas gracias amigo por ayudarme nuevamente en esta ocacion, gracias a ti es que tengo mi sistema listo, lamento las molestias causadas.
    domingo, 19 de mayo de 2013 15:36