Controle de Estoques - Parte VI- Formulário de Entrada de itens do Estoque
Na janela Solution Explorer, clique com o botão direito em ctrComissao. Selecione Add / Windows Form.
No name, digite: frmEntrada e pressione a tecla Enter. Altere as seguintes propriedades:
Text: Entrada de Produtos no estoque
StartPosition: ScreenCenter 'Centraliza o formulário
MinimizeBox: False
MaximizeBox: False
Coloque um Label na parte superior esquerda do formulário e altere as propriedades:
Name: lblPesquisa
Text: Pesquisa:
Coloque um TextBox logo abaixo do label acima e altere as propriedades:
Name: txtPesquisa
Na janela ToolBox (na parte esquerda superior da janela, onde na aba ToolBox tem as ferramentas: Label, TextBox, etc.), selecione a aba Data Sources. Veja figura abaixo:

Selecione o de Produto e na seta ao lado selecione DataGridView.
Arraste-o logo abaixo do TextBox txtPesquisa. Altere o nome do grid para: dgvProduto.
Altere a seguinte propriedade do dgvProduto:
Size: 411; 236
Observação: Delete o ProdutoBindingNavigator.
Clique com o botão direito sobre o grid e selecione Edit Columns.
Selecione cada campo abaixo e altere as propriedades:
HeaderText: Código
Width:60
HeaderText: Descrição
Width:120
HeaderText: QtdEstoque
Width: 80
HeaderText: ValorVenda
Width: 90
DefaultCellStyle: clique no botão ao lado. Na opção Behavior / Format. Clique no botão ao lado e selecione Currency. Em Layout / Alignment, selecione TopRight.
Monte abaixo do grid, o layout do form conforme abaixo:
Coloque primeiro um groupbox e altere as propriedades:
Name: gbDados
Text: &Dados
Dentro do mesmo, coloque os componentes:
| Componente | Text | Name | Propriedade |
|---|---|---|---|
| Label | Data: | lblData | |
| MaskedTextBox | mskData | ||
| Label | Valor: | lblValor | |
| TextBox | mskValor | ||
| Label | QtdeEst: | lblQtdeEstoque | |
| TextBox | txtQtdeEstoque | ||
| Label | Qtde: | lblQtde | |
| TextBox | txtQtde | ||
| Label | Total: | lbTotal | |
| TextBox | txtValorTotal |
Coloque outro groupbox e altere as propriedades:
Name: gbOpcoes
Text: &Opções
Dentro do mesmo, coloque os componentes:
| Componente | Text | Name | Propriedade |
|---|---|---|---|
| Button | C&onfirma | btnConfirma | Enabled = False |
| Button | &Pesquisa | btnPesquisaEntrada | |
| Button | Sai&r | btnSair |
Dê um duplo clique no formulário.
Antes da linha Public Class frmPProduto, digite: Imports System.Data.OleDb
Logo após a linha Public Class frmPProduto, digite:
Private dsProduto As DataSet
Private daProduto As New OleDbDataAdapter
Private dtProduto As DataTable
Desça até o Private Sub frmPProduto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Antes do End Sub, digite:
Try
Dim cn As New OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.oleDB.4.0;Data Source=" & sCaminho & "\Estoque.mdb;"
cn.Open()
Dim sSQL As String = "Select * From Produto Order By Descricao"
dsProduto = New DataSet()
daProduto = New OleDbDataAdapter(sSQL, cn)
daProduto.Fill(dsProduto, "Produto")
dtProduto = dsProduto.Tables("Produto")
dgvProduto.DataSource = dtProduto
Catch err As Exception
MessageBox.Show(err.Message)
Finally
cn.Close()
End Try
Selecione o evento Form_Closed e digite:
Close()
Clique no ícone View Designer para voltar ao formulário. Dê um duplo clique no TextBox txtPesquisa e digite:
Dim cn As New OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.oleDB.4.0;Data Source=" & sCaminho & "\Estoque.mdb;"
cn.Open()
Dim sSQL As String = "Select * From Produto Where Descricao Like '" & txtPesquisa.Text & "%'"
dsProduto = New DataSet()
daProduto = New OleDbDataAdapter(sSQL, cn)
daProduto.Fill(dsProduto, "Produto")
dtProduto = dsProduto.Tables("Produto")
dgvProduto.DataSource = dtProduto
cn.Close()
Volte ao formulário. Dê um duplo clique no dgvProduto. Altere o evento para CellClick e digite o código abaixo:
mskData.Text = DateTime.Today 'Data do sistema é armazenado neste maskedit
mskValor.Text = dgvProduto.CurrentRow.Cells(3).Value.ToString 'O valor de venda deste produto é armazenado neste maskedit
txtQtdeEstoque.Text = dgvProduto.CurrentRow.Cells(2).Value.ToString 'A quantidade em estoque atual, é armazenada neste textbox
txtQtde.Focus()
Volte ao formulário. Dê um duplo clique no textbox txtTotal e digite o código abaixo:
If Len(txtQtde.Text) = 0 Then Exit Sub 'Senão foi digitado nenhuma quantidade, não executa as linhas abaixo
txtValorTotal.Text = CType(mskValor.Text, Single) * CType(txtQtde.Text, Integer) 'Efetua o cálculo
btnConfirma.Enabled = True 'Habilita este botão
Codificação do botão btnConfirma:
If MessageBox.Show("Confirma a Entrada ?", "Entrada", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
Dim sSQL As String, sData As String, datatmp As Date
datatmp = Convert.ToDateTime(mskData.Text)
sData = datatmp.Year.ToString & "-" & datatmp.Month.ToString & "-" & datatmp.Day.ToString
Try
'Insere na tabela de Entrada
sSQL = "Insert Into Entrada (CodProduto, DataEntrada, Quantidade, Valor_Unitario)"
sSQL = sSQL & "Values (" & dgvProduto.CurrentRow.Cells(0).Value.ToString & ","
sSQL = sSQL & "'" & sData & "'" & ","
sSQL = sSQL & txtQtde.Text & ","
sSQL = sSQL & Replace(mskValor.Text, ",", ".") & ")"
Dim cmdEntrada As New OleDbCommand(sSQL, cn)
cn.Open()
cmdEntrada.ExecuteNonQuery()
'Atualiza o estoque
Dim nQtde As Integer = txtQtde.Text, nQtdeEstoque As Integer = dgvProduto.CurrentRow.Cells(2).Value.ToString
txtQtde.Text = nQtde + nQtdeEstoque
sSQL = "Update Produto Set QtdEstoque=" & txtQtde.Text
sSQL = sSQL & " Where Codigo=" & dgvProduto.CurrentRow.Cells(0).Value.ToString
Dim cmdProduto As New OleDbCommand(sSQL, cn)
cmdProduto.ExecuteNonQuery()
'Exibe e atualiza o grid de produtos
Dim dsProduto As DataSet
Dim daProduto As New OleDbDataAdapter
Dim dtProduto As DataTable
sSQL = "Select * From Produto Order By Descricao"
dsProduto = New DataSet()
daProduto = New OleDbDataAdapter(sSQL, cn)
daProduto.Fill(dsProduto, "Produto")
dtProduto = dsProduto.Tables("Produto")
dgvProduto.DataSource = dtProduto
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
cn.Close()
btnConfirma.Enabled = False
Call Limpar()
End Try
End If
Abaixo do End Sub, crie a subrotina abaixo:
Private Sub Limpar()
txtPesquisa.Text = ""
mskData.Text = ""
mskValor.Text = ""
txtQtdeEstoque.Text = ""
txtQtde.Text = ""
txtValorTotal.Text = ""
End Sub
No evento KeyPress do textbox txtQtde, digite o código abaixo:
'Só permite digitar números
If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack Then
e.Handled = True
End If
Codificação do botão btnPesquisa:
frmPEntrada.ShowDialog()
Pressione a tecla F5 para executar o projeto.
Observação: Para a montagem das Saídas de itens do Estoque, a codificação acima é praticamente igual. Só terá as mudanças quando onde existir entrada será saída.
Controle de Estoque - Parte II
Controle de Estoque - Parte III