Visual Basic - Sistema para Controle de Vendas (protótipo)


Que tal um sistema para controle de vendas ?

Atendendo a pedidos vou lançar os fundamentos, dando o pontapé inicial para que você possa criar um sistema para controle de vendas.

Nada de camarão, será o básico, o arroz com feijão. Iremos usar como base de dados o Microsoft Access - Vendas.mdb - e usar a tecnologia ADO para acesso aos dados.

Não usarei classes e o código com as regras de negócios será colocado nos formulários no velho estilo procedural  que usa o padrão one-button-click.

Tudo isto para facilitar o entendimento de quem esta começando com o VB.  (O estilo one-button-click no qual o código com as regras de negócio e colocado no formulário ou em um botão de comando não é muito aconselhável se você quiser ter aplicações robustas , escaláveis e de fácil manutenção)

Vou detalhar passo a passo os formulários iniciais usados no projeto destacando os aspectos mais relevantes. No final você terá uma ideia de como criar uma aplicação completa para controle de vendas e terá aprendido algumas técnicas de como trabalhar com ADO e com formulários no VB6 podendo ainda exercitar os seus conhecimentos sobre VB6 e ADO.

Iniciando a descrição do sistema

O nosso projeto de controle de vendas possui um módulo .bas onde temos os seguinte métodos definidos que serão usados pela aplicação:

O código do módulo é :

'definição das variáveis objeto visíveis em todo o projeto
Public cnn As New ADODB.Connection
Public rs As New ADODB.Recordset
Public rs1 As New ADODB.Recordset
Public rstemp As New ADODB.Recordset
Public lst As ListItem

Public Sub conecta()
Dim path As String
On Error GoTo ado2
'define o caminho do banco de dados
path = App.path & "\vendas.mdb"
'define o tipo de cursor usado
cnn.CursorLocation = adUseClient
'se a
If rs.State = 1 Then rs.Close
cnn.Open "provider = microsoft.jet.oledb.3.51;persist security info=false;data source = " & path
Exit Sub
ado2:
    MsgBox "Ocorreu um erro durante o acesso ao banco de dados : " & Err.Description, _ 
            vbCritical, "Erro de acesso ao banco de dados"
End Sub

Public Sub Verifica_RStemp()
   If rstemp.State = 1 Then rstemp.Close
End Sub

Public Sub Verifica_RS()
   If rs.State = 1 Then rs.Close
End Sub

Public Sub Verifica_RS1()
   If rs1.State = 1 Then rs1.Close
End Sub

Nota: Eu estou usando o  provedor OleDb 3.51  mas você pode mudar para o provedor OleDb 4.0. Exemplo :
cnn.Open "provider = microsoft.jet.oledb.4.0;persist security info=false;data source = " & path

Deixe-me apresentar a tela principal do sistema onde temos o menu de opções. (O logotipo é opcional ...)

Para criar o formulário acima vamos usar dois controles :

As imagens são exibidas no controle ToolBar via controle ImageList. As imagens são inseridas no controle ImageList e usadas pelo controle ToollBar; para isto você deve atribuir o nome do controle ImageList na propriedade ImageList da ToolBar


Os controles ImageList e ToolBar :

No primeiro inserimos as imagens que vamos exibir e no segundo atribuímos as imagens a ToolBar onde definimos o Texto do Menu e a chave(Key) que será usada para acionar o menu quando o usuário fazer a seleção.
 

O código para fazer o tratamento de cada seleção do usuário quando ele clicar nas opções do menu é :

Private Sub tb_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.key
Case "clientes"
Load clientes
clientes.Show 1
Case "listaV"
Load Sales_LIST
Sales_LIST.Show 1
Case "vendas"
Load sales
sales.Show 1
Case "fornecedores"
frmSupp.ano = ""
Load frmSupp
frmSupp.Show 1
Case "produtos"
Load main
main.Show 1
Case "pedido"
Load frmOrder
frmOrder.Show 1
Case "listaP"
Load OrderPEND
OrderPEND.Show 1
Case "entrega"
Load Orderdel
Orderdel.Show 1
Case "sair"
If (MsgBox("Confirma o encerramento do sistema ? ", vbYesNo, "Encerra Sistema") = vbYes) Then
    cnn.Close
    If rs1.State = 1 Then rs1.Close
    End
End If
End Select
End Sub

Agora vamos falar do cadastro de clientes. Ao clicar na opção o formulário clientes será carregado via comando Load: Load Clientes e em seguida exibido via método Show : clientes.Show 1 (O número 1 indica que o formulário será do tipo modal ou seja terá que fechar o formulário para acessar outro formulário da aplicação. Mude para 0 e veja como o formulário clientes se comporta.)

O formulário clientes exibido é mostrado abaixo:

Neste formulário temos os controles ListView que exibe a relação de clientes e o controle CommandButton que usamos para os botões :

- incluir - cmdAdd
- Edita - cmdEdit
- Deleta - cmddel
- Fecha - cmdExit

Temos também o controle ImageList onde eu defini a imagem que esta sendo exibida no ListView.

Para isto é necessário definir a propriedade ImgeList do controle.

Obs: Se o usuário clicar duas vezes sobre uma linha do ListView entraremos em modo de edição de dados.

Nota : os cabeçalho dos campos estão em inglês por que eu aproveitei uma tabela de um aplicativo escrito em inglês.

O ListView foi configurado da seguinte forma :

O código deste formulário é o seguinte :

Private Sub cmdAdd_Click()
  cmd = "inclui"
  Load cliDados
  cliDados.Show 1
End Sub
Private Sub cmddel_Click()
If MsgBox("Deseja realmente excluir o registro :  " & clilista.SelectedItem.SubItems(1), vbYesNo) = vbYes Then
    cnn.Execute "delete from clientes where cli_num = " & clilista.SelectedItem.Text
    rs.Requery 1
    Preenche
End If
End Sub

Private Sub cmdedit_Click()
   Call clilista_DblClick
End Sub

Private Sub cmdexit_Click()
   Unload Me
End Sub

Private Sub clilista_DblClick()
Dim x As Integer
cmd = "edita"
cliDados.data(0) = clilista.SelectedItem.Text
For x = 1 To 3
   cliDados.data(x) = clilista.SelectedItem.SubItems(x)
Next x
Load cliDados
cliDados.Show 1
End Sub
Private Sub Form_Load()
  Verifica_RS
  rs.Open "select * from clientes order by cli_num", cnn
  Preenche
End Sub

Public Sub Preenche()
Dim x As Integer
clilista.ListItems.Clear
While Not rs.EOF
  Set lst = clilista.ListItems.Add(, , rs(0), , 1)
  For x = 1 To 3
        lst.SubItems(x) = rs(x)
  Next x
  rs.MoveNext
Wend

End Sub

Note que no código acima eu estou usando o formulário - cliDados - para editar e incluir dados do cliente. O formulário é exibido abaixo:

O formulário - CliDados - possui dois botões :
  • cmdSalvar e cmdSair

Possui também 4 TextBox :

  • data(0)
  • data(1) - Nome
  • data(2) - Tel. No
  • data(3) - Endereço

Vamos dar uma olhada no código deste formulário :

Private Sub cmdSair_Click()
Unload Me
End Sub
Private Sub cmdSalvar_Click()
Dim cta As Integer
cta = 0
If data(1) = "" Then
    MsgBox "Por favor informe o nome do Cliente.."
    data(1).SetFocus
    Exit Sub
ElseIf data(3) = "" Then
    MsgBox "Informe o endereço."
    Exit Sub
End If
If data(2) <> "" Then
  If Not IsNumeric(data(2).Text) Then
      MsgBox "Número do telefone inválido !"
      Exit Sub
   End If
End If
If clientes.cmd = "inclui" Then
  Verifica_RStemp
  rstemp.Open "select * from clientes", cnn
  While rstemp.RecordCount > 0
     Verifica_RStemp
     cta = cta + 1
     rstemp.Open "select * from clientes where cli_num = " & cta, cnn
  Wend
  cnn.Execute "insert into clientes values(" & cta & ", '" & data(1) & "', '" & data(2) & "', '" & data(3) & "')"
ElseIf clientes.cmd = "edita" Then
   cnn.Execute "update clientes set cli_nome = '" & data(1) & "', cli_tel = '" & data(2) & "', cli_end = '" & _
                     data(3) & "' where cli_num = " & data(0)
End If
rs.Requery 1
clientes.Preenche
Unload Me
End Sub

Note que para fazer a inclusão dos dados do formulário na tabela Clientes eu estou usando a instrução SQL :

cnn.Execute "insert into clientes values(" & cta & ", '" & data(1) & "', '" & data(2) & "', '" & data(3) & "')"

e para fazer a atualização utilizo o comando SQL :

cnn.Execute "update clientes set cli_nome = '" & data(1) & "', cli_tel = '" & data(2) & "', cli_end = '" & data(3) & "' where cli_num = " & data(0)

Veja também que eu verifico qual a opção que o cliente selecionou no formulário clientes : clientes.cmd = "Inclui" ou clientes.cmd="edita"

A variável cmd é uma variável pública definida no formulário clientes na qual eu atribuo a seleção quando o usuário clica no menu.

No código eu estou usando as rotinas :   Verifica_RStemp definida no módulo e a rotina Preenche ( clientes.Preenche ) definida no formulário clientes.

Assim você já tem os fundamentos lançados, basta implementar o formulário de Produtos e Fornecedores seguindo a mesma lógica e incrementar o sistema com os requisitos que achar necessário.

Obs: O artigo deste link : http://www.macoratti.net/vb_estq1.htm  também pode lhe dar mais ideias sobre como concluir o sistema.

Veja também outros sistemas similares no : Super DVD Visual Basic

Bom estudo...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

Referências:


José Carlos Macoratti