Pular para o conteúdo principal

Solicita Local de Estoque no Pedido

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

Controla se, ao lançar itens em pedidos e documentos afins, o sistema exige/busca o Local de Armazenagem (par CD_TIPOLOCAL + CD_LOCAL) do produto. Quando ativo, também habilita o parâmetro dependente ST_SOLICITALOCALINDIVIDUALPED e pode forçar a validação de saldo físico antes de gravar o item.

Telas impactadas​

MóduloCódigoDescrição
Parâmetros de FaturamentoMFA001Tela onde o parâmetro é configurado (define dependência com ST_SOLICITALOCALINDIVIDUALPED)
Pedido de VendaMPD002Busca o local ao validar movimentação, valida saldo em Q e bloqueia item sem local vinculado
Troca de Produto do PedidoMPD011Com S, exige que o produto novo esteja liberado no mesmo local do produto anterior
Pedido (Simplificado)MPD093Lê o parâmetro para herdar o local default do pedido
Sincronização / Cadastro IntegradoSIN001Se N, oculta os campos de Local de Estoque do frame de cadastro

Procedures impactadas​

ProcedureArquivoDescrição
PROCESSA_ITEMPEDIDOIMPORTACAOScripts/PROCESSA_ITEMPEDIDOIMPORTACAO.sqlAo importar itens de pedido (ex.: mobile), quando ST_SOLICITALOCALPED = 'S' busca o local do dispositivo (DISPOSITIVOMOVEL) e, como fallback, o primeiro local de ITEMLOCAL com ST_FATURAMENTO = 'S'

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_SOLICITALOCALPEDParâmetro em análise (S/N/Q)
PARMFATUR.ST_SOLICITALOCALINDIVIDUALPEDParâmetro dependente — só pode ser habilitado quando este é S
ITEMPEDIDO.CD_TIPOLOCAL / ITEMPEDIDO.CD_LOCALPar que identifica o local de armazenagem do item do pedido
ITEMPEDIDO.DS_TIPOLOCAL / ITEMPEDIDO.DS_LOCALDescrições exibidas no grid do pedido
ITEMPEDIDO.CD_OPERACAOOperação da movimentação — a validação só ocorre quando o item possui operação definida
ITEMLOCAL.ST_ESTOQUEC = controla estoque (dispara a validação de saldo quando o valor é Q)
ITEMLOCAL.ST_FATURAMENTOFiltra locais permitidos para faturamento
RETORNA_ESTOQUECOMPROMETIDOFunção chamada em MPD002 para apurar saldo no local/item ao validar quantidade
GRUPOMOVIMENTACAO.TP_OPERACAO/CD_TIPOLOCAL/CD_LOCALConsultado em MPD002 para decidir se precisa rebuscar movimentação quando já existe local parametrizado

Opções disponíveis​

S - Sim​

O que fazDetalhe
Exige local de estoque no item?SIM - o sistema busca/valida o par CD_TIPOLOCAL + CD_LOCAL para itens com CD_OPERACAO
Habilita ST_SOLICITALOCALINDIVIDUALPED?SIM - o combo dependente fica editável no MFA001
Valida saldo antes de gravar?NÃO valida quantidade (apenas exige local)
Troca de produto (MPD011)Valida que o produto novo tenha o mesmo local de armazenagem do anterior em RETORNA_LOCAISARMAZENAGEM
Importação (PROCESSA_ITEMPEDIDOIMPORTACAO)Busca local do dispositivo móvel; se não achar, usa primeiro ITEMLOCAL com ST_FATURAMENTO = 'S'
SIN001Exibe os campos de Local de Estoque no frame

Simulação passo a passo​

  1. Acesse MFA001 → aba Parâmetros → Pedidos → Opção 1 → defina "Solicita Local de Estoque" = "Sim"
  2. Observe que o combo "Solicita Local Individual" (ST_SOLICITALOCALINDIVIDUALPED) fica habilitado — evento cmbST_SOLICITALOCALPEDChange (UMFA001.pas:2381-2384)
  3. Salve os parâmetros (F6)
  4. Abra um Pedido de Venda (MPD002)
  5. Adicione um item com movimentação que gera estoque de saída
  6. O sistema busca o local automaticamente (rotina buscaMovimentacao em UdmMPD002.pas:3056)
  7. Se o produto não possuir local liberado com ST_FATURAMENTO = 'S', ao confirmar o item será exibida a mensagem (UMPD002.pas:6806):

    A Movimentação Gera Estoque e o Produto "..." não possui Local de Armazenagem Associado que Permita Faturamento ou o Usuário não possui Acesso! Verifique [TPO001, TOF007]

Resultado esperado: Cada item do pedido fica vinculado a um local de armazenagem. Itens sem local cadastrado bloqueiam a gravação.


N - Não​

O que fazDetalhe
Exige local de estoque no item?NÃO - CD_LOCAL/CD_TIPOLOCAL ficam em branco para itens sem movimentação gravada
Habilita ST_SOLICITALOCALINDIVIDUALPED?NÃO - combo dependente permanece desabilitado
Valida saldo antes de gravar?NÃO
Troca de produto (MPD011)Não exige que o produto novo tenha o mesmo local
Importação (PROCESSA_ITEMPEDIDOIMPORTACAO)Grava CD_LOCAL = NULL e CD_TIPOLOCAL = NULL
SIN001Oculta os campos de Local de Estoque no frame (UformSIN001.pas:90-95)

Simulação passo a passo​

  1. Acesse MFA001 → aba Parâmetros → Pedidos → Opção 1 → defina "Solicita Local de Estoque" = "Não"
  2. O combo "Solicita Local Individual" fica desabilitado (cinza). Ao passar o mouse, aparece o hint do grupo (UMFA001.pas:2386-2399):

    Este parâmetro é dependente do parâmetro "Solicita Local de Estoque". Clique para verificar.

  3. Se clicar na área desse campo desabilitado, o foco volta para cmbST_SOLICITALOCALPED automaticamente (UMFA001.pas:2402-2414)
  4. Salve os parâmetros (F6)
  5. Abra um Pedido de Venda (MPD002)
  6. Adicione um item com movimentação
  7. O sistema não solicita local - os campos DS_LOCAL e DS_TIPOLOCAL podem permanecer vazios (UdmMPD002.pas:3034-3044)
  8. Acesse a tela SIN001 → campos de Local de Estoque não aparecem

Resultado esperado: O pedido é lançado sem exigir vínculo com local de armazenagem. Útil para empresas que não controlam estoque por local físico.

Este é o valor padrão ao criar um novo registro no MFA001 (UdmMFA001.pas:520).


Q - Sim - Valida Qtde​

O que fazDetalhe
Exige local de estoque no item?SIM - mesmo comportamento da opção S
Habilita ST_SOLICITALOCALINDIVIDUALPED?NÃO - o evento cmbST_SOLICITALOCALPEDChange só habilita quando o valor é 'S' estritamente (UMFA001.pas:2383)
Valida saldo antes de gravar?SIM - se ITEMLOCAL.ST_ESTOQUE = 'C', consulta RETORNA_ESTOQUECOMPROMETIDO para comparar o saldo do local com a quantidade do item (UdmMPD002.pas:4513-...)
Troca de produto (MPD011)Não passa pela validação específica de S (compara apenas com = 'S')
Importação (PROCESSA_ITEMPEDIDOIMPORTACAO)Não cai no bloco IF V_ST_SOLICITALOCALPED = 'S' — grava CD_LOCAL = NULL (a procedure trata apenas 'S')

Simulação passo a passo​

  1. Acesse MFA001 → aba Parâmetros → Pedidos → Opção 1 → defina "Solicita Local de Estoque" = "Sim - Valida Qtde"
  2. Observe que o combo "Solicita Local Individual" permanece desabilitado (o OnChange só habilita com 'S')
  3. Salve os parâmetros (F6)
  4. Abra um Pedido de Venda (MPD002)
  5. Adicione um item em um local cujo ITEMLOCAL.ST_ESTOQUE = 'C' (controla estoque)
  6. Informe uma quantidade superior ao saldo disponível (consultado via RETORNA_ESTOQUECOMPROMETIDO)
  7. O sistema bloqueia a gravação alertando que não há saldo suficiente no local selecionado (ValidaEstoque em UdmMPD002.pas:4513)
  8. Se reduzir a quantidade abaixo do saldo, o item é aceito

Resultado esperado: Além de exigir o local, o sistema impede a venda de quantidade maior do que o saldo físico disponível no local, evitando estoque negativo.


Observação Importante: Dependência com ST_SOLICITALOCALINDIVIDUALPED​

O parâmetro ST_SOLICITALOCALINDIVIDUALPED só é válido quando ST_SOLICITALOCALPED = 'S'. Isso é imposto por código em duas camadas:

  1. Na UI do MFA001 — o evento cmbST_SOLICITALOCALPEDChange habilita/desabilita o combo dependente:
    cmbST_SOLICITALOCALINDIVIDUALPED.Enabled := (cmbST_SOLICITALOCALPED.Value = 'S');
  2. No MPD002 — quando ST_SOLICITALOCALINDIVIDUALPED = 'N' o sistema tenta reutilizar o local geral do pedido em todos os itens (UdmMPD002.pas:3061-3062).

Quando o valor é Q, mesmo havendo solicitação de local, o combo "Individual" fica desabilitado, o que significa que o comportamento herdado corresponde ao combo em estado default (geralmente N).

Observação Importante: Itens de Recapagem​

Há um tratamento especial para itens de recapagem (ITEMPEDIDO.ST_VALIDAITEMRECAP = 'S'): nesses casos, quando ST_SOLICITALOCALPED = 'N' o sistema não limpa CD_LOCAL/CD_TIPOLOCAL na revalidação da movimentação, preservando o local originalmente escolhido (UdmMPD002.pas:3033-3034 e :4983-4984).


Tabela Comparativa Resumida​

OpçãoExige local?Valida saldo?Habilita Local Individual?Troca de produto valida local?Importação busca local?
SSimNãoSimSim (RETORNA_LOCAISARMAZENAGEM)Sim
NNãoNãoNãoNãoNão (grava NULL)
QSimSim (RETORNA_ESTOQUECOMPROMETIDO)NãoNãoNão (grava NULL)

Referências no Código Fonte​

Delphi​

ArquivoLinha(s)Referência
source/MFA001/UMFA001.dfm8818-8846Combo cmbST_SOLICITALOCALPED (Items: Sim S / Não N / Sim - Valida Qtde Q)
source/MFA001/UMFA001.pas2381-2384cmbST_SOLICITALOCALPEDChange - habilita ST_SOLICITALOCALINDIVIDUALPED quando valor = 'S'
source/MFA001/UMFA001.pas2386-2414Hint e redirecionamento de foco do campo dependente
source/MFA001/UdmMFA001.pas520Valor default 'N' no AfterInsert
source/MFA001/UdmMFA001.dfm210, 2405, 2571, 2799, 3090Selects/Insert/Update que leem/gravam o campo
source/MPD002/UdmMPD002.pas3034, 3056, 4519, 4984, 5756Validação de movimentação, busca de local, ValidaEstoque (modo Q) e select
source/MPD002/UMPD002.pas4244, 6790, 6800, 6877Revalidação pós-importação e bloqueio de item sem local (W-0000)
source/MPD011/UdmMPD011.pas1299, 1581Troca de produto: valida que o novo produto tenha o local do antigo
source/MPD093/UdmMPD093.pas236Select dos parâmetros de faturamento para o pedido
source/SIN001/UformSIN001.pas90-95Oculta campos de Local de Estoque quando = 'N'

SQL​

ArquivoLinha(s)Referência
Scripts/PROCESSA_ITEMPEDIDOIMPORTACAO.sql43Declaração V_ST_SOLICITALOCALPED DOM_CHAR1
Scripts/PROCESSA_ITEMPEDIDOIMPORTACAO.sql56-59Lê o parâmetro da PARMFATUR
Scripts/PROCESSA_ITEMPEDIDOIMPORTACAO.sql213-232Se 'S', busca local do dispositivo móvel e, como fallback, primeiro ITEMLOCAL com ST_FATURAMENTO = 'S'