Boa tarde meus amigos. Será que vocês poderiam me orientar numa instrução SQL.
Até então o controle de estoques do meu sistema era bastante simplificado. Quando ocorria uma compra de um produto, o sistema somava aquela entrada e quando ocorria a venda, o sistema descontava aquela quantidade vendida no campo QuantProd da tabela de cadastro do produto, utilizando uma consulta UPDATE simples.
Agora estou aperfeiçoando o sistema, e preciso fazer um controle de estoque do tipo PEPS (primeiro que entra, primeiro que sai), baseado nas datas de vencimento dos produtos. Os produtos que entram primeiro devem sair primeiro, porque possuem datas de vencimento menores.
As compras de produtos estão sendo gravadas na tabela TBL_ESTOQUEAUX (principais campos: CodEstoqueAux, CodCompra, DescProduto, QuantProd, DataVenc e LoteProd). Cada produto tem um cadastro único em uma outra tabela central, mas cada compra gera um novo registro de entrada do produto nesta tabela auxiliar que eu criei para este controle, e cada um desses registros possui uma data de vencimento daquele lote comprado. E então a soma das quantidades de todas as entradas do produto corresponderá ao estoque deste produto.
Então, a grande questão é a necessidade de quando ocorrer a venda de produtos, o sistema deve atualizar as quantidades dos registros desses produtos que tiverem o vencimento mais antigo na tabela TBL_ESTOQUEAUX, utilizando os dados da tabela TBL_VENDASDET (campos: CodVendasDet, CodVenda, DescProduto, QuantProd) que contém as quantidades vendidas dos produtos.
Eu consigo facilmente criar uma consulta SELECT com um agrupamento dos produtos com menor data de vencimento da tabela TBL_ESTOQUEAUX, com o operador "Mín". O problema é que não posso criar uma consulta UPDATE com este mesmo tipo de agrupamento. Quando altero o tipo de consulta Seleção para Atualização, o Access desabilita a função de agrupamentos para escolhermos os operadores. E não consigo pensar em outros critérios no UPDATE que considere somente os registros com menor data de vencimento.
A dificuldade maior nesta questão é que não podemos utilizar um critério de "entre datas", que seria bem mais simples. O que precisamos é fazer uma verificação dos registros com as datas menores desta tabela, que não é tão simples. Existiria algum critério para a consulta Update atualizar somente os registros com as menores datas?
Conseguindo resolver esta questão, bastarei finalizar o código com uma consulta Delete para remover os registros com estoques zerados.
Até então o controle de estoques do meu sistema era bastante simplificado. Quando ocorria uma compra de um produto, o sistema somava aquela entrada e quando ocorria a venda, o sistema descontava aquela quantidade vendida no campo QuantProd da tabela de cadastro do produto, utilizando uma consulta UPDATE simples.
Agora estou aperfeiçoando o sistema, e preciso fazer um controle de estoque do tipo PEPS (primeiro que entra, primeiro que sai), baseado nas datas de vencimento dos produtos. Os produtos que entram primeiro devem sair primeiro, porque possuem datas de vencimento menores.
As compras de produtos estão sendo gravadas na tabela TBL_ESTOQUEAUX (principais campos: CodEstoqueAux, CodCompra, DescProduto, QuantProd, DataVenc e LoteProd). Cada produto tem um cadastro único em uma outra tabela central, mas cada compra gera um novo registro de entrada do produto nesta tabela auxiliar que eu criei para este controle, e cada um desses registros possui uma data de vencimento daquele lote comprado. E então a soma das quantidades de todas as entradas do produto corresponderá ao estoque deste produto.
Então, a grande questão é a necessidade de quando ocorrer a venda de produtos, o sistema deve atualizar as quantidades dos registros desses produtos que tiverem o vencimento mais antigo na tabela TBL_ESTOQUEAUX, utilizando os dados da tabela TBL_VENDASDET (campos: CodVendasDet, CodVenda, DescProduto, QuantProd) que contém as quantidades vendidas dos produtos.
Eu consigo facilmente criar uma consulta SELECT com um agrupamento dos produtos com menor data de vencimento da tabela TBL_ESTOQUEAUX, com o operador "Mín". O problema é que não posso criar uma consulta UPDATE com este mesmo tipo de agrupamento. Quando altero o tipo de consulta Seleção para Atualização, o Access desabilita a função de agrupamentos para escolhermos os operadores. E não consigo pensar em outros critérios no UPDATE que considere somente os registros com menor data de vencimento.
A dificuldade maior nesta questão é que não podemos utilizar um critério de "entre datas", que seria bem mais simples. O que precisamos é fazer uma verificação dos registros com as datas menores desta tabela, que não é tão simples. Existiria algum critério para a consulta Update atualizar somente os registros com as menores datas?
Conseguindo resolver esta questão, bastarei finalizar o código com uma consulta Delete para remover os registros com estoques zerados.