none
reducir la cantidad de un producto después de una venta para el registro de inventario RRS feed

  • Pregunta

  • tengo este formulario y ya puedo registrar lo que es la factura de dicha venta, El único detalle que falta es que se descuente cada venta de los productos registrados en el datagridview.

    cada vez puedo ir agregando artículos uno por uno y se van agregando al datagridview pero lo que quiero es que cuando de aguardar, la tabla productos se descuenta la cantidad de cada uno de los productos que se va a vender y que están registrados en el datagridview del carrito de venta.

    tomando en cuenta el codigo dl producto y la cantidad registrada en el datagriview

    martes, 21 de julio de 2020 12:32

Respuestas

Todas las respuestas

  • Este es un ejemplo de como actualizar el campo stock de la tabla Productos. La base de datos es de sqlserver.

     public static bool Guardar(Int32 IdProd, Int32 Cant)
        {
          bool rta = false;
          using (SqlConnection cn = new SqlConnection(......))//datos de la conexion
          {
            cn.Open();
            string sql = "UPDATE Productos SET stock = stock - @Cant WHERE IdProd = @IdProd";
            SqlCommand cmd = new SqlCommand(sql, cn);
            cmd.Parameters.AddWithValue("@IdProd", IdProd);
            cmd.Parameters.AddWithValue("@Cant", Cant);
            
            return (int)cmd.ExecuteNonQuery() > 0;
          }
          return rta;
        }
    Deberías hacer un bucle y para cada fila de la grilla invocas a método Guardar pasándolo los parámetros


    • Editado AntiWork martes, 21 de julio de 2020 13:26
    martes, 21 de julio de 2020 13:23
  • ese código lo he usado algunas beses para cambiar datos en especifico pero aquí en este caso es una variedad de productos que debo descontar no solo uno.

    en este caso son los tres productos que están en el data gridview que debo descontar de la tabla producto

    martes, 21 de julio de 2020 13:31
  • Por eso te dije que hagas un bucle que recorra la grilla y por cada fila que va pasando se va guardando.

    No te puedo dar mas detalles porque vos no das información, por ejemplo como se carga la grilla


    • Editado AntiWork martes, 21 de julio de 2020 13:41
    martes, 21 de julio de 2020 13:39
  • Algo así podría ser el bucle.

    private void GuardarVenta_Click(object sender, EventArgs e)
            {
    
              foreach (DataGridViewRow fila in grVentas.Rows)
              {
                int idProd = 0;
                int cant = 0;
                bool datosValidos =int.TryParse(fila.Cells["IdProd"].Value.ToString(),out idProd);
                datosValidos =int.TryParse(fila.Cells["Cant"].Value.ToString(),out cant);
    
                if (datosValidos)
                  Guardar(idProd , cant);
              }
            }


    martes, 21 de julio de 2020 14:03
  • Hola

    ¿Te han funcionado las respuestas? Si nos puedes actualizar tu estado, sería genial!

    Saludos

    miércoles, 22 de julio de 2020 15:07
    Moderador
  • lo estoy haciendo de la siguiente manera pero aun no lo descuenta 

     public void inventariodeventa()
            {
                using (SqlConnection conexion = dbcomun.ObtnerCOnexion())
                {
                    string codigopro = "";
                    string codigoproductodgv = "";
                    decimal cantidad = 0;
                    decimal cantidaddgv = 0;




                    for (int i = 0; i < mdgvxDETFACT.Rows.Count; i++)
                    {
                   ///     foreach (DataGridViewRow fila in mdgvxDETFACT.Rows)
                      //  {
                                        /// siclo para determinar los campor de datagridview
                            codigoproductodgv = Convert.ToString(mdgvxDETFACT.Rows[anNumeroFila].Cells[0].Value);
                                  cantidaddgv = Convert.ToDecimal(mdgvxDETFACT.Rows[anNumeroFila].Cells[4].Value);

                            string query = "select Cantidad,codigo from dbo.producto WHERE codigo = @codigo ";
                            SqlCommand comando = new SqlCommand(query, conexion);
                            comando.Parameters.AddWithValue("@codigo", codigoproductodgv);

                            SqlDataAdapter di = new SqlDataAdapter(comando);
                            DataTable dst = new DataTable();
                            di.Fill(dst);


                            for (int a = 0; a < dst.Rows.Count; a++)
                            {
                                // siclo para determinar los datos de la tabla
                                codigopro = Convert.ToString(dst.Rows[a][1]);
                                cantidad = Convert.ToDecimal(dst.Rows[a][4]);
                            }
                        }



                        if (codigoproductodgv == codigopro)
                        {
                                         /// actualisar los datos de la tabla
                            decimal nuevacant = cantidad - cantidaddgv;

                            ///actualizar la cantidad del producto
                            string query = "UPDATE dbo.producto SET Cantidad = @Cantidad  WHERE codigo = @codigo";

                            SqlCommand comando = new SqlCommand(query, conexion);
                            comando.Parameters.AddWithValue("@Cantidad", nuevacant);
                            comando.Parameters.AddWithValue("@codigo", codigopro);
                            comando.ExecuteNonQuery();



                        
                    }
                }
            }
        }

    miércoles, 5 de agosto de 2020 23:15
  • lo que quiero que los producto que agregue al carrito (datagridview) se descuente la cantidad de cada uno de los productos en la tabla producto en el campo cantidad(que valla disminuyendo a la hora de hacer la venta )

    que si tengo 5 productos que al presionar el botón guardar se descuenten cada uno en su respectivos campos esto es para el control de inventario de los productos 

    jueves, 6 de agosto de 2020 14:42