Regras de negócio para estoque
08/11/2005
0
t+!
Delphi32
Posts
08/11/2005
Edilcimar
08/11/2005
Martins
Concordo com a lógica empregada em sua aplicação!!!
22/04/2006
Lorde_morte.
Gostei desta solução Edicimar me ajudou muito. :)
Esta solução resolve tranquilamente o problema exposto pelo delphi32.
Mas como resolver essas outras situações tambem:
[b:963a2d6ef9]Situação I[/b:963a2d6ef9](O fator de conversão entre as unidades pode mudar)
Atenção: É raro de acontecer, mas acontece!
As unidades podem variar:
Ex:
Momento I
Entrou 10 Blocos e cada bloco contem 20 unidades.
Momento II
Entrou os mesmos 10 blocos só que desta vez em um bloco vem apenas 15 unidades e não os 20 anteriores.
Obs: Podem existir simultaneamente blocos com 20unit e com 15unit de um mesmo produto no estoque.
[b:963a2d6ef9]Situação II[/b:963a2d6ef9](O relacionamento entre as unidades pode ser diferente dependendo do produto)
Unidade e diferentes produtos:
Ex:
A UNIDADE CAIXA do produto A vem com 100 unidades de A e UNIDADE CAIXA do produto B vem com 50 unidades de B.
[b:963a2d6ef9]Situação III[/b:963a2d6ef9](Unidades com relacionamentos que nunca mudam e se aplicam a todos os produtos)
Algumas unidades e suas relações não mudam nunca, como as unidades de comprimento(km, hm, m....), unidades de volume(lml) e varias outras.
Comentarios:
A verdade é que a situação II me quebrou.
O ideal seria por as unidades em produtos, o que seria bom porque o usuário teria que definir as unidades dos produtos uma única vez na vida.
Mas a vida não é tão simples e o não tratamento deste caso I levaria o meu projeto ao erro.
Tentando resolver, para cada entrada de um produto o usuário teria que informar toda a relação entre as unidades daquele produto, algo que me soa demasiadamente impraticável e trabalhoso para o usuário. Imagine para cada entrada de um produto o usuário ter que definir toda a relação que aquele produto possui com as unidades. Pedrera! Relações essas que em alguns casos serão um tanto complexas, envolvendo varias outras unidades.
Todo este trabalho apenas para tratar mudanças de unidades que podem demorar um, dois, dez anos ou talvez até mesmo um mês para ocorrer.
[b:963a2d6ef9]Como ficaria a tabela neste caso?[/b:963a2d6ef9]
Obrigado pessoal. Qualquer duvida estou ai.
22/04/2006
Edilcimar
13/06/2008
Vitor Alcantara
O caso é o seguinte:
Existem alguns produtos que são vendidos inteiros ou fracionados (Sabão em barra 5x200g, iogurte dranone 6x1, bandeja de ovos 30x1...).
Ou seja, na hora da entrada ele vem, por exemplo, 1 cx do sabão barra 10x5x200g (dez pacotes de 5x200g), só que na hora da venda ele pode ser vendido tanto o pacote inteiro (5x200g) como só uma barrinha (200g), onde logicamente ele sai um pouco mais caro fracionado (Exemplo o pacote inteiro custa R$ 1,00 e a barrinha separada custa R$ 0,30 que daria R$ 1,50 as cinco barrinhas ), o que acarreta em ter que cadastrar os dois produtos separadamente, (até mesmo pra ganho de velocidade na hora de passar no caixa, pois existe a possibilidade de se confeccionar etiquetas de código de barras pra a barrinha separada).
Nesse caso não seria um fracionamento do produto e sim uma transformação.
Alguém aqui no fórum já solucionou uma situação dessas?
Ficam ai as minhas dúvidas.
1º Como alterar as quantidades dos produtos no ato da venda ou da entrada? Só alterar a quantidade em estoque de apenas um produto (sabão barra 5x200g) ou alterar a quantidade em estoque dos dois (tanto o sabão barra 5x200g como a barrinha 200g)? Acho eu que não daria muito certo gerando um estoque falso, pois iria dobrar o valor do produto no estoque.
2º Como fazer pra alterar o custo do produto fracionado (barrinha de 200g), pois na hora da entrada iria ser cadastrado apenas no sabão 5x200g?
Meus clientes reclamam muito, pois tem de ficar toda hora indo na prateleira e contando quantos produtos, existem fracionado (barrinha de 200g) e inteiro (pacote de 5x200g), tendo de dar saída no inteiro e dar entrada no fracionado, para evitar que o estoque do produto fracionado fique negativo e o produto inteiro fique com uma quantidade que não existe.
Aguardo sugestões
Atenciosamente Vitor Araújo Alcântara.
14/06/2008
Emerson Nascimento
imagine que você tem no estoque 3 produtos ´inteiros´ e mais 4 frações.
no sistema está cadastrado desta forma:
3 pacotes (5x200) = 15 unidades
4 barras (1x200) = 4 unidades
ou seja: tem um total de 19 barras, correto?
chega um cliente no caixa com 4 barras.
como você poderia saber se ele pegou as quatro soltas ou abriu um pacote?
não tem como controlar isso. é por esse tipo de coisa que existe a necessidade de recontagem dos produtos (inventário).
como faço no meu sistema:
tenho o cadastro de produtos e de embalagens dos produtos. basicamente isso:
PRODUTO ----------- IDPRODUTO int (PK) Codigo varchar (IDX) Descricao varchar (IDX) PRODUTOEMBALAGEM -------------------------- IDPRODUTOEMBALAGEM int (PK) IDPRODUTO int (FK) UNIDADE varchar CODIGODEBARRAS varchar (UK) VALOR numeric FATOR numeric (em relação à menor unidade de venda) ESTOQUE ----------- IDESTOQUE int (PK) IDPRODUTO int (FK) SALDO numeric (saldo sempre na menor unidade) ESTOQUELOTE ----------------- IDESTOQUELOTE int (FK) IDESTOQUE int (FK) IDPRODUTOEMBALAGEM int (FK) SALDO numeric
IDX - indexado
FK - chave estrangeira
UK - chave única
usando o seu exemplo, minhas tabelas seriam preenchidas assim:
PRODUTO ----------- IDPRODUTO CODIGO DESCRICAO 1 12345 Sabão em barra Marca X PRODUTOEMBALAGEM -------------------------- IDPRODUTOEMBALAGEM IDPRODUTO UNIDADE CODIGODEBARRAS VALOR FATOR 1 1 UN 789 0,3 1 2 1 PC 1789 1 5 3 1 CX 2789 9,5 50 ESTOQUE ----------- IDESTOQUE IDPRODUTO SALDO (SEMPRE NA MENOR UNIDADE) 1 1 19 ESTOQUELOTE ----------------- IDESTOQUELOTE IDESTOQUE IDPRODUTOEMBALAGEM SALDO SALDOMENORUNIDADE 1 1 1 4 4 2 1 2 3 15
- Para saber o saldo físico, basta consultar a tabela ESTOQUE
- Para saber o saldo financeiro será preciso consultar a tabela EstoqueLote em conjunto com a tabela ProdutoEmbalagem.
(basta dividir o saldo pelo fator e multiplicar pelo valor)
ao passar no caixa um codigo de barras de unidade, seria abatido o saldo da unidade na tabela EstoqueLote (no caso, o registro de ID 1).
então vamos ao exemplo:
- passou no caixa 4 x Cod.Bar.789: abate o saldo de EstoqueLote ID 1. saldo fica em 0.
- passou no caixa 3 x Cod.Bar.789.
isso quer dizer que houve o rompimento de um pacote, pois não havia mais saldo de unidade.
então, deve-se diminuir o saldo da unidade PC (pacote) e adicionar na unidade UN, ficando a uinidade UN com saldo de 5
(isso mesmo, 5, pois um pacote tem 5 unidades).
depois faz-se o abatimento do saldo da unidade.
ilustrando:
ESTOQUE ----------- IDESTOQUE IDPRODUTO SALDO (SEMPRE NA MENOR UNIDADE) 1 1 19 ESTOQUELOTE ----------------- IDESTOQUELOTE IDESTOQUE IDPRODUTOEMBALAGEM SALDO SALDOMENORUNIDADE 1 1 1 4 (UN) 4 2 1 2 3 (PC) 15
- passou no caixa 4 x Cod.Bar.789.
abate o saldo de EstoqueLote ID 1 (pois esse é o ID cuja embalagem é 789). O saldo será zerado.
como ficam os registro após essa operação:
ESTOQUE ----------- IDESTOQUE IDPRODUTO SALDO (SEMPRE NA MENOR UNIDADE) 1 1 15 ESTOQUELOTE ----------------- IDESTOQUELOTE IDESTOQUE IDPRODUTOEMBALAGEM SALDO SALDOMENORUNIDADE 1 1 1 0 (UN) 0 2 1 2 3 (PC) 15
- agora, passou no caixa mais 3 x Cod.Bar.789.
isso quer dizer que houve o rompimento de um pacote, pois não havia mais saldo de unidade.
então, deve-se diminuir o saldo da unidade PC (pacote) e adicionar na unidade UN, ficando a unidade UN com saldo de 5
(isso mesmo, 5, pois um pacote tem 5 unidades).
como ficam os registro após essa operação:
ESTOQUELOTE ----------------- IDESTOQUELOTE IDESTOQUE IDPRODUTOEMBALAGEM SALDO SALDOMENORUNIDADE 1 1 1 5 (UN) 5 2 1 2 2 (PC) 10
nesse ponto NÃO será necessário alterar o estoque, pois o saldo total não foi alterado.
depois faz-se o abatimento do saldo da unidade: saída de 3 x Cod.Bar.789
como ficam os registro após essa operação:
ESTOQUE ----------- IDESTOQUE IDPRODUTO SALDO (SEMPRE NA MENOR UNIDADE) 1 1 12 ESTOQUELOTE ----------------- IDESTOQUELOTE IDESTOQUE IDPRODUTOEMBALAGEM SALDO SALDOMENORUNIDADE 1 1 1 2 (UN) 2 2 1 2 2 (PC) 10
é o mais próximo que dá pra chegar de um saldo físico real.
lembrando que esse tipo de movimentação mostrado acima pode ser feita desde a entrada do produto (em CX).
na primeira saída você fraciona a caixa utilizando a unidade imadiatamente inferior, até chegar na unidade vendida.
por exemplo, imaginando que não há saldo para o produto, nem registro na EstoqueLote:
ESTOQUE ----------- IDESTOQUE IDPRODUTO SALDO (SEMPRE NA MENOR UNIDADE) 1 1 0
deu entrada de 10 caixas, então os registros para o produto serão:
ESTOQUE ----------- IDESTOQUE IDPRODUTO SALDO (SEMPRE NA MENOR UNIDADE) 1 1 500 ESTOQUELOTE ----------------- IDESTOQUELOTE IDESTOQUE IDPRODUTOEMBALAGEM SALDO SALDOMENORUNIDADE 23 1 3 10 (CX) 500
agora vendi 2 pacotes. preciso fracionar 1 (uma) caixa:
ESTOQUELOTE ----------------- IDESTOQUELOTE IDESTOQUE IDPRODUTOEMBALAGEM SALDO SALDOMENORUNIDADE 23 1 3 9 (CX) 450 24 1 2 10 (PC) 50
agora subtraio o saldo:
ESTOQUE ----------- IDESTOQUE IDPRODUTO SALDO (SEMPRE NA MENOR UNIDADE) 1 1 490 ESTOQUELOTE ----------------- IDESTOQUELOTE IDESTOQUE IDPRODUTOEMBALAGEM SALDO SALDOMENORUNIDADE 23 1 3 9 (CX) 450 24 1 2 8 (PC) 40
agora vamos usar aquela mesma entrada (10 CX), porém efetuando a saída de 3 UN (esqueçamos a saida de 2 barras).
procuro pelo saldo em UN. não encontrei, então preciso procurar pelo saldo na unidade imediatamente superior (PC).
não tem, então procuro pelo saldo na unidade imediatamente superior (CX). daí é só fracionar para ´baixo´, até a unidade vendida:
inicio:
ESTOQUE ----------- IDESTOQUE IDPRODUTO SALDO (SEMPRE NA MENOR UNIDADE) 1 1 500 ESTOQUELOTE ----------------- IDESTOQUELOTE IDESTOQUE IDPRODUTOEMBALAGEM SALDO SALDOMENORUNIDADE 23 1 3 10 (CX) 500
para efetuar a saída de 3 UN precisamos alterar o estoque para as embalagens necessárias ao processo:
ESTOQUELOTE ----------------- IDESTOQUELOTE IDESTOQUE IDPRODUTOEMBALAGEM SALDO SALDOMENORUNIDADE 23 1 3 9 (CX) 450 24 1 2 9 (PC) 45 25 1 1 5 (UN) 5
note que até aqui a soma dos produtos deve ser igual ao saldo (500), pois ainda não foi efetuada qualquer saída.
agora, efetivando a saída das 3 UN:
ESTOQUE ----------- IDESTOQUE IDPRODUTO SALDO (SEMPRE NA MENOR UNIDADE) 1 1 497 ESTOQUELOTE ----------------- IDESTOQUELOTE IDESTOQUE IDPRODUTOEMBALAGEM SALDO SALDOMENORUNIDADE 23 1 3 9 (CX) 450 24 1 2 9 (PC) 45 25 1 1 2 (UN) 2
na explicação parece complicado, mas na prática funciona satisfatoriamente.
14/06/2008
Vitor Alcantara
Vou estudar com calma pra ver se tem como implementar essa idéia no meu sistema.
Do jeito que você demonstrou acima, daria até pra resolver outro problema que ocorre, a venda de varejo e atacado. Pois no varejo você venderia as unidades menores (PC e UN) com seus respectivos preços, e na venda atacado você poderia vender a unidade maior (CX). Outra idéia que poderia ser complementada na sua explicação seria a adição de um campo com o custo do fracionamento (como etiquetas de códigos de barras, ou embalagens extras utilizada pra confeccionar o produto na sua menor unidade), para que ficasse melhor de se confeccionar o preço final do produto.
Emerson.en muito obrigado pela sua resposta.
16/06/2008
Bico
Vitor, você pode resolver a situação que você está colocando através da composição de produtos. No meu sistema existe uma tabela que é a estrutura do produto. Nesta tabela estão os produtos e as respectivas quantidades que formam o produto final.
Por exemplo: No seu caso o produto barrinha de sabão seria composto por 0,2 KG do produto sabão - Assumindo que a unidade de medida utilizada seja KG.
Na verdade é um sistema para indústria e acaba envolvendo ordens de fabricação de determinado produto.
Por exemplo: É gerada uma ordem de fabricação de 10 barrinhas de sabão. No momento que a ordem é concluída, entra no estoque 10 barrinhas de sabão e sai do estoque 2 KG de sabão.
Qualquer dúvida, dá um grito aí.
Atenciosamente,
Fernando.
16/06/2008
Vitor Alcantara
Você teria como mostrar um resumo da estrutura das suas tabelas (a de produtos e de composição de produtos), para que eu possa dar uma analisada na sua idéia.
16/06/2008
Bico
Por exemplo:
Vamos supor que seja uma fábrica de doces.
O usuário pode comprar uma caixa com 12 doces ou doces de forma individual, sem estar na caixa.
A estrutura do produto seria basicamente esta:
1 Un 10-Caixa de doces --+--- 1 Un 20-Caixa | +--- 12 Un 30-Doce --+--- 0,05 Kg 40-Farinha | +--- 0,1 Un 50-Fermento | +--- 0,01 Kg 60-Açúcar
De forma resumida, a representação desta estrutura nas tabelas do banco seria esta:
Tabela de produtos:
+---------+-----------------------+-------------+-----------+ | COD_PRD | DESCRICAO | VALOR_VENDA | UN_MEDIDA | +---------+-----------------------+-------------+-----------+ | 10 | Caixa de doces | 10,00 | Un | +---------+-----------------------+-------------+-----------+ | 20 | Caixa | 1,00 | Un | +---------+-----------------------+-------------+-----------+ | 30 | Doce | 2,00 | Un | +---------+-----------------------+-------------+-----------+ | 40 | Farinha | 4,00 | KG | +---------+-----------------------+-------------+-----------+ | 50 | Fermento | 2,50 | Un | +---------+-----------------------+-------------+-----------+ | 60 | Açúcar | 5,00 | KG | +---------+-----------------------+-------------+-----------+
Tabela de estrutura de produtos:
+---------+----------------+---------+ | COD_PRD | COD_COMPONENTE | QTDE | +---------+----------------+---------+ | 10 | 20 | 1,000 | +---------+----------------+---------+ | 10 | 30 | 12,000 | +---------+----------------+---------+ | 30 | 40 | 0,050 | +---------+----------------+---------+ | 30 | 50 | 0,100 | +---------+----------------+---------+ | 30 | 60 | 0,002 | +---------+----------------+---------+
Neste exemplo o produto é composto por vários produtos, mas com esta estrutura pode ser composto de um produto, vários produtos e pode ter um ou vários níveis.
Eu vendo o produto, com seu preço de venda e baixo o mesmo do estoque.
Por exemplo: Se eu precisar fabricar mais 20 doces, eu gero uma ordem de fabricação de 20 doces. No momento que eu concluo a minha ordem de fabricação, dou entrada em 20 doces no estoque e saída das quantidades que utilizei para fabricar estes 20 doces.
Se eu quiser fabricar 2 caixas de doces (24 doces) eu gero uma ordem de fabricação de 2 caixas de doces. No momento de concluir a ordem de fabricação eu tenho que explodir a estrutura do produto, ignorando os intermediários e chegando aos produtos finais - matéria-prima. Dou entrada das caixas de doces e saída dos componentes do estoque.
A respeito dos produtos intermediários - os doces, por exemplo. Quando eu gero a ordem de fabricação e quando concluo ela eu dou ao usuário a opção de fabricar os produtos intermediários ou usar os que estiverem no estoque. Se for utilizado o que estiver no estoque, baixa apenas o primeiro nível da estrutura do estoque, senão baixa apenas o último nível da estrutura.
Espero ter ajudado.
Qualquer dúvida, estamos aí...
Atenciosamente,
Fernando.
16/06/2008
Emerson Nascimento
o ´X´ da questão é o procedimento a ser tomado quando um produto passar no caixa. com a sua solução ele ainda terá o mesmo problema citado anteriormente.
imagine, usando sua estrutura, que entraram no estoque 5 caixas de doce (cada caixa com 12 unidades).
ele pode vender tanto caixa fechada, quanto a unidade.
pelo que o Vitor apresentou, os donos do estabelecimento querem saber qual o saldo em cada unidade. seria simples se exibisse saldo=60 unidades (realmente seria muuuuito mais simples), mas não é isso que querem, pois a caixa tem um valor de venda e a unidade tem outro valor.
segundo o colega, ele precisa exibir que tem em estoque 5 caixas.
no momento da entrada do produto isso é fácil (na indústria seria a ´baixa da ordem de produção´).
então vamos ao problema...
temos 5 caixas de doce no estoque.
- um cliente passa com 5 unidades (com certeza abriu uma caixa, pois havia somente caixas).
- outro cliente passa, agora com 3 unidades. como saber se ele pegou essas três unidades da caixa aberta ou se abriu uma nova caixa?
porque para fabricar é simples: é 1 + 1.
é você quem fabrica e põe no estoque nas unidades que você quer.
mas e nesse caso de venda? como você resolveria com sua estrutura?
porque aí você somente exemplifica a ´estrutura´ do produto, e não a movimentação de estoque, que é o problema apontado pelo Vítor.
a solução que eu apresentei também não é infalível. sempre será necessário fazer um inventário periódico.
eu trabalho no ramo de logística e enfrento esse tipo de problema todos os dias.
aqui o caso é ainda pior: há vários que clientes que trabalham com o mesmo produto, cada um vendendo de uma forma.
por exemplo, clientes que trabalham com Tang (suco):
alguns vendem o pacotinho, outros vendem em display, outros em caixa...
alguns vendem em todas as unidades citadas...
outros montam a unidade a seu gosto (conjunto de 4 pacotinhos, por exemplo). todas essas formas, mesmo se tratando de um mesmo produto.
montar essas unidades é simples. o problema é controlar o saldo em estoque dessas várias unidades.
Clique aqui para fazer login e interagir na Comunidade :)