... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$182,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Utilizando Classe no Access - Finalização do Sistema

Por: Plinio Mabesi
 

Eis que chegamos à última etapa da criação do nosso sistema de vendas orientado a objetos.

Finalmente teremos o sistema totalmente pronto e funcional para que seja possível visualizar a aplicação de todos os conceitos aprendidos nesta jornada de busca do conhecimento.

A finalização do aplicativo não trará exatamente alguma novidade, mas apenas o fechamento do projeto, ao criarmos a interface gráfica de gerenciamento principal do software e os relatórios para exibição dos dados. A exceção será para a apresentação do cupom de venda, que será um exemplo bastante simplificado de um cupom fiscal de verdade, utilizado em sistemas comerciais.

A Última Função Auxiliar

Para montar o cupom de venda, no formato de um cupom fiscal, necessitaremos de uma função que busque a lista de produtos e acrescente os dados da empresa ou do sistema, além dos dados do cliente, caso haja algum específico.

Assim sendo deveremos incluir mais uma função no módulo Funcoes criado anteriormente, que será chamada de cupomVenda(), a qual utilizará a função listaProdutos() criada anteriormente. A função cupomVenda() receberá como parâmetro o código da venda para a qual o cupom deve ser retornado.

Este será o código da função:

Function cupomVenda(argCodVenda As Long) As String

  Dim objVenda As New clsVenda
  
  If Not objVenda.obter(argCodVenda) Then
      cupomVenda = ""
      Exit Function
  End If
  
  cupomVenda = "VENDA OO" & vbCrLf
  cupomVenda = cupomVenda & "Sistema de Venda Orientado a Objetos" & vbCrLf
  cupomVenda = cupomVenda & "Av. do Passa 4 nr 171, Centro" & vbCrLf
  cupomVenda = cupomVenda & "Objetolândia - OB" & vbCrLf
  cupomVenda = cupomVenda & "Fone: (0xx62) 3322-4455" & vbCrLf
  cupomVenda = cupomVenda & "++++++++++++++++++++++++++++++++++++++++" & vbCrLf
  cupomVenda = cupomVenda & Format(objVenda.dataVenda, "dd/mm/yy") & _
                  "                                         Venda: " & _
                  Format(objVenda.codVenda, "000000") & vbCrLf
  cupomVenda = cupomVenda & vbCrLf
  cupomVenda = cupomVenda & "                           CUPOM FISCAL" & vbCrLf
  cupomVenda = cupomVenda & vbCrLf
  
  cupomVenda = cupomVenda & listaProdutos(argCodVenda)
  
  cupomVenda = cupomVenda & "++++++++++++++++++++++++++++++++++++++++" & vbCrLf
  cupomVenda = cupomVenda & vbCrLf
  cupomVenda = cupomVenda & "TOTAL                                         " & _
                  FormatCurrency(objVenda.getValorTotal) & vbCrLf
  cupomVenda = cupomVenda & vbCrLf
  If Not IsNull(objVenda.codCliente) Then
    cupomVenda = cupomVenda & "Cliente: " & Format(objVenda.objCliente.codCliente, _
                    "0000") & vbCrLf
    cupomVenda = cupomVenda & "CPF: " & objVenda.objCliente.cpf & vbCrLf
    cupomVenda = cupomVenda & "Nome: " & objVenda.objCliente.nomeCliente & vbCrLf
  Else
    cupomVenda = cupomVenda & "Venda ao consumidor" & vbCrLf
  End If
  cupomVenda = cupomVenda & vbCrLf
  cupomVenda = cupomVenda & "Obrigado e volte Sempre..."

End Function

Veja que no caso de não haver um cliente registrado para a venda ela será exibida como Venda ao consumidor, já que nem sempre em uma venda é necessário identificar o cliente.

Pronto. Agora, a partir de qualquer local do nosso projeto, poderemos buscar um cupom de venda apenas utilizando a função e passando o código da venda como parâmetro.

O Formulário Principal

O formulário principal é o que se abre automaticamente assim que o aplicativo é iniciado e será o responsável por permitir acesso aos demais itens do sistema.

A seguir serão definidas as características para o formulário principal. Assim como nos anteriores as especificações de design também são apenas sugestões, porém as informações de origem de dados, bloqueio de campos e formatos de dados são obrigatórias, sob pena de, novamente, não obter a funcionalidade desejada. Como de praxe as especificações estarão marcadas com um asterisco vermelho ao lado.

No formulário teremos apenas os rótulos como o nome e a descrição do sistema, além de mais seis botões de comando para acesso aos formulários de cadastro, PDV e relatórios, com seus respectivos rótulos.

Formulário

Nome: FPrincipal
Altura: Cabeçalho (4cm) / Detalhe (11cm)
Cor do fundo: Cabeçalho (Azul) / Detalhe (Cinza claro)
Legenda: Sistema de Vendas
Seletores de registro: Não
Botões de navegação: Não
Linhas divisórias: Não
Barras de rolagem: Nenhuma
Caixa de controle: Sim
Botão Fechar: Sim
Botões Min Max: Nenhum

Queremos que nosso formulário seja exibido automaticamente assim que o Sistema de Vendas for aberto. Também não queremos que o painel de navegação (ou a Janela Banco de Dados) seja exibido. Para isso vamos realizar o seguinte procedimento:

No Access 2003 ou inferior: Vá ao menu Ferramentas -> Inicializar. Em seguida, na caixa de texto Exibir Formulário/Página informe o nome do formulário FPrincipal. Desmarque a opção Exibir Janela Banco de Dados e clique em Ok.

No Access 2007: Vá ao Botão do Office, no canto superior esquerdo da tela, depois em Opções do Access -> Banco de Dados Atual. Em seguida, na caixa de texto Exibir Formulário informe o nome do formulário FPrincipal. Desmarque também a opção Exibir Painel de Navegação e clique em Ok.

No Access 2010: Vá ao menu Arquivo, depois em Opções -> Banco de Dados Atual. Em seguida, na caixa de texto Exibir Formulário informe o nome do formulário FPrincipal.

Botões de Comando

Nome: btnCliente *

Nome: btnProduto *

Nome: btnPDV *

Nome: btnListaCliente *

Nome: btnListaProduto *

Nome: btnRelVenda *

Como sugestão de design os campos deverão estar posicionados conforme demonstrado na figura a seguir, assim como devem ser adicionadas as legendas dos botões, as quais não foram descritas anteriormente:

Classe no Access 2007/2010

Códigos do Formulário

Para que nosso formulário seja capaz de permitir o acesso aos itens do sistema deveremos programar as funcionalidades necessárias que permitam abrir os formulários e relatórios existentes.

Por ser um processo bastante simples e repetitivo não detalharei cada um dos comandos. Colocarei os comandos agrupados pelo seu tipo de funcionalidade.

Todos os códigos a seguir deverão ser colocados no módulo do formulário FPrincipal.

1. Abertura dos formulários de cadastro: Para abrirmos os formulários de cadastro e o PDV utilizaremos o evento Ao Clicar dos botões com o comando OpenForm.

Private Sub btnCliente_Click()
  DoCmd.OpenForm "FCliente"
End Sub

Private Sub btnPDV_Click()
  DoCmd.OpenForm "FVenda"
End Sub

Private Sub btnProduto_Click()
  DoCmd.OpenForm "FProduto"
End Sub

2. Abertura dos relatórios: Para abrirmos os relatórios utilizaremos o evento Ao Clicar dos botões com o comando OpenReport.

Private Sub btnListaCliente_Click()
  DoCmd.OpenReport "RCliente", acViewPreview
End Sub

Private Sub btnListaProduto_Click()
  DoCmd.OpenReport "RProduto", acViewPreview
End Sub

Private Sub btnRelVenda_Click()
  DoCmd.OpenReport "RVenda", acViewPreview
End Sub

3. Maximização do formulário: Para que o formulário principal se mantenha maximizado o tempo todo utilizaremos o comando Maximize nos eventos Ao Abrir e Ao Ativar do mesmo.

Private Sub Form_Activate()
  DoCmd.Maximize
End Sub

Private Sub Form_Open(Cancel As Integer)
  DoCmd.Maximize
End Sub

Relatórios

Os dados cadastrados e as vendas registradas poderão ser exibidos e preparados para impressão através dos relatórios que criaremos.

Como não é o objetivo deste curso não detalharemos a criação dos relatórios, sendo que apenas descreveremos a função de cada um deles. Os relatórios Lista de Clientes e Lista de Produtos devem ser gerados de maneira simples a partir das tabelas Cliente e Produto, respectivamente. O Relatório de Vendas deve ser gerado a partir da consulta CVenda. Já o cupom fiscal será um pouco mais detalhado, já que utiliza um controle não acoplado com a função cupomVenda().

Lista de Clientes

Responsável por exibir os dados dos clientes cadastrados em ordem alfabética de nomes. O nome dele será RCliente.

Classe no Access 2007/2010

Lista de Produtos

Responsável por exibir os dados dos produtos cadastrados em ordem alfabética de descrição. O nome dele será RProduto.

Classe no Access 2007/2010

Relatório de Vendas

Responsável por exibir os dados das vendas registradas, o nome dos clientes e os produtos componentes de cada venda. O nome dele será RVenda.

Classe no Access 2007/2010

Cupom de Venda

O cupom de venda exibirá os dados da venda em formato de um cupom fiscal simplificado. O nome dele será RCupom.

Ao invés do formulário principal ele será acionado a partir do PDV, ao clicarmos duas vezes no controle lblProdutos, o mesmo que exibe os produtos registrados no momento da venda no PDV. Para isto incluiremos o código abaixo no evento Ao Clicar Duas Vezes no controle lblProdutos do formulário FVenda.

Private Sub lblProdutos_DblClick(Cancel As Integer)
  If Not IsNull(txtCodigoVenda) Then
    DoCmd.OpenReport "RCupom", acViewPreview, , , , txtCodigoVenda
  End If
End Sub

Repare que o código da venda, que será o parâmetro para a função cupomVenda(), será passado através do argumento OpenArgs de abertura do relatório. Ao abrir o formulário o código estará disponível para a função através da propriedade AbrirArgs do relatório.

Para montarmos o relatório com o cupom criaremos apenas um controle caixa de texto não acoplado com o seguinte código:

=cupomVenda(Nz([AbrirArgs]))

A função buscará todas as informações sobre a venda e seus produtos e retornará para o controle, que as exibirá no relatório.

O controle terá o nome de txtCupom, a propriedade Pode Ampliar definida como Sim e a largura de 14 cm.

O relatório deverá ter sua propriedade Popup definida como Sim.

Veja abaixo como será o modelo do cupom de venda no modo de visualização:

Classe no Access 2007/2010

Sistema de Exemplo

Novamente será disponibilizado o link para download do sistema de vendas, desta vez finalizado e totalmente funcional.

Continua a recomendação de consultar o exemplo apenas para tirar dúvidas e verificar como foi feito, além de ver o sistema em funcionamento. O treinamento ainda é a maneira recomendada de aprender.

Segue o link para download

A fim de auxiliar na resolução de problemas enfrentados pelos leitores que tentam colocar em prática os ensinamentos deixo aqui a informação sobre quais referências estão marcadas no editor do VBA. Para isto veja a imagem a seguir.

Classe no Access 2007/2010

A versão utilizada para montar o exemplo foi o Access 2007, sendo que salvei o mesmo no formato do Access 2000, para que todos pudessem acessá-lo normalmente.

Conclusão

Após alguns meses de suado trabalho, de minha parte, e bastante estudo e treinamento, da parte de vocês leitores, conseguimos finalizar nosso projeto, criando o sistema de vendas orientado a objetos.

Além da utilização massiva de objetos para desempenhar as funções de cadastro, cálculo, validação e acesso a dados, aprendemos como criar um PDV simples e também um modelo de cupom de venda, também bastante simples.

Depois de toda esta cansativa rotina de programação, no caso da digitação de todos aqueles códigos das classes, não seria maravilhoso que esta tarefa pudesse ser simplificada? Não seria ótimo que não tivéssemos que nos preocupar com a montagem dos códigos SQL dos métodos das classes, nem com os métodos de acesso às propriedades? E quando alteramos um atributo da classe, será que temos que refazer tudo de novo?

Pois bem, este será o assunto do próximo artigo, no qual será apresentada a ferramenta Genesis, um aplicativo que cria as classes para o nosso projeto. Você apenas informa quais são os campos das tabelas e sua descrição, então o Genesis cria o banco de dados e as classes em um piscar de olhos. Alterou alguma coisa? Basta gerar novamente a classe e importar para seu projeto outra vez. Simples assim.

Além da criação das classes com o Genesis, veremos dicas de como agilizar a importação e a remoção de módulos de nosso projeto, a fim de evitar que tenhamos que importar ou remover um por um, o que já nos trás um grande aumento de produtividade.

Abraços a todos e até o próximo artigo...


 

 


2 comentários

Armando   17/09/2014 23:21:37

Gostaria de saber se você tem formulários em VBA de Impressão Não Fiscal e envio de e-mail.?
Caso tenha favor me enviar o preço dos arquivos.

Luciclaudio   04/01/2016 21:15:10

Amigos, não estou conseguindo incluir produto, ao tentar fazer o processo apresenta "erro ao incluir venda"


Envie seu comentário: