ERP - Controle de Estoque - Como verificar saldos negativos em depósitos baseado na movimentação da tabela E210MVP
Dúvida
Como verificar saldos negativos em depósitos baseado na movimentação da tabela E210MVP?
Exemplo de uso do comando: verificar antecipadamente os saldos negativos de determinados produtos para que sejam ajustados antes de fazer o Fechamento de Estoques, evitando que o fechamento seja interrompido por falta de saldo.
Solução
Atenção
- Os comandos indicados abaixo só funcionam caso seja efetuada a busca de todos os movimentos da tabela E210MVP até a data final desejada. Ou seja, o comando não funcionará caso deseja-se fazer uma verificação tendo uma Data Inicial que não seja a data em que tenha sido iniciado o uso do sistema. Isso porque o comando não verificará o QtdAnt, ele faz a análise de todas as movimentações;
- Recomenda-se cautela na utilização desse comando em bases de dados que tenham muitos movimentos registrados na tabela E210MVP, pois como ele só funciona sem ter uma Data Inicial, em bases que tenham muitos registros haverá perda de performance para execução do comando;
- A adição de mais filtros na execução do comando poderá comprometer a busca de informações e trará dados que não são os dados que seriam verificados em tempo de execução da Rotina de Fechamento de Estoques.
Comando para Banco de Dados Oracle
SELECT *
FROM (
SELECT
E210MVP.CODEMP AS MVPCODEMP,
E210MVP.CODPRO AS MVPCODPRO,
E210MVP.CODDER AS MVPCODDER,
E210MVP.CODDEP AS MVPCODDEP,
COALESCE(SUM(CASE WHEN E210MVP.ESTEOS = 'E' THEN E210MVP.QTDMOV ELSE 0 END), 0) AS Total_Entradas,
COALESCE(SUM(CASE WHEN E210MVP.ESTEOS = 'S' THEN E210MVP.QTDMOV ELSE 0 END), 0) AS Total_Saidas,
COALESCE(SUM(CASE WHEN E210MVP.ESTEOS = 'E' THEN E210MVP.QTDMOV ELSE 0 END), 0) - COALESCE(SUM(CASE WHEN E210MVP.ESTEOS = 'S' THEN E210MVP.QTDMOV ELSE 0 END), 0) AS SALDOMVP
FROM
E210MVP
INNER JOIN
E075PRO ON E075PRO.CODEMP = E210MVP.CODEMP AND E075PRO.CODPRO = E210MVP.CODPRO
INNER JOIN
E075DER ON E075DER.CODEMP = E210MVP.CODEMP AND E075DER.CODPRO = E210MVP.CODPRO AND E075DER.CODDER = E210MVP.CODDER
WHERE
E210MVP.CODEMP = X AND --Preencher com Código da Empresa
E210MVP.FILDEP = X AND --Preencher com código da Filial do Depósito
E210MVP.DATMOV <= to_date('30/11/2023','DD/MM/YYYY') AND --data máxima que deseja-se buscar os saldos
E210MVP.ESTMOV IN ('NO','NR','NB')
GROUP BY
E210MVP.CODEMP, E210MVP.CODPRO, E210MVP.CODDER, E210MVP.CODDEP
)
WHERE SALDOMVP < 0;
Comando para Banco de Dados Microsoft SQLServer
SELECT
*
FROM
(
SELECT
E210MVP.CODEMP AS MVPCODEMP, E210MVP.CODPRO AS MVPCODPRO, E210MVP.CODDER AS MVPCODDER, E210MVP.CODDEP AS MVPCODDEP, COALESCE(SUM(CASE WHEN E210MVP.ESTEOS = 'E' THEN E210MVP.QTDMOV ELSE 0 END), 0) AS Total_Entradas,
COALESCE(SUM(CASE WHEN E210MVP.ESTEOS = 'S' THEN E210MVP.QTDMOV ELSE 0 END), 0) AS Total_Saidas, COALESCE(SUM(CASE WHEN E210MVP.ESTEOS = 'E' THEN E210MVP.QTDMOV ELSE 0 END),
0) - COALESCE(SUM(CASE WHEN E210MVP.ESTEOS = 'S' THEN E210MVP.QTDMOV ELSE 0 END), 0) AS SALDOMVP
FROM
E210MVP INNER JOIN E075PRO ON E075PRO.CODEMP = E210MVP.CODEMP AND
E075PRO.CODPRO = E210MVP.CODPRO INNER JOIN E075DER ON E075DER.CODEMP = E210MVP.CODEMP AND
E075DER.CODPRO = E210MVP.CODPRO AND
E075DER.CODDER = E210MVP.CODDER
WHERE
E210MVP.CODEMP = X AND --Preencher com Código da Empresa
E210MVP.FILDEP = X AND --Preencher com código da Filial do Depósito
E210MVP.DATMOV <= '01-05-2022' AND --data máxima que deseja-se buscar os saldos
E210MVP.ESTMOV IN ('NO','NR','NB')
GROUP BY
E210MVP.CODEMP, E210MVP.CODPRO, E210MVP.CODDER, E210MVP.CODDEP ) AS Subconsulta
WHERE
SALDOMVP < 0
Para mais informações sobre o Processo de Controle de Estoque do Gestão Empresarial | ERP, consulte o artigo ERP - Controle de Estoque - Onde é possível encontrar informações diversas sobre processo de Controle de Estoques.