Pular para o conteúdo principal

Parâmetro de Alerta de Estoque Negativo

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Ambos → Opção 1 Tabela: PARMFATUR.ST_ALERTAESTOQUENEGATIVO Valor padrão: N (Não)

Telas impactadas​

MóduloCódigoDescrição
Pedido de VendaMPD002Pedido de venda — alerta quando quantidade exceder saldo (físico ou comprometido)
Pedido (Simplificado)MPD005Pedido simples — propaga o parâmetro para VERIFICA_ESTOQUENEGATIVOOS
OrçamentoMPD018Orçamento — valida saldo ao salvar (apenas opção 'S')
Pedido com Controle de OrdemMPD010Pedido — valida saldo ao salvar (apenas 'S')
Pedido (Apoio)MPD011Pedido — trata 'S' e 'F' em diferentes fluxos
Pedido Mobile/SimplificadoMPD020Pedido mobile — trata 'S' e 'F', verifica ao inserir item
Pedido Concretagem/Armadura/OficinaMPD0583 sub-forms de produção (concretagem/armadura/oficina) — apenas 'S'
Pedido ProduçãoMPD073Pedido de produção — apenas 'S'
Pedido de CompraMPD092Pedido de compra — apenas 'S'
NF Saída (Outra) / ConfirmaçãoMNF017NF de saída outra, confirmação de pedido — trata 'S' e 'F'
Nota Fiscal SaídaMNF002Apenas no SELECT que carrega PARMFATUR (sem uso direto encontrado)
NF Entrada (Avulsa)MNF008Apenas no SELECT do PARMFATUR (sem uso efetivo)
Ordem de ServiçoMOF001OS — valida saldo em ITEMCONSUMO e SERVICOITEM, trata 'S' e 'F'
Ordem de Serviço (Outra)MOF002OS — carrega o parâmetro (sem uso direto encontrado)
Ordem Carregamento/RomaneioMRC019Romaneio — apenas 'S'
Recap NFMRC020Recap NF — carrega em iST_ALERTAESTOQUENEGATIVO
Contas a ReceberMCO006Apenas no SELECT do PARMFATUR (sem uso efetivo)
Consulta PedidosCPD009Inclui o campo no UPDATE/SELECT do PARMFATUR
Cadastro AuxiliarRCA006Inclui o campo no UPDATE/SELECT do PARMFATUR

Procedures impactadas​

Procedures de verificação de estoque​

ProcedureArquivoDescrição
VERIFICA_ESTOQUENEGATIVONOTAScripts/VERIFICA_ESTOQUENEGATIVONOTA.sqlValida saldo de itens da NF. Escolhe entre saldo físico (RETORNA_SALDOESTOQUE) ou comprometido (RETORNA_ESTOQUECOMPROMETIDO) conforme opção 'F' ou 'S'
VERIFICA_ESTOQUENEGATIVOPEDIDOScripts/VERIFICA_ESTOQUENEGATIVOPEDIDO.sqlValida saldo de itens do Pedido. Mesmo padrão de escolha físico vs comprometido
VERIFICA_ESTOQUENEGATIVOOSScripts/VERIFICA_ESTOQUENEGATIVOOS.sqlValida saldo em Ordem de Serviço. Retorna O_ST_ALERTAESTOQUENEGATIVO baseado no parâmetro

Procedures de saldo por grade​

ProcedureArquivoDescrição
RETORNA_QTDEESTOQUEGRADEScripts/RETORNA_QTDEESTOQUEGRADE.sqlRetorna quantidade em estoque por grade. Usa ST_ALERTAESTOQUENEGATIVO (em variável V_ST_ESTOQUENEG) em conjunto com ST_ESTOQUENEGATIVO para decidir se considera saldo físico ou comprometido
RETORNA_ESTOQUECOMPROMETGRADEScripts/RETORNA_ESTOQUECOMPROMETGRADE.sqlRetorna estoque comprometido por grade. Lê o parâmetro para aplicar regra

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_ALERTAESTOQUENEGATIVOFlag (F/S/N) que define se o sistema alerta quando item ficaria com estoque negativo, e qual base de cálculo usar
PARMFATUR.ST_ESTOQUENEGATIVOParâmetro complementar que bloqueia (em vez de apenas alertar) a operação com estoque negativo
ITEMPEDIDO.QT_PEDIDA / ITEMNOTA.QT_ITEMNOTAQuantidade do item comparada com saldo
ITEMPEDIDO.PS_PEDIDO / ITEMNOTA.PS_ITEMNOTAPeso do item (comparado com saldo quando aplicável)
ITEM.ST_ESTOQUEControle de estoque do produto ('S' = controla estoque). Itens que não controlam estoque são ignorados pela validação

Opções disponíveis​

F - Sim (Saldo Físico)​

O que fazDetalhe
Alerta estoque negativo?Sim
Base de cálculoSaldo físico puro — consulta RETORNA_SALDOESTOQUE (ou RETORNA_SALDOESTOQUEGRADE para grades)
Ignora pedidos pendentes?Sim — desconsidera compromisso de saída já gravado (pedidos abertos)
No Delphi (MPD002, MPD020, MNF017, MOF001, MPD011)Compara PS_PEDIDO ou QT_PEDIDA com QT_SALDOFISICO/QT_FISICO
No SQL (VERIFICA_ESTOQUENEGATIVO*)Ramo IF V_ST_ALERTAESTOQUENEGATIVO = 'F' → usa RETORNA_SALDOESTOQUE
Comportamento se excederMonta mensagem: "O Item XXX não possui saldo suficiente para operação! Quantidade necessária: ... Quantidade em Estoque: ..."

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Ambos → Opção 1 → ST_ALERTAESTOQUENEGATIVO = "Sim (Saldo Físico)"
  2. Salve os parâmetros (F6)
  3. Tenha um produto com saldo físico de 10 unidades (nenhum pedido pendente)
  4. Abra um Pedido de Venda (MPD002)
  5. Adicione o produto com quantidade 15 → Sistema exibe alerta: "Quantidade necessária: 15, Quantidade em Estoque: 10"
  6. Adicione o mesmo produto com quantidade 8 → Não alerta (saldo físico suficiente)
  7. Crie uma reserva do produto em outro pedido (5 unidades). O saldo físico continua 10 (não foi baixado ainda)
  8. Adicione o produto com quantidade 9 → Não alerta (ignora os 5 já comprometidos; só olha saldo físico)

Resultado esperado: O sistema alerta com base no estoque físico puro, desconsiderando pedidos em aberto. Útil para operações onde a entrega é imediata e o comprometimento de outros pedidos não é relevante.


S - Sim (Saldo Comprometido)​

O que fazDetalhe
Alerta estoque negativo?Sim
Base de cálculoSaldo comprometido — consulta RETORNA_ESTOQUECOMPROMETIDO (ou RETORNA_ESTOQUECOMPROMETGRADE para grades)
Ignora pedidos pendentes?Não — desconta do saldo físico todas as quantidades já comprometidas em pedidos abertos
Depende de PARMESTOQUE.ST_ESTOQUECOMPROMETIDOSim — se for 'N' o ramo cai para RETORNA_SALDOESTOQUE (comportamento igual a 'F')
No DelphiCompara PS_PEDIDO / QT_PEDIDA com O_QT_SALDO (saldo comprometido calculado)
No SQL (VERIFICA_ESTOQUENEGATIVO*)Ramo IF V_ST_ALERTAESTOQUENEGATIVO = 'S' → usa RETORNA_ESTOQUECOMPROMETIDO e soma pedidos abertos (PEDIDONOTA)
Comportamento se excederMesma mensagem de 'F', mas com QT_ESTCOMPROMETIDO (saldo após descontar compromissos)

Simulação passo a passo​

  1. MFA001 → ST_ALERTAESTOQUENEGATIVO = "Sim (Saldo Comprometido)"
  2. Salve os parâmetros (F6)
  3. Confirme que PARMESTOQUE.ST_ESTOQUECOMPROMETIDO está diferente de 'N' (caso contrário cai para comportamento de 'F')
  4. Tenha um produto com saldo físico de 10 unidades e 5 unidades já comprometidas em pedidos abertos (saldo comprometido disponível: 5)
  5. Abra um Pedido de Venda (MPD002)
  6. Adicione o produto com quantidade 6 → Alerta! (5 disponíveis após descontar compromissos)
  7. Adicione o produto com quantidade 4 → Não alerta (cabe nos 5 comprometidos disponíveis)
  8. Adicione o produto com quantidade 11 → Alerta também ao superar o físico total

Resultado esperado: O sistema alerta considerando pedidos já em aberto. Evita aceitar nova venda que já está reservada para outro cliente.


N - Não (Sem Alerta)​

O que fazDetalhe
Alerta estoque negativo?Não
Base de cálculo— (não verifica)
SQL do MPD002O SQL de tabITEMPEDIDO é modificado em tempo de execução: remove o LEFT JOIN RETORNA_SALDOESTOQUE e substitui RSE.O_QT_SALDO por CAST(Null AS NUMERIC(15,5))
SQL das procedures VERIFICA_ESTOQUENEGATIVO*Entra no IF principal apenas se ST_ESTOQUENEGATIVO <> 'N' (parâmetro de bloqueio). Se ambos forem 'N', a procedure não valida nada
ComportamentoUsuário digita qualquer quantidade livremente, sem nenhuma advertência

Simulação passo a passo​

  1. MFA001 → ST_ALERTAESTOQUENEGATIVO = "Não"
  2. Salve os parâmetros (F6)
  3. Abra um Pedido de Venda (MPD002)
  4. Adicione produto com quantidade muito acima do saldo → Não alerta, salva normalmente
  5. O sistema não executa a consulta de RETORNA_SALDOESTOQUE no grid de itens (SQL é reescrito em runtime)

Resultado esperado: Total liberdade para operar com valores acima do saldo. Alerta desativado.

Este é o valor padrão ao criar um novo registro no MFA001.


Observação Importante: Interação com ST_ESTOQUENEGATIVO​

Os parâmetros ST_ALERTAESTOQUENEGATIVO e ST_ESTOQUENEGATIVO funcionam em conjunto:

ST_ALERTAESTOQUENEGATIVOST_ESTOQUENEGATIVOComportamento
F ou SNSó alerta — usuário pode prosseguir apesar do alerta
F ou SSAlerta e pode bloquear — procedures também validam bloqueio
NSValida bloqueio por ST_ESTOQUENEGATIVO, mas sem alerta antecipado
NNNenhuma validação de estoque negativo

No código SQL (VERIFICA_ESTOQUENEGATIVONOTA):

A validação é disparada quando pelo menos um dos dois parâmetros está ativo.

No código Delphi do MPD002 , o alerta só dispara quando ST_ESTOQUENEGATIVO = 'N' (para não duplicar com o bloqueio):


Observação Importante: Dependência de CD_OPERACAO e flagEstoqueNegativo​

O alerta no MPD002 só dispara quando:

  1. ST_ALERTAESTOQUENEGATIVO = 'S' ou 'F'.
  2. tabITEMPEDIDOCD_OPERACAO está preenchido (item tem operação de movimentação definida).
  3. flagEstoqueNegativo está habilitado (flag interna que indica que aquela movimentação faz baixa no estoque — consulta MOVIMENTACAO.ST_ESTOQUENEGATIVO/TP_ESTOQUE).

Itens sem operação ou com operação que não baixa estoque nunca geram alerta, independentemente do parâmetro.


Observação Importante: Dependência de PARMESTOQUE.ST_ESTOQUECOMPROMETIDO​

Quando ST_ALERTAESTOQUENEGATIVO = 'S' nas procedures SQL, o cálculo de saldo comprometido só acontece se PARMESTOQUE.ST_ESTOQUECOMPROMETIDO <> 'N' (configurado em CAD001 / Parâmetros de Estoque). Se ST_ESTOQUECOMPROMETIDO = 'N', o comportamento de 'S' degrada para 'F' (usa apenas saldo físico via RETORNA_SALDOESTOQUE).

Ver VERIFICA_ESTOQUENEGATIVONOTA e VERIFICA_ESTOQUENEGATIVOPEDIDO.


Observação Importante: SQL Dinâmico no MPD002​

No MPD002, quando ST_ALERTAESTOQUENEGATIVO = 'N', o código modifica o SQL do grid de itens em runtime removendo o LEFT JOIN RETORNA_SALDOESTOQUE. Isso evita o custo da consulta de saldo quando o alerta está desativado:


Tabela Comparativa Resumida​

OpçãoDescriçãoAlerta?Considera pedidos pendentes?Procedure SQL usadaSQL do grid modificado?
FSim (Saldo Físico)SimNãoRETORNA_SALDOESTOQUENão
SSim (Saldo Comprometido)SimSim (desconta compromissos)RETORNA_ESTOQUECOMPROMETIDONão
NNãoNão—Nenhuma (pula o IF principal)Sim (remove JOIN de saldo)