Utilizando Classe no Access - Finalização do Sistema
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
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:
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.
Lista de Produtos
Responsável por exibir os dados dos produtos cadastrados em ordem alfabética de descrição. O nome dele será RProduto.
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.
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:
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.
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...
Artigos Relacionados
Utilizando Classe no Access - Introdução
Utilizando Classe no Access - Parte 1 - Orientação a Objetos
Utilizando Classe no Access - Parte 2 - Programação OO no Access/Vba
Utilizando Classe no Access - Parte 4 - As Classes Auxiliares
Utilizando Classe no Access - Parte 5 - A Classe Cliente
Utilizando Classe no Access - Parte 6 - A Classe Produto
Utilizando Classe no Access - Parte 7 - As Classes Venda e Detalhe de Venda
Utilizando Classe no Access - Parte 8 - Finalização do Sistema
Utilizando Classe no Access - Parte 9 - Genesis: A Ferramenta Case
Utilizando Classe no Access - Parte 10 - Conclusão
Como estudar com o Pesquisador de Objetos
3 comentários Luciclaudio 04/01/2022 21:15:10 Amigos, não estou conseguindo incluir produto, ao tentar fazer o processo apresenta "erro ao incluir venda" Armando 17/09/2021 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. Dúlio Borille 21/05/2021 14:10:55 Fantástico! Parabéns pelo trabalho! |