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_SOLICITALOCALPEDValor 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ódulo | Código | Descrição |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Tela onde o parâmetro é configurado (define dependência com ST_SOLICITALOCALINDIVIDUALPED) |
| Pedido de Venda | MPD002 | Busca o local ao validar movimentação, valida saldo em Q e bloqueia item sem local vinculado |
| Troca de Produto do Pedido | MPD011 | Com S, exige que o produto novo esteja liberado no mesmo local do produto anterior |
| Pedido (Simplificado) | MPD093 | Lê o parâmetro para herdar o local default do pedido |
| Sincronização / Cadastro Integrado | SIN001 | Se N, oculta os campos de Local de Estoque do frame de cadastro |
Procedures impactadas
| Procedure | Arquivo | Descrição |
|---|---|---|
PROCESSA_ITEMPEDIDOIMPORTACAO | Scripts/PROCESSA_ITEMPEDIDOIMPORTACAO.sql | Ao 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
| Campo | Descrição |
|---|---|
PARMFATUR.ST_SOLICITALOCALPED | Parâmetro em análise (S/N/Q) |
PARMFATUR.ST_SOLICITALOCALINDIVIDUALPED | Parâmetro dependente — só pode ser habilitado quando este é S |
ITEMPEDIDO.CD_TIPOLOCAL / ITEMPEDIDO.CD_LOCAL | Par que identifica o local de armazenagem do item do pedido |
ITEMPEDIDO.DS_TIPOLOCAL / ITEMPEDIDO.DS_LOCAL | Descrições exibidas no grid do pedido |
ITEMPEDIDO.CD_OPERACAO | Operação da movimentação — a validação só ocorre quando o item possui operação definida |
ITEMLOCAL.ST_ESTOQUE | C = controla estoque (dispara a validação de saldo quando o valor é Q) |
ITEMLOCAL.ST_FATURAMENTO | Filtra locais permitidos para faturamento |
RETORNA_ESTOQUECOMPROMETIDO | Função chamada em MPD002 para apurar saldo no local/item ao validar quantidade |
GRUPOMOVIMENTACAO.TP_OPERACAO/CD_TIPOLOCAL/CD_LOCAL | Consultado em MPD002 para decidir se precisa rebuscar movimentação quando já existe local parametrizado |
Opções disponíveis
S - Sim
| O que faz | Detalhe |
|---|---|
| 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' |
| SIN001 | Exibe os campos de Local de Estoque no frame |
Simulação passo a passo
- Acesse MFA001 → aba Parâmetros → Pedidos → Opção 1 → defina "Solicita Local de Estoque" = "Sim"
- Observe que o combo "Solicita Local Individual" (
ST_SOLICITALOCALINDIVIDUALPED) fica habilitado — eventocmbST_SOLICITALOCALPEDChange(UMFA001.pas:2381-2384) - Salve os parâmetros (F6)
- Abra um Pedido de Venda (MPD002)
- Adicione um item com movimentação que gera estoque de saída
- O sistema busca o local automaticamente (rotina
buscaMovimentacaoemUdmMPD002.pas:3056) - 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 faz | Detalhe |
|---|---|
| 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 |
| SIN001 | Oculta os campos de Local de Estoque no frame (UformSIN001.pas:90-95) |
Simulação passo a passo
- Acesse MFA001 → aba Parâmetros → Pedidos → Opção 1 → defina "Solicita Local de Estoque" = "Não"
- 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.
- Se clicar na área desse campo desabilitado, o foco volta para
cmbST_SOLICITALOCALPEDautomaticamente (UMFA001.pas:2402-2414) - Salve os parâmetros (F6)
- Abra um Pedido de Venda (MPD002)
- Adicione um item com movimentação
- O sistema não solicita local - os campos
DS_LOCALeDS_TIPOLOCALpodem permanecer vazios (UdmMPD002.pas:3034-3044) - 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 faz | Detalhe |
|---|---|
| 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
- Acesse MFA001 → aba Parâmetros → Pedidos → Opção 1 → defina "Solicita Local de Estoque" = "Sim - Valida Qtde"
- Observe que o combo "Solicita Local Individual" permanece desabilitado (o OnChange só habilita com
'S') - Salve os parâmetros (F6)
- Abra um Pedido de Venda (MPD002)
- Adicione um item em um local cujo
ITEMLOCAL.ST_ESTOQUE = 'C'(controla estoque) - Informe uma quantidade superior ao saldo disponível (consultado via
RETORNA_ESTOQUECOMPROMETIDO) - O sistema bloqueia a gravação alertando que não há saldo suficiente no local selecionado (
ValidaEstoqueemUdmMPD002.pas:4513) - 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:
- Na UI do MFA001 — o evento
cmbST_SOLICITALOCALPEDChangehabilita/desabilita o combo dependente:cmbST_SOLICITALOCALINDIVIDUALPED.Enabled := (cmbST_SOLICITALOCALPED.Value = 'S'); - 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ção | Exige local? | Valida saldo? | Habilita Local Individual? | Troca de produto valida local? | Importação busca local? |
|---|---|---|---|---|---|
| S | Sim | Não | Sim | Sim (RETORNA_LOCAISARMAZENAGEM) | Sim |
| N | Não | Não | Não | Não | Não (grava NULL) |
| Q | Sim | Sim (RETORNA_ESTOQUECOMPROMETIDO) | Não | Não | Não (grava NULL) |
Referências no Código Fonte
Delphi
| Arquivo | Linha(s) | Referência |
|---|---|---|
source/MFA001/UMFA001.dfm | 8818-8846 | Combo cmbST_SOLICITALOCALPED (Items: Sim S / Não N / Sim - Valida Qtde Q) |
source/MFA001/UMFA001.pas | 2381-2384 | cmbST_SOLICITALOCALPEDChange - habilita ST_SOLICITALOCALINDIVIDUALPED quando valor = 'S' |
source/MFA001/UMFA001.pas | 2386-2414 | Hint e redirecionamento de foco do campo dependente |
source/MFA001/UdmMFA001.pas | 520 | Valor default 'N' no AfterInsert |
source/MFA001/UdmMFA001.dfm | 210, 2405, 2571, 2799, 3090 | Selects/Insert/Update que leem/gravam o campo |
source/MPD002/UdmMPD002.pas | 3034, 3056, 4519, 4984, 5756 | Validação de movimentação, busca de local, ValidaEstoque (modo Q) e select |
source/MPD002/UMPD002.pas | 4244, 6790, 6800, 6877 | Revalidação pós-importação e bloqueio de item sem local (W-0000) |
source/MPD011/UdmMPD011.pas | 1299, 1581 | Troca de produto: valida que o novo produto tenha o local do antigo |
source/MPD093/UdmMPD093.pas | 236 | Select dos parâmetros de faturamento para o pedido |
source/SIN001/UformSIN001.pas | 90-95 | Oculta campos de Local de Estoque quando = 'N' |
SQL
| Arquivo | Linha(s) | Referência |
|---|---|---|
Scripts/PROCESSA_ITEMPEDIDOIMPORTACAO.sql | 43 | Declaração V_ST_SOLICITALOCALPED DOM_CHAR1 |
Scripts/PROCESSA_ITEMPEDIDOIMPORTACAO.sql | 56-59 | Lê o parâmetro da PARMFATUR |
Scripts/PROCESSA_ITEMPEDIDOIMPORTACAO.sql | 213-232 | Se 'S', busca local do dispositivo móvel e, como fallback, primeiro ITEMLOCAL com ST_FATURAMENTO = 'S' |