A definição do controle de estoques, deve levar em consideração parâmetros de abrangência e de funcionalidade, e como já escrevi em posts anteriores sobre parâmetros de abrangência, estarei discorrendo agora sobre um parâmetro de funcionalidade que eu particularmente, considero o mais importante em um controle de estoques eficiente, que é a "capacidade de recuperação de informações históricas".
As principais informações históricas que a maioria dos sistemas não consegue recuperar, ou se consegue, consegue de forma ineficiente, são o saldo do produto e o custo médio, por se tratarem de informações que são sobrepostas a cada entrada (o saldo e custo médio) ou a cada saída (o saldo).
Destrinchando o problema, podemos partir de dois pontos básicos, que facilitam a boa definição do controle de estoques, que são:
Gravação dos dados de estoques de períodos pré definidos, no arquivo de estoques.
Possibilidade de reprocessamento a partir de arquivos de movimentação (vendas, compras, devolução de clientes, devolução a fornecedores, ajustes de estoque).
Mas se podemos reprocessar a partir dos arquivos de movimentação, teóricamente, qualquer sistema que tenha esses arquivos de movimentação pode obter o estoque ou custo médio em períodos anteriores. Realmente pode, mas não de forma rápida e simples, pois essa obtenção se daria a partir de reprocessamento do início pro fim, ou do fim pro início, e dependendo do tamanho dos arquivos, seria um processo extramamente demorado e complexo, uma vez que até a ordem dos arquivos a reprocessar interessa no caso de reprocessamento de custo médio.
Mas então, qual seria a solução mágica pra esse reprocessamento ? Não se trata de solução mágica, mas sim o uso de recursos semelhante ao controle de saldo em sistemas de contabilidade, que facilitam esse controle mais eficaz.
Pensei em uma forma de expor as informações que levasse o leitor a pensar, sem dar receita de bolo, mas nesse caso não encontrei a forma ideal pra isso, portanto, vou passar de forma mastigada mesmo.
Primeiramente, vamos à estrutura do arquivos de estoques:
* Chave primária
Código da empresa (Em se tratando de sistema multi-empresa)
Código da empresa (Em se tratando de sistema multi-empresa)
Código do produto
Depósito (Caso o sistema contemple múltiplos depósitos)
Depósito (Caso o sistema contemple múltiplos depósitos)
Lote (Caso o sistema contemple controle por lotes de mercadoria)
* Demais campos da tabela
ANOREF (Ano de referência do registro de estoque)
SALDANT (Saldo do exercício anterior)
CPMES01 (Compras do mês 01)
VNMES01 (Vendas do mês 01)
DCMES01 (Devoluções de clientes do mês 01)
DFMES01 (Devoluções a fornecedores mês 01)
ABMES01 (Alimentação de balanço/ajustes mês 01)
SLMES01 (Saldo final do mês 01)
CMED01 (Custo médio mês 01)
...
...
...
CPMES12 (Compras do mês 12)
VNMES12 (Vendas do mês 12 )
DCMES12 (Devoluções de clientes do mês 12)
DFMES12 (Devoluções a fornecedores mês 12)
ABMES12 (Alimentação de balanço mês 12)
SLMES12 (Saldo final do mês 12)
CMED12 (Custo médio mês 12)
* Não citarei os demais campos do arquivo de estoques, pois o foco é o saldo e o custo médio
Os lançamentos no estoque, provenientes da movimentação ou da alimentação de balanço, deverão procurar no arquivo, e caso não encontre, abrir um registro com o código do produto, o código da empresa, o código do depósito e o ano do lançamento, deve-se também buscar se existe um registro anterior daquele produto, para pegar o saldo anterior que será alimentado no novo registro que foi criado.
Os lançamentos no estoque, provenientes da movimentação ou da alimentação de balanço, deverão procurar no arquivo, e caso não encontre, abrir um registro com o código do produto, o código da empresa, o código do depósito e o ano do lançamento, deve-se também buscar se existe um registro anterior daquele produto, para pegar o saldo anterior que será alimentado no novo registro que foi criado.
Caso seja feito um lançamento, ou a exclusão de um, com exercício inferior a lançamentos pré-existentes, deve-se reprocessar os saldos anteriores dos registros subseqüentes de acordo com a característica daquele lançamento, Inclusive recalculando os campos de custo médio de cada mês.
A alimentação do estoque, proveniente de movimentação ou de alimentação do balanço, deverá alimentar o respectivo campo de movimentação ou alimentação de balanço, do mês de referência da data do lançamento, bem como o saldo final do mês, com a seguinte regra:
(+) Saldo anterior (soma do SALDANT mais os saldos dos meses anteriores)
(+) Compras do mês
(+) Devoluções de clientes do mês
(+) Alimentação de balanço do mês
( -) Vendas do mês
( -) Devoluções a fornecedores do mês
(+) Saldo anterior (soma do SALDANT mais os saldos dos meses anteriores)
(+) Compras do mês
(+) Devoluções de clientes do mês
(+) Alimentação de balanço do mês
( -) Vendas do mês
( -) Devoluções a fornecedores do mês
A consulta do saldo atual, pode ser feita através de uma função que retorna esse saldo, para que a mesma seja utilizada em qualquer parte do sistema, que se dará pela soma do saldo anterior, mais os saldos do mês 01 ao mês 12.
Os saldos dos meses 01 ao 12, se referem apenas à movimentação daquele mês, e não ao saldo acumulado, para que quando da necessidade de reprocessamento por causa de lançamentos em exercícios anteriores, seja necessário apenas alterar os campos de saldo anterior e custos médios subseqüentes, e caso o lançamento seja em data anterior, mas no mesmo exercício, não haja necessidade de nenhum reprocessamento de estoque, sendo necessário reprocessar apenas os custos médios dos meses subseqüentes.
Esta rotina parece um pouco complexa, mas se bem entendida, e utilizada, facilita sobremaneira o controle de estoques, e possibilita total rastreabilidade dos estoques a partir das movimentações.
As possibilidades de utilização, ficam a cargo de cada projetista de software, mas garanto que existem tanto possibilidades operacionais, quanto gerenciais.