Software de Kardex e Estoque

Kardex Tauro

O software de gestão de estoque Kardex Tauro® foi projetado para gerenciar seu armazém ou depósito de forma eficiente e pode ser aprendido em um curto período de tempo.

O Kardex Tauro é gratuito para uso não comercial.
Não requer conexão com a internet e funciona no Windows.

Código Python: SQLite do zero (criar, inserir, consultar, atualizar, excluir)

Código Python: SQLite do zero (criar, inserir, consultar, atualizar, excluir)

Quando a ficha de estoque vive espalhada em arquivos soltos — uma planilha por mês, uma cópia no computador do balcão e outra no e-mail do contador — o problema de fundo não é a tecnologia: é que ninguém consegue responder a uma pergunta simples com confiança. Quanto vale o depósito hoje. Por quanto saiu a furadeira na semana passada. Quantas fitas isolantes sobraram de verdade. Cada cópia dá a sua própria resposta e nenhuma delas manda. Este programa mostra, em sete passos que aparecem na tela, como essa mesma ficha de estoque fica guardada em um banco SQLite: um único arquivo, com uma única versão da verdade, onde um preço é corrigido em um só lugar e o total aparece sozinho. Ele foi escrito para o dono de um negócio pequeno, para o contador que recebe caixas de comprovantes e para o almoxarife que conta e anota; não é preciso saber programar para acompanhar o que está acontecendo.

Não há motor de banco de dados para instalar, nem licença para pagar, nem internet envolvida. O Python já traz o SQLite dentro e este ZIP traz o resto.

⬇ Baixar o código (ZIP)

O que vem no ZIP

Arquivo do pacotePara que serve
sqlite_desde_cero.pyO programa completo, comentado linha por linha em português, com os sete passos.
datos/productos.csvOito produtos de exemplo, com código, nome, categoria, preço e estoque.
salida_ejemplo.txtA saída real do programa, para comparar com a que aparecer na sua tela.
LEIAME.mdAs instruções de instalação e de execução, em dois minutos de leitura.

O que o negócio ganha com um banco de dados no lugar de arquivos soltos

Uma planilha é uma fotografia: serve para o que aparece na foto e para mais nada. Um banco de dados é um arquivo vivo, em que cada produto existe uma única vez e em que as regras valem sempre. Repare no que muda no dia a dia. Primeiro, acabam as cópias rivais: o preço do cabo é um número só, não aquele que o vendedor lembra. Segundo, o arquivo impede dados impossíveis: o programa define o código como chave, então não podem existir dois produtos com o mesmo código, por mais gente que trabalhe ao mesmo tempo. Terceiro, corrigir um preço não obriga ninguém a recalcular nada à mão, porque o valor de cada linha é obtido na hora da consulta. E quarto, o total do estoque e os subtotais por categoria são uma pergunta, e não uma fórmula que alguém colou na coluna ao lado e que se rompe quando uma linha nova é inserida.

Existe ainda uma vantagem que só aparece no dia ruim: o banco é alterado dentro de um bloco que se confirma por inteiro ou se desfaz por inteiro. Se o programa falhar no meio da carga, não fica meio estoque gravado: ou entrou tudo ou não entrou nada. Numa planilha, uma queda de energia no meio da colagem deixa um arquivo em que ninguém confia.

O que o programa faz

  1. Cria o banco e a tabela de produtos com os seus tipos, na primeira execução.
  2. Lê os oito produtos do arquivo de exemplo e os insere um por um, com uma consulta parametrizada.
  3. Consulta a tabela inteira ordenada por código e monta a lista com o valor de cada linha.
  4. Atualiza o preço do cabo e mostra o preço antes e o preço depois.
  5. Exclui a fita isolante e confirma quantos produtos continuam na tabela.
  6. Calcula o valor do estoque por categoria e confere se a soma das categorias bate com o total.
  7. Fecha a conexão e confirma: se algum passo tivesse falhado, o banco teria ficado como estava.

Como executar

Instale o Python 3.11 ou mais novo a partir do site oficial e marque a caixa que adiciona o Python ao sistema. Descompacte o ZIP em uma pasta confortável, abra o terminal nessa pasta e digite python sqlite_desde_cero.py. Não há nada mais para instalar: o banco vem dentro do Python e todas as outras ferramentas são da biblioteca padrão. Se o comando python não responder, tente py sqlite_desde_cero.py.

O código, explicado

O programa cabe em uma tela e meia e se lê de cima para baixo. Estes são os cinco trechos que vale a pena entender, porque são os que voltam depois em qualquer automação de estoque.

Um: de onde vêm as ferramentas. Quatro importações e nada mais. A segunda é a que interessa ao negócio, porque significa que o banco já vem junto com o Python e a sua cópia de segurança do estoque é um arquivo que se copia como se copia uma fotografia.

import csv                                         # csv: lê os produtos de exemplo de um arquivo de texto
import sqlite3                                     # sqlite3: o banco de dados vem dentro do Python, nada para instalar
from decimal import Decimal, ROUND_HALF_UP          # Decimal: dinheiro não se calcula com decimais binários (float)
from pathlib import Path                            # pathlib: caminhos que funcionam no Windows, Linux e Mac

Dois: o banco é aberto dentro de um contrato. O bloco with abre a conexão e, na saída, confirma as mudanças pendentes. Se algo der errado no caminho, ele desfaz tudo e deixa o arquivo como estava. Para o dono do negócio, é a diferença entre uma ficha de estoque confiável e uma ficha pela metade.

    # with sqlite3.connect(...): abre o banco e, ao sair do bloco, confirma as mudanças
    with sqlite3.connect(RUTA_DB) as conexion:
        cursor = conexion.cursor()

Três: os dados entram por pontos de interrogação. Aqui está a decisão mais importante do programa e ela quase nunca é explicada nos tutoriais. O texto da consulta é escrito uma única vez, com um ponto de interrogação para cada dado que vai entrar; os valores viajam separados, como uma lista ordenada. A consulta nunca é montada colando texto. A razão de negócio é simples: o nome de um fornecedor, a referência de um produto ou a observação de uma nota podem trazer aspas ou qualquer outro sinal, e se esse texto fosse colado dentro da consulta o motor leria aquilo como uma ordem, e não como um dado. Com parâmetros, o motor sabe sempre o que é ordem e o que é dado; além disso, a mesma consulta roda muitas vezes sem ser analisada de novo, que é exatamente o que se precisa ao carregar centenas de referências.

        sql_insert = ("INSERT INTO productos (codigo, producto, categoria, precio, "
                      "existencias) VALUES (?, ?, ?, ?, ?)")
        mostrar_sql(sql_insert)
        for producto in productos:
            cursor.execute(sql_insert, (
                producto["codigo"], producto["produto"],
                producto["categoria"], int(producto["preco"]),
                int(producto["estoque"]),
            ))

Quatro: o programa mostra o SQL que vai executar. Esta função parece enfeite e é metade do aprendizado: na tela você lê a ordem no idioma dos bancos de dados, um instante antes de ela rodar. Ao terminar a leitura você já reconhece as poucas instruções do ofício, e são as mesmas usadas por qualquer sistema de estoque sério.

def mostrar_sql(sql: str) -> None:
    """Mostra a instrução SQL que será executada: ver o SQL é metade do aprendizado."""
    print(f"SQL: {sql}")

Cinco: a pergunta de negócio, em uma linha. Contar os produtos e somar o valor do depósito agrupado por categoria, do maior para o menor, é exatamente o que o dono quer ver no fechamento do mês. Na planilha isso é uma tabela dinâmica que se refaz toda vez; aqui é uma única instrução que lê sempre os dados do momento.

        sql_grupo = ("SELECT categoria, COUNT(*) AS articulos, "
                     "SUM(precio * existencias) AS valor FROM productos "
                     "GROUP BY categoria ORDER BY valor DESC")

O que você vai ver na tela

A saída está em português, com os números no formato da casa. Um trecho da consulta e da lista de produtos:

SQL: INSERT INTO productos (codigo, producto, categoria, precio, existencias) VALUES (?, ?, ?, ?, ?)
Produtos inseridos: 8
----------------------------------------------------------------------------------------------
Código  Produto                      Categoria              Preço     Estoque             Valor
----------------------------------------------------------------------------------------------
E01     Cabo THHN 12 AWG (metro)     Elétrica            3.600,00         500      1.800.000,00
E02     Disjuntor 20 A               Elétrica           42.800,00          24      1.027.200,00
E03     Fita isolante preta          Elétrica            5.900,00         200      1.180.000,00
H01     Furadeira de impacto 650 W   Ferramentas       289.900,00          12      3.478.800,00
H02     Martelo de bola 16 oz        Ferramentas        45.900,00          40      1.836.000,00
H03     Chave ajustável 10 pol       Ferramentas        62.900,00          18      1.132.200,00
P01     Tubo PVC 1/2 pol x 3 m       Hidráulica         18.900,00         120      2.268.000,00
P02     Registro de gaveta 1/2 pol   Hidráulica         34.500,00          35      1.207.500,00
----------------------------------------------------------------------------------------------
Linhas consultadas: 8

E o fechamento, com o dado que o dono de fato leva para a reunião:

  Produtos na tabela: 7
  Valor total do estoque: 12.899.700,00
  Arquivo gerado: salida/tienda.db

Erros comuns e conselhos

  • Rodar o programa duas vezes seguidas não faz sujeira: ele apaga o banco anterior e o cria de novo, então a saída é sempre a mesma e pode ser comparada.
  • Se você editar o arquivo de produtos, respeite as vírgulas e os títulos das colunas. Um espaço a mais no nome de uma coluna deixa a carga sem dados.
  • O arquivo do banco não abre com duplo clique como uma planilha: é preciso uma ferramenta que fale o idioma das consultas, e é justamente isso que o programa faz.
  • Não mova o programa no meio do caminho: ele procura os dados ao lado de si mesmo, portanto, se quiser rodá-lo de outra pasta, mova o pacote inteiro.
  • Antes de testar mudanças, copie o arquivo do banco para outra pasta. Copiar um único arquivo é toda a cópia de segurança de que você precisa.
  • Os preços são guardados em unidades inteiras, sem centavos binários, e o valor de cada linha é calculado na consulta. Assim o total nunca carrega um centavo de diferença.

Quando isso deixa de bastar

Este programa é o ponto de partida certo quando você quer que a ficha de estoque viva em um só lugar e já perdeu o medo do terminal. Mas chega um momento em que o negócio pede mais: várias pessoas trabalhando ao mesmo tempo, faturamento, compras, relatórios que o contador possa imprimir sem ajuda de ninguém, cópias de segurança automáticas e botões no lugar de linhas de texto. É aí que um programa feito para isso — como o Kardex Tauro, que é gratuito e serve para organizar o estoque — passa a ser a escolha sensata: por dentro continua sendo um banco SQLite, só que você não precisa mais escrevê-lo. Enquanto esse momento não chega, este ZIP e o Kardex Tauro compartilham a mesma ideia de fundo: os dados do negócio são guardados uma única vez e bem guardados.

⬇ Baixar o código (ZIP)

Baixe o pacote, rode uma vez e leia a tela com calma. São sete passos e, no fim, o seu estoque já vive em um único banco de dados.

Compartilhar
Link copiado
Microsoft Store da Microsoft StoreBaixar grátis
Chatea por WhatsApp