quinta-feira, 12 de janeiro de 2017

Controle de estoque com o LibreOffice Base - parte 2: tabelas

     E dando continuidade à série de postagens sobre a criação de um programa de controle de estoque no LibreOffice Base (você pode acessar a primeira parte 1ª parte), nesta segunda parte mostraremos a construção básica e configuração dos dados nas tabelas. Vamos mostrar os tipos de informações e traçar o projeto de como faremos as relações para as próximas postagens.

As Tabelas


Um conceito usado no LibreOffice Base e no MS Access é o de tabelas. Quando trabalhamos com esses motores de banco de dados montamos um sistema que efetue o relacionamento entre os dados cadastrados e agrupados em tabelas, que nada mais são do que as estruturas organizadores (catalogadoras) dos tipos de dados.
Para nosso pequeno sistema de estoque, vamos utilizar cinco tabelas para organizar os tipos de dados do estoque. A saber:
Cliente, que será onde cadastraremos os tipos de dados relacionados aos clientes (nome, endereço, telefone)
DetalhePedido, que será o nosso orçamento, que movimentará os pedidos de compras dos clientes, agrupando dados extraídos de tabelas de produtos e fornecedores
Pedidos, que servirá como nosso orçamento de compras, contendo dados semelhantes ao de detalhe do pedido;
Fornecedor, que trará os dados para cadastros de informações específicas sobre fornecedores, tais como, nome, endereço, CEP, CNPJ e;
Produto, que servirá para o armazenamento dos dados de produtos, como preço, descrição, fornecedor.
Devemos ter em mente que a criação de uma tabela e a definição correta de seus dados é a chave para que todo o processo pode ter continuidade, pois os dados que se utilizaram de outros dados em outras tabelas devem, obrigatoriamente, ter as mesmas configurações. Assim, vamos começar por uma das tabelas e para nós, pelo menos, a mais básica e fácil é a tabela Cliente.
Para criá-la será preciso utilizar o Editor de tabelas.
Clique em Tabelas > Criar tabela no editor.... em seguida, na janela que se abre, definiremos os nomes dos campos e os tipos de dados que esses campos armazenarão (por exemplo, Nome de cliente traz um dado gravado em forma de texto, um número de telefone traz um dado em forma de telefone, um preço de mercadoria informa um dado como moeda e por aí em diante).
Embora sejam um pouco diferentes no conceito de tabela, aqui vamos construir uma tabela semelhante aquelas criadas pelo LibreOffice Calc. Fazendo uma analogia simples, o que se deve ter em mente e que será diferente de uma tabela convencional do Calc é que o nome do campo que você vai colocar é, na verdade, um rótulo para uma coluna, e não a informação propriamente dita. E definir o tipo de campo é dizer quais os dados que podem ser armazenados naquela coluna (textos, números, datas, etc). 
Não é a mesma coisa de uma tabela, em que armazenamos dados prontos, aqui armazenamos a receita do que será colocado. Se pensarmos numa analogia, podemos dizer que as tabelas do Calc são os medicamentos comprados na farmácia, ao passo que a tabela do Base é a aquela receita com a posologia a ser seguida no tratamento.
Ao se criar uma tabela estamos dizendo para o Base que aquilo é uma fonte de agrupamento de dados. Agora com ela feita clique na primeira célula e entre com o texto codigo_cliente.
Há de se reparar que na primeira linha, na célula ao lado, automaticamente o editor do Base atribui o Tipo do campo como definido por “Text [VARCHAR”, isto é, variável de texto ao Nome do campo criado. Mais adiante isso será melhor explicado, mas por enquanto, só precisamos saber que não será este o tipo de dado que nos servirá, pois precisaremos de um campo do tipo “Integer [INTEGER]” , isto é, inteiro. 
Isso deve ser alterado porque criaremos um campo que armazene um número que vai ser o código do cliente. E agora pergunto: o que é melhor para se definir um código (ou um número de chamada ou inscrição, de um cliente? Um nome ou um número inteiro? Pois pergunto novamente: o que faríamos se tivéssemos uns três clientes com o nome Diego? O primeiro cadastraríamos como Diego, tá, mas e o segundo? Algo como Diego 2? e se tivéssemos cem clientes com este nome? Seriam algo mais complicado ter um banco de dados com o código de cada um sendo formado por vários caracteres alfanuméricos. 
E agora retorno: e quantos números existem? Número são infinitos, simples assim. Nunca haverá repetição de código assim.
E assim deve-se proceder trocando o tipo “texto”por número inteiro. Para tanto, clique duas vezes na célula que está com “Text [VARCHAR” e na lista que aparece (vide imagem acima) selecione a opção “Integer [INTEGER]”. E depois, para que todo cliente possua um código único altere a propriedade Valor Automático (na parte de baixo da imagem, em Propriedades do Campo) deste campo para Sim, pois ao fazer isso, fica bloqueada a inclusão manual dos valores neste campo e deixamos o próprio LibreOffice Base responsável por inserir os números sequenciais para cada cliente que for adicionado nesta tabela.
Para explicar a função do Sim no valor automático, imagine que você esteja preenchendo um cadastro num programa qualquer. Pode ser cadastro de qualquer coisa e são várias coisas. Por exemplo, está cadastrando contas para o plano de contas de um cliente de um escritório de contabilidade num programa de contabilidade, fiscal e folha de pagamento. 
Pense: começa com caixa, depois tem banco, aplicações, clientes, quando terminar terá uma centena de contas, no mínimo. Imagine que toda hora você terá que digitar um valor no campo de código e vai que você pula algum número por distração. 
Seu plano de contas não seria linear e teria vãos nele. Por isso é melhor que o próprio sistema preencha os números de código automaticamente. Isso evita faltas de número, números pulados ou repetidos.
E sendo assim, este campo passa ter numeração única para todo o cadastro e ainda, por sua característica peculiar, a ser considerado a chave primária desta tabela, ou seja, poderemos referenciar os clientes em cada registro (registro = linha preenchida na tabela, ou para ficar mais claro, cada cliente que for cadastrado) por meio deste campo deste campo. É desta forma que o banco de dados trabalha: para criar informações se utiliza das relações entre grupos de tabelas que nós criamos. Por exemplo, podemos saber qual o fornecedor tem feito mais vendas para nós ao puxar um relatório que mostre o número de compras e mercadorias adquiridas de cada um. 
Para tanto ligamos a informação do Nome do fornecedor (que é uma chave primária) na tabela do fornecedor ao nome do fornecedor (que não é chave primária, apenas número) na tabela de produtos.
Como já mostramos na figura anterior, todos os tipos de campos possuem propriedades (abaixo da tabela de inserção de dados e tipos) e elas sempre estarão visíveis, além de que quando e você selecionar uma propriedade, uma caixa de texto explicativa vai aparecer na parte direita para informar qual a sua utilidade propriedade.
Exemplo - na figura acima observe que a propriedade Valor automático (definido como “Sim”) está relacionada com a qualidade do Base de preencher automaticamente o campo a cada registro e em sua descrição está o texto:
Determine se este campo deve conter valores de incremento automático atribuído a cada novo registro.
Agora que o campo para o código do cliente foi criado e definido como chave primária (código que trará todas as informações do cliente), podemos passar para a conclusão dos demais itens, inserindo assim outros utilizados nesta tabela e que trarão mais dados para nossos relatórios e controles. Afinal de contas, é um cadastro, né?
É possível inserir o campos como na figura a seguir, respeitando sempre as letras maiúsculas e minusculas (e isso é muito importante para futuras consultas, edição de fórmulas, assim como aquele traço localizado a baixo de cada palavra (que muitos chamam de underline, mas o mais correto seria underscore), para que no futuro não ocorram problemas de referência em nosso controle.
Nossa tabela de cadastro de clientes comporta (ou agrupa, melhor dizendo) sete dados tipos de dados de clientes, com mais o número da chave, que é o código do cadastro, que por ser fundamental, nem o consideramos como um dato da tabela (toda tabela deve ter uma chave primária). 
Deve-se lembrar que ao concluir a inserção dos dados, é preciso clicar no botão salvar (que não vai salvar todo o banco de dados, mas apenas esta tabela) e definir o nome da tabela como Cliente.
Depois que salvar, feche-se a janela do editor para não ficar a ocupar espaço, até porque não precisaremos abrir agora. A tabela Cliente agora estará listada na janela Tabelas e a partir de agora, todas as tabelas que forem criadas serão adicionadas nesta mesma lista, como mostra a figura a seguir. 
Podemos notar aqui a forma como o LibreOffice Base organiza o seu banco de dados, agrupando os objetos em grupos de seleção de Tabelas, Consultas, Formulários e Relatórios, do lado esquerdo, as tarefas (para criação de novos objetos) à direita e á cima e em baixo, os itens constantes no grupo da esquerda que estiver selecionado.
Repita os passos anteriores para criar as próximas tabelas, lembrando de respeitar os nomes das tabelas e dos campos,. É bom que os campos tenham exatamente as configurações expressas na relação a seguir:
Nome da Tabela: Pedidos
Nome do Campo
Tipo do Campo
Propriedades
codigo_pedido
Integer
Valor automático = Sim
data_pedido
Date

codigo_cliente
Integer

pagamento
Text

Nome da Tabela: DetalhePedido
Nome do Campo
Tipo do Campo
Propriedades
id_detalhe
Integer
Valor automático = Sim
codigo_pedido
Integer

codigo_produto
Integer

quantidade
Integer

Nome da Tabela: Fornecedor
Nome do Campo
Tipo do Campo
Propriedades
codigo_fornecedor
Integer
Valor automático = Sim
nome
Text

cnpj
Text

endereço
Text

bairro
Text

cidade
Text

uf
Text

cep
Text

Nome da Tabela: Produto
Nome do Campo
Tipo do Campo
Propriedades
codigo_produto
Integer
Valor automático = Sim
nome
Text

quantidade
Integer

preco_custo
Decimal
Casas decimais = 2
preco_venda
Decimal
Casas decimais = 2
codigo_fornecedor
Integer


No próximo item trataremos dos relacionamentos dos dados das tabelas criadas.