Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Como posso fazer a implementação FIFO para um balanço de estoque?
Sendo que, tenho os seguintes dados:
Entrada:
Produto | Qtd | Valor Unit
------------------------------------------------
Produto 1 | 20 | 13.00
------------------------------------------------
Produto 1 | 10 | 12.00
------------------------------------------------
Saida:
Produto | Qtd
------------------------------------------------
Produto 1 | 24
------------------------------------------------
Se der saída de 24 unidades do produto 1, as 20 primeiras terá o valor unitário de R$ 13,00 e as outras 4 unidades de R$ 12,00.
E qtd em estoque será 6 unidades com valor unitário de R$ 12,00.
É possivel retornar uma query no formato:
Produto | Qtd | Valor Unit
------------------------------------------------
Produto 1 | 20 | 13.00
------------------------------------------------
Produto 1 | 4 | 12.00
------------------------------------------------
Oi Motta eu tenho a data sim.
A principio imaginei que seria necessário o uso de procedure sim.
Mas não vejo o processo de sempre pegar a ultima quantidade válida.
=(
Veja se ajuda :
http://ask.sqlservercentral.com/questions/1961/the-fifo-stock-inventory-sql-problem.html
http://stackoverflow.com/questions/3005323/how-can-i-manage-a-fifo-queue-in-an-database-with-sql
http://www.kodyaz.com/t-sql/fifo-example-query-in-sql-server.aspx
Aparentemente soluções sql puras.
Tentei algumas implementações de acordo com os exemplos mas não esta rolando...
Tem alguma sugestão de como poderia montar um procedure talvez?
Abraços
Não, mas a minha ideia inicial seria montar uma tabela temporária com o "saldo" e depois ler esta temp.
Nessa temp, como eu poderia ter a informação do último estoque valido?
1) Cria uma temp com
Produto | Qtd | Valor Unit
2) insere na tabela a medida que se vai abatendo o estoque até o fim da quantidade
Ler desta temp
Nesse caso eu faria uma leitura da tabela de saida, pegaria a qtd de saida, logo em seguida faria um while e popularia a tabela temp fazendo a comparação com os registros de entrada?
Sim, a ideia básica é esta.
Mas o comando WITH (não coneço a fundo) não resolve o problema ?
Pois é Motta, eu não conheço a fundo a programação em MySQL, por isso estou penando um pouco em fazer essa funcionalidade.
Poderia até tentar resolver via script, PHP por exemplo, mas isso será um serviço e então no script não iria me ajudar muito, por isso estou tentando resolver via banco mesmo.
Tem algum exemplo de como pensou na utilização do WITH?
Problema resolvido.
Utilizei uma procedure para popular uma tabela com o saldo e uma função para cada insert na tabela saldo consultar o estoque e pegar o valor de acordo com a quantidade disponível em estoque.
Para fazer FIFO (First In First Out) não seria preciso a data ?!
Seria feito pela ordem do registro ?
Em princípio não vejo como fazer por SQL puro, acho que somente por Procedure pois seria preciso verificar todas as possibilidades de estoque.