Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Restar Stock cuando se haga una venta

Estas en el tema de Restar Stock cuando se haga una venta en el foro de Visual Basic clásico en Foros del Web. Hola a todos!!! Espero que esta sea la útlima vez que pido ayuda! Resulta que tengo un formulario para realizar VENTAS. Cuando vendo artículos, la ...
  #1 (permalink)  
Antiguo 02/12/2009, 16:39
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 0
Restar Stock cuando se haga una venta

Hola a todos!!!
Espero que esta sea la útlima vez que pido ayuda!

Resulta que tengo un formulario para realizar VENTAS. Cuando vendo artículos, la idea es que el stock de esos artículos se resten según la cantidad que vendí. Para ello utilicé este codigo:

Código:
' grabar factura
For fila = 1 To Grid1.Rows - 1
   CnN.Execute "INSERT INTO ventas(Cliente, CantidadVendida, Detalle, Precio , PrecioTotal, NumeroFactura, Codigo, Fecha, Unidad) VALUES ('" & _
                Grid1.TextMatrix(fila, 0) & "', '" & Grid1.TextMatrix(fila, 1) & "', '" & _
                Grid1.TextMatrix(fila, 2) & "', '" & Grid1.TextMatrix(fila, 3) & "',  '" & _
                Grid1.TextMatrix(fila, 4) & "', '" & Grid1.TextMatrix(fila, 5) & "', '" & Grid1.TextMatrix(fila, 6) & "', '" & Grid1.TextMatrix(fila, 7) & "', '" & Grid1.TextMatrix(fila, 8) & "')"
Next fila
' leer codigo de stock
For fila = 1 To Grid1.Rows - 1
    datos = "select * from stock where codigo = '" & Grid1.TextMatrix(fila, 6) & "' "
Next fila
    tablas_apertura1.Open datos, conexion_basedatos
    tengo = tablas_apertura1!cantidad
    tablas_apertura1.Close

' restar stock
For fila = 1 To Grid1.Rows - 1
 queda = tengo - " & Grid1.TextMatrix(fila, 1) & "
Next fila

' regraba nueva cantidad
For fila = 1 To Grid1.Rows - 1
datos = "Update stock set cantidad = " & queda & " where codigo = '" & Grid1.TextMatrix(fila, 6) & "' "
conexion_basedatos.Execute datos
Next fila
Antes usaba TextBox's para realizar este trabajo y funcionaba bien, pero ahora que uso el MSFlexGrid me aparece el siguiente error:



Y si le doy a Depurar me marca la siguiente línea:



Antes trabajaba con TextBox's en vez de FlexGrid's y el código funcionaba

¿Cómo puedo lograr que cuando haga una venta, se reste la cantidad de esos
artículos vendidos? Esta resta, debe hacerse teniendo en cuenta que se debe restar cantidad de la tabla stock de la base de datos

Disculpen las molestias!
Un saludo y muchas gracias.
  #2 (permalink)  
Antiguo 03/12/2009, 08:44
 
Fecha de Ingreso: noviembre-2007
Mensajes: 133
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Restar Stock cuando se haga una venta

que base de datos usas?
no entiendo muy bien la logica porque me parece que deberías usar una tabla de ventas donde registras todos los datos de la venta y otra det_ventas donde registras los detalles de cada producto vendido.
Yo a eso lo hago con procedimientos almacenados en mysql. Con respecto al stock, vos traes todos los datos de un producto y calculas cuanto tiene, despues restas lo que vendes y te da lo que queda para recien ahi actualizar la tabla stock, pero me parece que en vez de hacer todo eso deberias hacer un ciclo for que por cada fila de la grilla actualice el stock asi
Código vb:
Ver original
  1. for i = 1 to filas
  2.     "update stock set cantidad = cantidad - " val(grilla.textmatriz(i,1)) & "where codigo = " &         val(grilla.textmatriz(i, 0))
  3. next

de todas formas yo a eso lo hago con procedimientos alamcenados asi de paso valido que un valor en la grilla sea del tipo correcto
Me paso cuando empece que no le daba mucha importancia a la recursos que consumían mis consultas pero al darme cuenta de lo que eso significaba me toco cambiar muchísimo código de mis programas
  #3 (permalink)  
Antiguo 03/12/2009, 08:48
 
Fecha de Ingreso: noviembre-2006
Mensajes: 227
Antigüedad: 17 años, 6 meses
Puntos: 6
Respuesta: Restar Stock cuando se haga una venta

Mira yo te recomiendo que antes de agregar salidas a tu Grilla te haga la comparación de cuantos tienes, si es igual a O que no te agregue nada te marque un error. Si existen entonces te los pueda agregar a tu grilla. y con respecto a agregar ventas y restarlos solo tendrias que agregar una linea mas y con eso te funciona tu programa.

te quedaria mas o menos asi

Código:
For fila = 1 To Grid1.Rows - 1
   CnN.Execute "INSERT INTO ventas(Cliente, CantidadVendida, Detalle, Precio , PrecioTotal, NumeroFactura, Codigo, Fecha, Unidad) VALUES ('" & _
                Grid1.TextMatrix(fila, 0) & "', '" & Grid1.TextMatrix(fila, 1) & "', '" & _
                Grid1.TextMatrix(fila, 2) & "', '" & Grid1.TextMatrix(fila, 3) & "',  '" & _
                Grid1.TextMatrix(fila, 4) & "', '" & Grid1.TextMatrix(fila, 5) & "', '" & Grid1.TextMatrix(fila, 6) & "', '" & Grid1.TextMatrix(fila, 7) & "', '" & Grid1.TextMatrix(fila, 8) & "')"

'Aqui restamos al stock
Cnn.Execute "UPDATE stock Set cantidad  = cantidad  - " & val(Grid1.TextMatrix(fila, 1)) & " WHERE codigo = '" & Grid1.TextMatrix(fila, 6) & "'"

Next fila
Cada vez que recorra el ciclo agrega los datos a tu tabla ventas pero a la vez te actualiza el stock de tu articulo.

por eso te decia antes de agregarlo a tu grilla primero revisa si hay en existencias agregas si no hay no agregas. asi de facil

Espero te sirva cualquier cosa aqui estamos. buen dia
  #4 (permalink)  
Antiguo 03/12/2009, 10:02
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: Restar Stock cuando se haga una venta

Algo fuera del tema, no seria mejor que metieras eso en una transaccion?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:25.