none
Preciso de uma ajuda, Windows Forms CSharp RRS feed

  • Pergunta

  • Tenho um sistema de Vendas em CSharp ele dá baixa no estoque normalmente, mais preciso de que quando se retire um produto do estoque e acaso a quantidade estiver errada no Botão Editar consiga editar a quantidade. Pois fiz dois metódos de atualizar estoque um quando vai editar o valor ele soma no estoque e o outro retira se a quantidade digitada foi errada. Mas, o problema é que quando coloca adiciona o produto e dá baixa no estoque e depois vai editar ele está incluindo o valor digitado. Ex: Estoque 992 - Produto 1 - QTDE = 2 ai efetua a venda e vai para 990 se for no textbox e mudar e digitar 12 em vez dele tirar 12 sem contar o 2 ele conta o 2 e tira 14 do estoque.

    E queria saber onde coloco os métodos atualizarsaldo que um ele adiciona e outro ele retira do estoque.

    O AtualizarSaldo() ele retira do estoque O AtualizarSaldo1() ele adiciona ao estoque Portanto preciso saber como colcocar os dois métodos dentro do botão Editar

          
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    using System.IO;          //namespace para trabalhar com arquivos
    using System.Diagnostics; //namespace para executar progs externos
    
    namespace Mercado
    {
        public partial class Venda : Form
        {
            //estabelecer a conexão com o banco de dados
            private SqlConnection conexao = new SqlConnection();
    
            String StrConexao = "Data Source=" +
            "DESKTOP-FTH0L3V\\MARCIORICHARD;Initial Catalog=MERCADO; Persist Security Info=True; User ID=sa;Password=91975203;";
            //String StrConexao = "Data Source=MARCIO\\SQLEXPRESS;" +
            //"Initial Catalog=EXESTOQUE_2IA;Persist Security Info=True;User ID=sa;Password=91975203";        
    
            //SqlCommand é usado para passar o comando SQL para uma tabela
            //(.CommandText = "SELECT ... INSERT ... UPDATE... ou DELETE
            SqlCommand cmd = new SqlCommand();
            SqlDataReader Dr;
            //Montar DataTables das tabelas usadas no formulário
            DataTable DtVENDA = new DataTable();
            DataTable DtITENS = new DataTable();
            DataTable DtPRODUTO = new DataTable();
            DataTable DtCliente = new DataTable();
    
            Int32 iSaldo_Atual = 0; //variavel que guarda a quantidade atual do produto (txtSaldo.text)
    
            int iqtde = 0;
    
    
            public String chaveID; //variavel pública para guardar a chave ID do grupo
    
    
            public Venda()
            {
                InitializeComponent();
            }
    
            private void Venda_Load(object sender, EventArgs e)
            {
                btnSalvar.Enabled = false; groupBox1.Enabled = false;
                dataGridView1.Enabled = false;
            }
    
            private void mskData_Enter(object sender, EventArgs e)
            {
                if (mskData.Text == "  /  /")
                {
                    mskData.Text = DateTime.Today.ToString("dd/MM/yyyy");
                    txtHora.Text = DateTime.Now.ToShortTimeString();
                    btnSalvar.Enabled = true;
                }
            }
    
            private void btnSalvar_Click(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(mskData.Text.Trim()))
                {
                    MessageBox.Show("Data de Emissão Não Pode Ficar Em Branco.", "Atenção");
                    mskData.Focus();
                    return;
                }
    
                if (MessageBox.Show("Confirma a Gravação da Nova Venda?", "Atenção",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    conexao.ConnectionString = StrConexao;
                    cmd.Connection = conexao;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "INSERT INTO VENDA (DATA, HORA, VL_TOTAL) VALUES (@Data, @Hora, 0.00)";
    
                    //definir parâmetros
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@Data", mskData.Text);
                    cmd.Parameters.AddWithValue("@Hora", txtHora.Text);
    
    
                    try
                    {
                        conexao.Open();
                        cmd.ExecuteNonQuery();
                        dataGridView1.Enabled = true; //Liberar dataGridView
                        txtNr_Venda.Enabled = false; mskData.Enabled = false;
                        txtHora.Enabled = false; btnSalvar.Enabled = false;
                        btnSalvar.Enabled = false;
                        Recuperar_Ultima_venda();
                        groupBox1.Enabled = true;
                        txtValorTotal.Text = Convert.ToDouble(0.00).ToString("########0.00");
                        txtCodProduto.Focus();
                    }
    
                    catch (Exception ex) //catch = catar
                    {
                        MessageBox.Show(ex.Message.ToString(), "Atenção");  //mensagem que ajuda a identificar o erro(caso tenha)
                    }
                    finally
                    {
                        if (conexao.State == ConnectionState.Open)
                        {
                            conexao.Close();
                        }
                    }
                }
            }
    
            private void Recuperar_Ultima_venda()
            {
                if (conexao.State == ConnectionState.Open) conexao.Close();
    
                conexao.ConnectionString = StrConexao;
                cmd.Connection = conexao;
                conexao.Open();
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "SELECT * FROM VENDA WHERE NR_VENDA=IDENT_CURRENT('VENDA')";
                Dr = cmd.ExecuteReader();
                Dr.Read();
    
                txtNr_Venda.Text = Dr["NR_VENDA"].ToString();
                conexao.Close();
            }
    
            private void txtCodProduto_Leave(object sender, EventArgs e)
            {
    
                if (txtCodProduto.Text != "") //se o código do produto for diferente de branco
                {
                    conexao.ConnectionString = StrConexao;
                    cmd.Connection = conexao;
                    conexao.Open();
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "SELECT * FROM PRODUTO WHERE CODPROD = @Codigo";
    
                    //definir parametros
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@Codigo", txtCodProduto.Text);
    
                    Dr = cmd.ExecuteReader();
                    if (Dr.HasRows) //se encontrou o produto
                    {               //exibir a descrição, o preço de venda do produto e 1 na qtde.
                        Dr.Read();
                        txtDescricao.Text = Dr["DESCPROD"].ToString();
                        txtPrecoVenda.Text = Convert.ToDouble(Dr["PRVENDAPROD"]).ToString("########0.00");
                        iSaldo_Atual = Convert.ToInt32(Dr["QTDESTPROD"].ToString());
                        txtSaldo.Text = iSaldo_Atual.ToString();
                        txtQtde.Text = "1";
                    }
                    else //se não for encontrado
                    {
                        MessageBox.Show("Produto não cadastrado!", "Atenção");
                        txtCodProduto.Clear();
                        conexao.Close();
                        txtCodProduto.Focus(); //limpar o código e retornar
                        return;
                    }
                    if (conexao.State == ConnectionState.Open) conexao.Close();
                }
            }
    
            private void txtQtde_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8))
                    e.Handled = true;
            }
    
            private void txtQtde_Leave(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(txtQtde.Text))
                {
                    txtQtde.Enabled = true;
                    MessageBox.Show("Quantidade Não Pode Ficar em Branco!");
                    return;
                }
    
                if (Convert.ToInt32(txtQtde.Text) <= 0) //se a qtd for <= 0
                {
                    MessageBox.Show("Informe Uma Quantidade Válida", "Atenção");
                    txtQtde.Focus();
                    return;
                }
    
                if (Convert.ToInt32(txtSaldo.Text) <= 5) //se o saldo for <= 5
                {
                    MessageBox.Show("Produto em Estoque Acabando ", "Atenção");
    
                }
    
                if (iSaldo_Atual < (Convert.ToInt32(txtQtde.Text)))   //se o saldo atual for menor que a quantidade solicitada pelo produto
                {
                    MessageBox.Show("Saldo Insuficiente!", "Atenção");
                    txtCodProduto.Focus();
                    return;
                }
    
                try
                {
                    Int32 iqtde = Convert.ToInt32(txtQtde.Text);
                    Double dpreco_venda = Convert.ToDouble(txtPrecoVenda.Text);
                    Double dpreco_total = iqtde * dpreco_venda;
                    txtPrecoTotal.Text = Convert.ToDouble(dpreco_total).ToString("########0.00");
                    btnNovo.Enabled = true;
                }
    
                catch
                {
                    MessageBox.Show("Informe Uma Quantidade Válida!", "Atenção");
                    txtQtde.Focus();
                }
            }
    
            private void Totalizar_venda(Double ntotal_item)
            {
                Double nvalor_total = Convert.ToDouble(txtValorTotal.Text); //total atual
                nvalor_total += ntotal_item;                                //novo valor total
                conexao.ConnectionString = StrConexao;
                cmd.Connection = conexao;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "UPDATE VENDA SET VL_TOTAL = @ValorTotal WHERE NR_VENDA = @NrVenda";
                //definir parametros
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@NrVenda", txtNr_Venda.Text);
                cmd.Parameters.AddWithValue("@ValorTotal", nvalor_total);
                conexao.Open();
                cmd.ExecuteNonQuery();
                conexao.Close();
            }
            private void Exibir_Valor_Total_venda()
            {
                if (conexao.State == ConnectionState.Open) conexao.Close();
                conexao.ConnectionString = StrConexao;
                cmd.Connection = conexao;
                conexao.Open();
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "SELECT * FROM VENDA WHERE NR_VENDA= @NrVenda";
    
                //definir parâmetros
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@NrVenda", txtNr_Venda.Text);
    
                Dr = cmd.ExecuteReader();
                Dr.Read();
                txtValorTotal.Text = Convert.ToDouble(Dr["VL_TOTAL"]).ToString("########0.00");
                conexao.Close();
    
                txtCodProduto.Clear(); txtDescricao.Clear(); txtQtde.Clear();
                txtPrecoVenda.Clear(); txtPrecoTotal.Clear(); txtSaldo.Clear();
            }
    
            private void Exibir_Valor_Total_venda1()
            {
                if (conexao.State == ConnectionState.Open) conexao.Close();
                conexao.ConnectionString = StrConexao;
                cmd.Connection = conexao;
                conexao.Open();
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "SELECT * FROM ITENS WHERE NR_VENDA= @NrVenda";
    
                //definir parâmetros
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@NrVenda", txtNr_Venda.Text);
    
                Dr = cmd.ExecuteReader();
                Dr.Read();
                txtValorTotal.Text = Convert.ToDouble(Dr["PRECO_TOTAL"]).ToString("########0.00");
                conexao.Close();
    
                txtCodProduto.Clear(); txtDescricao.Clear(); txtQtde.Clear();
                txtPrecoVenda.Clear(); txtPrecoTotal.Clear(); txtSaldo.Clear();
            }
    
            private void btnNovo_Click(object sender, EventArgs e)
            {
                txtSaldo.Clear();
                Double ntotal_item = Convert.ToDouble(txtPrecoTotal.Text); //total do item
    
                conexao.ConnectionString = StrConexao;
                cmd.Connection = conexao;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "INSERT INTO ITENS (NR_VENDA, PRODUTO,QTDE, PRECO_UNIT,PRECO_TOTAL)" +
                    "  VALUES (@NrVenda, @CodProduto, @Qtde, @PrecoVenda, @PrecoTotal)";
    
                //definir parametros
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@NrVenda", txtNr_Venda.Text);
                cmd.Parameters.AddWithValue("@CodProduto", txtCodProduto.Text);
                cmd.Parameters.AddWithValue("@Qtde", txtQtde.Text);
                cmd.Parameters.AddWithValue("@PrecoVenda", Convert.ToDecimal(txtPrecoVenda.Text));
                cmd.Parameters.AddWithValue("@PrecoTotal", Convert.ToDecimal(txtPrecoTotal.Text));
    
                conexao.Open();
                cmd.ExecuteNonQuery();
                conexao.Close();
    
    
                btnNovo.Enabled = false;
                btnFinalizarVenda.Enabled = true;
                AtualizarSaldo(Convert.ToInt32(txtQtde.Text));
                Totalizar_venda(ntotal_item);  //totalizar a venda
                Exibir_Valor_Total_venda(); //após totalizar, exibir o novo valor total
    
                MontarListaItens(int.Parse(txtNr_Venda.Text));
                txtCodProduto.Focus();
                return;
            }
    
            private void MontarListaItens(int nNrVenda)
            {
                conexao.ConnectionString = StrConexao;
                try
                {
                    conexao.Open();
                }
                catch (System.Exception e)
                {
                    MessageBox.Show(e.Message.ToString());
                }
                if (conexao.State == ConnectionState.Open)
                {
                    cmd.Connection = conexao;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "SELECT PRODUTO.CODPROD, PRODUTO.DESCPROD, QTDE," +
                    "  PRECO_UNIT, PRECO_TOTAL FROM ITENS INNER JOIN PRODUTO ON " +
                    "  ITENS.PRODUTO = PRODUTO.CODPROD WHERE NR_VENDA = @NrVenda";
    
                    //definir parametros
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@NrVenda", nNrVenda);
    
                    Dr = cmd.ExecuteReader();
                    DtITENS.Clear();
                    DtITENS.Load(Dr);
                    dataGridView1.DataSource = DtITENS;
                    conexao.Close();
                    dataGridView1.AutoGenerateColumns = false;
                }
            }
    
            private void Imprimir_Cupom()
            {
                Int32 inrVenda = Convert.ToInt32(txtNr_Venda.Text);
                //Cupom CP = new Cupom();
                // CP.nrVenda = inrVenda;
                // CP.ShowDialog();
            }
    
            private void AtualizarSaldo(Int32 iQtde) //metodo para atualizar a quantidade do produto no banco de dados
            {
                Int32 iNova_qtde = iSaldo_Atual - iQtde;  //iNova_qtde(é a nova quantidade do banco de dados "QTDE") 
                //Que é igual a isaldo_atual - iQtde
                conexao.ConnectionString = StrConexao;
                cmd.Connection = conexao;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "UPDATE PRODUTO SET QTDESTPROD = @QTDE WHERE CODPROD = @Produto";
    
                //definir parametros
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@QTDE", iNova_qtde); //iNova quantidade será o novo valor da tabela QTDE
                cmd.Parameters.AddWithValue("@Produto", txtCodProduto.Text);
                conexao.Open();
                cmd.ExecuteNonQuery();
                conexao.Close();
            }
    
            private void AtualizarSaldo1(Int32 iQtde) //metodo para atualizar a quantidade do produto no banco de dados
            {
                Int32 iNova_qtde = iSaldo_Atual + iQtde;  //iNova_qtde(é a nova quantidade do banco de dados "QTDE") 
                //Que é igual a isaldo_atual - iQtde
                conexao.ConnectionString = StrConexao;
                cmd.Connection = conexao;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "UPDATE PRODUTO SET QTDESTPROD = @QTDE WHERE CODPROD = @Produto";
    
                //definir parametros
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@QTDE", iNova_qtde); //iNova quantidade será o novo valor da tabela QTDE
                cmd.Parameters.AddWithValue("@Produto", txtCodProduto.Text);
                conexao.Open();
                cmd.ExecuteNonQuery();
                conexao.Close();
            }
            private void btnexcluir_Click(object sender, EventArgs e)
            {
                Double ntotal_item = Convert.ToDouble(txtPrecoTotal.Text);
                iSaldo_Atual = Convert.ToInt16(txtSaldo.Text);
    
                if (MessageBox.Show("Confirma a Exclusão Desse Item?", "Atenção",
             MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
    
                    conexao.ConnectionString = StrConexao;
                    cmd.Connection = conexao;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "DELETE FROM ITENS WHERE Nr_Venda = @NrVenda AND PRODUTO = @Produto";
                    //definir parametros
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@NrVenda", txtNr_Venda.Text);
                    cmd.Parameters.AddWithValue("@Produto", txtCodProduto.Text);
    
    
                    try  //try = testar... se esse código não funcionar, executa o catch
                    {
                        conexao.Open();
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Item Excluído com Sucesso!");
                    }
                    catch (Exception ex) //catch = catar
                    {
                        MessageBox.Show(ex.Message.ToString(), "Atenção");  //mensagem que ajuda a identificar o erro(caso tenha)
                    }
                    finally
                    {
                        if (conexao.State == ConnectionState.Open)
                        {
                            conexao.Close();
    
                            btnexcluir.Enabled = false;
    
                            AtualizarSaldo((Convert.ToInt32(txtQtde.Text) * -1));
                            Totalizar_venda(ntotal_item * -1);
    
                            Exibir_Valor_Total_venda(); //após totalizar, exibir o novo valor total
    
                            MontarListaItens(int.Parse(txtNr_Venda.Text));
                            txtCodProduto.Focus();
    
                        }
                    }
                }
            }
    
            private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                txtCodProduto.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                txtDescricao.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
                txtPrecoVenda.Text = dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
                txtQtde.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();
                txtPrecoTotal.Text = dataGridView1.SelectedRows[0].Cells[4].Value.ToString();
    
                btnexcluir.Enabled = true;
                btnEditar.Enabled = true;
    
                MostrarSaldo();
            }
            private void MostrarSaldo()
            {
                conexao.ConnectionString = StrConexao;
                cmd.Connection = conexao;
                cmd.CommandType = CommandType.Text;
                conexao.Open();
                cmd.CommandText = "SELECT * FROM PRODUTO WHERE CODPROD = @Codigo";
    
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@Codigo", txtCodProduto.Text);
    
                Dr = cmd.ExecuteReader();
    
                if (Dr.HasRows)
                {
                    Dr.Read();
                    iSaldo_Atual = Convert.ToInt32(Dr["QTDESTPROD"].ToString());
                    txtSaldo.Text = iSaldo_Atual.ToString();
                    conexao.Close();
                }
            }
    
            private void btnFinalizarVenda_Click(object sender, EventArgs e)
            {
    
                if (MessageBox.Show("Confirma o Fechamento da Venda?", "Atenção",
                  MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    if (MessageBox.Show("Imprime está Venda?", "Atenção",
                        MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        Imprimir_Cupom();
                    }
                    txtNr_Venda.Clear(); txtHora.Clear(); txtValorTotal.Clear();
                    mskData.Clear();
                    txtNr_Venda.Enabled = true; mskData.Enabled = true; txtHora.Enabled = true;
                    btnSalvar.Enabled = true;
                    DtITENS.Clear();
                    dataGridView1.DataSource = DtITENS;
                    groupBox1.Enabled = false;
                    txtNr_Venda.Focus();
                    return;
                }
            }
    
            private void btnEditar_Click(object sender, EventArgs e)
            {
                Double ntotal_item = Convert.ToDouble(txtPrecoTotal.Text); //total do item
    
    
                { 
    
                        conexao.ConnectionString = StrConexao;
                        cmd.Connection = conexao;
                        cmd.CommandType = CommandType.Text;
                        cmd.CommandText = "UPDATE ITENS SET PRODUTO = @Produto, QTDE = @Qtde, PRECO_UNIT = @Preco_Unit, PRECO_TOTAL = @Preco_Total WHERE Nr_Venda = @Nr_Venda ";
    
                        //definir parâmetros
                        cmd.Parameters.Clear();
                        cmd.Parameters.AddWithValue("@Nr_Venda", txtNr_Venda.Text);
                        cmd.Parameters.AddWithValue("@Produto", txtCodProduto.Text);
                        cmd.Parameters.AddWithValue("@Qtde", txtQtde.Text);
                        cmd.Parameters.AddWithValue("@Preco_Unit", txtPrecoVenda.Text);
                        cmd.Parameters.AddWithValue("@Preco_Total", txtPrecoTotal.Text);
    
    
                                if (conexao.State == ConnectionState.Open)
                            {
                                conexao.Close();
                                btnEditar.Enabled = false;
                                btnFinalizarVenda.Enabled = true;
                                AtualizarSaldo((Convert.ToInt32(txtQtde.Text) * +1)); //Diminui Saldo do Estoque
    
    
                                Totalizar_venda(ntotal_item * +1);
    
                                Exibir_Valor_Total_venda1(); //após totalizar, exibir o novo valor total
    
                                MontarListaItens(int.Parse(txtNr_Venda.Text));
                                txtCodProduto.Focus();
    
                            }
                        }
                    }
                }
            }
        


    sábado, 9 de dezembro de 2017 01:58

Respostas

  • Olá Marcio,

    Bom primeiro, não se ajusta estoque em sistema editando quantidade, se for projeto pequeno ou até mesmo de estudo, aconselho repensar esse conceito, para você evoluir, deve-se ter integridade nas informações, estou falando isso para você evoluir e começar da forma correta. Vamos imaginar o seguinte cenário.

    Conceitos básicos:

    1 - Tenha tabela de estoque separada do cadastro de produtos

    2 - Usuário nunca altera o estoque (Pode fazer um ajuste através de transferências ou entradas de notas)

    3 - Em sua situação aconselharia ter um processo separado para esse ajuste, já que o sistema pelo que vi pode vender sem estoque disponível.

    Se você gostar de tentar aplicar essas regras, fique livre, caso contrário eu postarei a solução que precisar.

    Não adianta eu lhe dá uma resposta para o que quer, sabendo que não está legal o objetivo que deseja alcançar, acreditamos que aqui no fórum tudo isso vai mais além, estamos aqui para ajudar não só resolver código, e sim ajudar também em uma solução melhor para o problema.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Senior Developer C#
    Development Leader at JAMSOFT Informática
    Microsoft Certified Professional
    Criador e Mantenedor do EntityFramework Core for Firebird
    Contribuidor do EntityFramework Core
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    domingo, 10 de dezembro de 2017 01:33