Ajustar Quantidade do Pedido com a Conferencia (MPD031/MPD091)
Tela de configuracao: MFA001 - Parametros de Faturamento Localizacao: Parametros Faturamento -> aba Parametros -> sub-aba Faturamento -> Opcao 2 -> campo Ajustar Quantidade do Pedido com a Conferencia [MPD031/MPD091] Tabela:
PARMFATUR.ST_PERMITEAJUSTEMPD031Valor padrao:N(Nao) - atribuido noAfterInsertemUdmMFA001.pas:557
Telas impactadas
| Modulo | Codigo | Onde le | Papel |
|---|---|---|---|
| Conferencia de Carregamento (troca/ajuste de itens) | MPD031 | UMPD031.pas:1324 (parmFatur.Values['ST_PERMITEAJUSTEMPD031']) | Consumidora principal - quando a quantidade conferida e menor que a quantidade do pedido, pergunta ao usuario se deseja ajustar o pedido para bater com a conferencia |
| Conferencia de Carregamento (validacao por codigo de barras) | MPD091 | UMPD091.pas:252 (dmMPD091.ParmFatur.Values['ST_PERMITEAJUSTEMPD031']) | Consumidora secundaria - mesma logica de ajuste automatico aplicada no fluxo de conferencia por codigo de barras |
| Parametros Faturamento (tela de configuracao) | MFA001 | UMFA001.dfm:9366-9379 (label lbl72) / UMFA001.dfm:10060-10086 (ComboBox cmbST_PERMITEAJUSTEMPD031); UdmMFA001.pas:262,557; UMFA001.pas:497,919,2443,2447,2451,2460,2464 | Produtora - onde o usuario configura o valor. Controle condicionado a TP_CONTROLELOTE = 'A' |
Procedures impactadas
Nenhuma procedure em Scripts/ referencia ST_PERMITEAJUSTEMPD031. Toda a logica e Delphi, consumida via ParmFatur.Values['ST_PERMITEAJUSTEMPD031'] apos BuscaParametros.
Campos envolvidos
| Campo | Tabela | Descricao |
|---|---|---|
ST_PERMITEAJUSTEMPD031 | PARMFATUR | 'S' = permite pergunta de ajuste automatico / 'N' = nao pergunta, bloqueia o ajuste |
TP_CONTROLELOTE | PARMFATUR | Pre-requisito - o parametro so e editavel quando TP_CONTROLELOTE = 'A' (Agrupado). No modo 'I' (Individual) e forcado a 'N' e desabilitado (UMFA001.pas:2443,2447,2451) |
QT_PEDIDA, PS_PEDIDO | ITEMPEDIDO | Campos reajustados pelo UPDATE quando o usuario aceita ajustar o pedido (UMPD031.pas:1331-1338, UMPD091.pas:266-278) |
QT_CONFERENCIA, PS_CONFERENCIA, QT_CONFERIDA, PS_CONFERIDO | ITEMPEDIDO | Campos usados como base de calculo do ajuste (acumulam a quantidade ja conferida) |
VL_TOTAL | ITEMPEDIDO | Recalculado apos o ajuste das quantidades (UMPD031.pas:1341-1365, UMPD091.pas:281-305) |
ST_CONFERIDOINDIVIDUAL | PEDIDO / ITEM (alias no MPD091) | Usado em conjunto para decidir se o rateio de lote de semente deve ser reprocessado apos o ajuste |
Tabelas gravadas
| Tabela | Operacao | Origem | Quando |
|---|---|---|---|
ITEMPEDIDO (QT_PEDIDA, PS_PEDIDO) | UPDATE | UMPD031.pas:1330-1338 / UMPD091.pas:266-278 | Quando ST_PERMITEAJUSTEMPD031='S' + usuario confirma mensagem C-0000 |
ITEMPEDIDO (VL_TOTAL) | UPDATE | UMPD031.pas:1357-1365 / UMPD091.pas:297-304 | Apos ajuste de quantidade, recalcula o valor total do item |
ITEMPEDIDOSEMENTE | DELETE + INSERT | UMPD031.pas:1376-1407 / UMPD091.pas:316-... | So quando item e semente e rateio precisa ser redistribuido apos ajuste |
Opcoes disponiveis
N - Nao (padrao)
| O que faz | Detalhe |
|---|---|
| Sem ajuste automatico | Se a quantidade conferida for menor que a quantidade do pedido, o sistema nao pergunta e nao ajusta o pedido |
| Comportamento resultante | O pedido mantem a quantidade original gravada. Qualquer divergencia entre pedido e conferencia fica como ITEMPEDIDO.QT_PEDIDA inalterado vs QT_CONFERENCIA/QT_CONFERIDA atualizado pela conferencia |
| Bloqueio vs ajuste | Nao e um bloqueio - a conferencia conclui normalmente; apenas nao recorta o pedido para bater com o que foi conferido |
| Quando e forcado | Sempre forcado a 'N' quando TP_CONTROLELOTE = 'I' (UMFA001.pas:2443), nao podendo ser alterado pelo usuario nesse cenario |
Simulacao passo a passo
- MFA001 -> Parametros -> Faturamento -> Opcao 2 -> Ajustar Quantidade do Pedido com a Conferencia [MPD031/MPD091] = "Nao"
- Salve (F6)
- Abra um Pedido em MPD002 com item A = 100 unidades. Salve.
- Acesse MPD031 (conferencia de carregamento), conferir apenas 80 unidades do item A
- Ao finalizar, o sistema grava
ITEMPEDIDO.QT_CONFERENCIA=80/QT_CONFERIDA=80 - Nenhuma pergunta e feita ao usuario
ITEMPEDIDO.QT_PEDIDApermanece = 100 (valor original)
Resultado esperado: Pedido mantem a quantidade original. A divergencia entre pedido e conferencia fica visivel nos campos de conferencia (QT_CONFERIDA=80 vs QT_PEDIDA=100), mas o pedido nao e alterado automaticamente.
S - Sim
| O que faz | Detalhe |
|---|---|
| Ajuste automatico opcional | Quando a quantidade conferida (ITEMPEDIDO.QT_CONFERENCIA + ITEMTROCA.QT_ITEMTROCA no MPD031) for menor que a quantidade pedida (ITEMPEDIDO.QT_PEDIDA/PS_PEDIDO), exibe a mensagem C-0000 perguntando se deseja ajustar o pedido |
| Mensagem exibida | "A Quantidade Conferida e Menor do Que a Quantidade Informada no Pedido. Deseja Ajustar Automaticamente o Pedido?" (UMPD031.pas:1326, UMPD091.pas:257) |
| Se o usuario aceitar | Executa UPDATE ITEMPEDIDO SET QT_PEDIDA=<valor_conferido>, PS_PEDIDO=<valor_conferido_peso> (UMPD031.pas:1330-1338, UMPD091.pas:266-278) |
| Recalculo do valor | Em seguida recalcula ITEMPEDIDO.VL_TOTAL = (VL_UNITARIO * QT/PS ajustado) - VL_DESCONTO + VL_DESPESA (UMPD031.pas:1341-1365, UMPD091.pas:281-305) |
| Itens-semente | Se o item for semente e o rateio precisa ser refeito, o sistema DELETE + INSERT em ITEMPEDIDOSEMENTE para refletir os novos lotes conferidos (UMPD031.pas:1376-1407) |
| Pre-requisito | Controle so e editavel quando TP_CONTROLELOTE='A' (Agrupado) |
Simulacao passo a passo
- MFA001 -> Parametros -> Faturamento -> Opcao 2 -> Modelo Controle Lote = "Agrupado" (pre-requisito para liberar a edicao)
- Ajustar Quantidade do Pedido com a Conferencia [MPD031/MPD091] = "Sim"
- Salve (F6)
- Abra um Pedido em MPD002 com item A = 100 unidades. Salve.
- Acesse MPD031 (ou MPD091) e conferir apenas 80 unidades do item A
- Ao confirmar a conferencia/troca, o sistema detecta que conferido (80) < pedido (100)
- Exibe a mensagem C-0000: "A Quantidade Conferida e Menor do Que a Quantidade Informada no Pedido. Deseja Ajustar Automaticamente o Pedido?"
- Se o usuario clicar Sim:
UPDATE ITEMPEDIDO SET QT_PEDIDA=80, PS_PEDIDO=<peso_correspondente> WHERE ...- Recalcula
VL_TOTALcom base nas novas quantidades - Se for semente, refaz os lotes em
ITEMPEDIDOSEMENTE
- Se o usuario clicar Nao: mantem o pedido original (comportamento equivalente a
ST_PERMITEAJUSTEMPD031='N'para essa operacao especifica)
Resultado esperado: O usuario ganha a opcao de fechar o pedido com a quantidade efetivamente carregada/conferida, alinhando QT_PEDIDA com a realidade da conferencia. Ideal quando faltas na conferencia sao consideradas quantidade final entregue (sem reposicao/reentrega).
Interacao com TP_CONTROLELOTE
ST_PERMITEAJUSTEMPD031 so e editavel quando TP_CONTROLELOTE = 'A' (Agrupado). A regra e aplicada em dois momentos em UMFA001.pas:
Carga inicial (UMFA001.pas:919):
frmMFA001.cmbST_PERMITEAJUSTEMPD031.Enabled := (dmMFA001.tabPARMFATURTP_CONTROLELOTE.AsString = 'A');
Evento cmbTP_CONTROLELOTEChange (UMFA001.pas:2434-2468):
- Ao trocar para
'I'(Individual): forca'N'emST_PERMITEAJUSTEMPD031e desabilita/defineReadOnlyno ComboBox (UMFA001.pas:2443,2447,2451) - Ao trocar para
'A'(Agrupado): libera edicao (UMFA001.pas:2460,2464)
TP_CONTROLELOTE | ST_PERMITEAJUSTEMPD031 | Comportamento na tela MFA001 |
|---|---|---|
I (Individual) | Forcado a 'N' | ComboBox desabilitado e ReadOnly; usuario nao pode habilitar o ajuste |
A (Agrupado) | 'S' ou 'N' | ComboBox liberado; usuario escolhe livremente |
Veja tambem a documentacao do parametro TP_CONTROLELOTE.
Diferenca entre MPD031 e MPD091
Ambos consultam o mesmo parametro e executam a mesma logica (pergunta via C-0000, UPDATE em ITEMPEDIDO, recalculo de VL_TOTAL, redistribuicao de ITEMPEDIDOSEMENTE), mas em pontos distintos do fluxo:
| Tela | Quando dispara | Gatilho |
|---|---|---|
| MPD031 | No fluxo de troca/ajuste de item durante a conferencia do carregamento | btnConfereItemTroca - quando a soma conferida (anterior + troca) e menor que o pedido |
| MPD091 | No fluxo de conferencia por codigo de barras | Ao validar item cujo saldo conferido (QT_CONFERENCIA + leitura atual) e menor que QT_PEDIDA |
Tabela Comparativa Resumida
| Opcao | Descricao | Mensagem ao operador | UPDATE em ITEMPEDIDO.QT_PEDIDA | Disponivel quando |
|---|---|---|---|---|
| N | Nao ajusta (padrao) | Nao | Nao | Sempre (mas forcado neste valor quando TP_CONTROLELOTE='I') |
| S | Pergunta e ajusta opcionalmente | Sim (C-0000) | Se usuario aceitar | So quando TP_CONTROLELOTE='A' |
Referencias no Codigo Fonte
| Arquivo | Linha(s) | Papel |
|---|---|---|
source/MFA001/UMFA001.dfm | 9366-9379 (label lbl72 "Ajustar Quantidade do Pedido com a Conferencia [MPD031/MPD091]"), 10060-10086 (ComboBox cmbST_PERMITEAJUSTEMPD031, Items Sim=S / Nao=N) | UI do parametro (dentro de Opcao 2) |
source/MFA001/UdmMFA001.pas | 262 (declaracao tabPARMFATURST_PERMITEAJUSTEMPD031: TStringField), 557 (AfterInsert -> valor padrao 'N') | Default |
source/MFA001/UMFA001.pas | 497 (ComboBox), 919 (carga inicial habilita/desabilita conforme TP_CONTROLELOTE), 2443 (forca 'N' no modo Individual), 2447/2451 (ReadOnly/Enabled := False no modo Individual), 2460/2464 (libera no modo Agrupado) | Logica UI condicionada a TP_CONTROLELOTE |
source/MPD031/UMPD031.pas | 1324 (parmFatur.Values['ST_PERMITEAJUSTEMPD031']='S'), 1326 (mensagem C-0000), 1330-1338 (UPDATE ITEMPEDIDO SET PS_PEDIDO/QT_PEDIDA), 1341-1365 (recalculo VL_TOTAL), 1376-1407 (redistribuicao ITEMPEDIDOSEMENTE para itens-semente) | Consumidora principal - troca/ajuste na conferencia do carregamento |
source/MPD091/UMPD091.pas | 252 (dmMPD091.ParmFatur.Values['ST_PERMITEAJUSTEMPD031']='S'), 257 (mensagem C-0000), 266-278 (UPDATE ITEMPEDIDO), 281-305 (recalculo VL_TOTAL), 308+ (redistribuicao ITEMPEDIDOSEMENTE) | Consumidora secundaria - conferencia por codigo de barras |
Observacao: Nenhum script SQL em
Scripts/referenciaST_PERMITEAJUSTEMPD031. Toda a logica vive no Delphi viaParmFatur.Values['ST_PERMITEAJUSTEMPD031']aposBuscaParametros/tabPARMFATUR.