Pular para o conteúdo principal

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_PERMITEAJUSTEMPD031 Valor padrao: N (Nao) - atribuido no AfterInsert em UdmMFA001.pas:557

Telas impactadas​

ModuloCodigoOnde lePapel
Conferencia de Carregamento (troca/ajuste de itens)MPD031UMPD031.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)MPD091UMPD091.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)MFA001UMFA001.dfm:9366-9379 (label lbl72) / UMFA001.dfm:10060-10086 (ComboBox cmbST_PERMITEAJUSTEMPD031); UdmMFA001.pas:262,557; UMFA001.pas:497,919,2443,2447,2451,2460,2464Produtora - 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​

CampoTabelaDescricao
ST_PERMITEAJUSTEMPD031PARMFATUR'S' = permite pergunta de ajuste automatico / 'N' = nao pergunta, bloqueia o ajuste
TP_CONTROLELOTEPARMFATURPre-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_PEDIDOITEMPEDIDOCampos 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_CONFERIDOITEMPEDIDOCampos usados como base de calculo do ajuste (acumulam a quantidade ja conferida)
VL_TOTALITEMPEDIDORecalculado apos o ajuste das quantidades (UMPD031.pas:1341-1365, UMPD091.pas:281-305)
ST_CONFERIDOINDIVIDUALPEDIDO / ITEM (alias no MPD091)Usado em conjunto para decidir se o rateio de lote de semente deve ser reprocessado apos o ajuste

Tabelas gravadas​

TabelaOperacaoOrigemQuando
ITEMPEDIDO (QT_PEDIDA, PS_PEDIDO)UPDATEUMPD031.pas:1330-1338 / UMPD091.pas:266-278Quando ST_PERMITEAJUSTEMPD031='S' + usuario confirma mensagem C-0000
ITEMPEDIDO (VL_TOTAL)UPDATEUMPD031.pas:1357-1365 / UMPD091.pas:297-304Apos ajuste de quantidade, recalcula o valor total do item
ITEMPEDIDOSEMENTEDELETE + INSERTUMPD031.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 fazDetalhe
Sem ajuste automaticoSe a quantidade conferida for menor que a quantidade do pedido, o sistema nao pergunta e nao ajusta o pedido
Comportamento resultanteO 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 ajusteNao e um bloqueio - a conferencia conclui normalmente; apenas nao recorta o pedido para bater com o que foi conferido
Quando e forcadoSempre forcado a 'N' quando TP_CONTROLELOTE = 'I' (UMFA001.pas:2443), nao podendo ser alterado pelo usuario nesse cenario

Simulacao passo a passo​

  1. MFA001 -> Parametros -> Faturamento -> Opcao 2 -> Ajustar Quantidade do Pedido com a Conferencia [MPD031/MPD091] = "Nao"
  2. Salve (F6)
  3. Abra um Pedido em MPD002 com item A = 100 unidades. Salve.
  4. Acesse MPD031 (conferencia de carregamento), conferir apenas 80 unidades do item A
  5. Ao finalizar, o sistema grava ITEMPEDIDO.QT_CONFERENCIA=80 / QT_CONFERIDA=80
  6. Nenhuma pergunta e feita ao usuario
  7. ITEMPEDIDO.QT_PEDIDA permanece = 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 fazDetalhe
Ajuste automatico opcionalQuando 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 aceitarExecuta UPDATE ITEMPEDIDO SET QT_PEDIDA=<valor_conferido>, PS_PEDIDO=<valor_conferido_peso> (UMPD031.pas:1330-1338, UMPD091.pas:266-278)
Recalculo do valorEm seguida recalcula ITEMPEDIDO.VL_TOTAL = (VL_UNITARIO * QT/PS ajustado) - VL_DESCONTO + VL_DESPESA (UMPD031.pas:1341-1365, UMPD091.pas:281-305)
Itens-sementeSe 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-requisitoControle so e editavel quando TP_CONTROLELOTE='A' (Agrupado)

Simulacao passo a passo​

  1. MFA001 -> Parametros -> Faturamento -> Opcao 2 -> Modelo Controle Lote = "Agrupado" (pre-requisito para liberar a edicao)
  2. Ajustar Quantidade do Pedido com a Conferencia [MPD031/MPD091] = "Sim"
  3. Salve (F6)
  4. Abra um Pedido em MPD002 com item A = 100 unidades. Salve.
  5. Acesse MPD031 (ou MPD091) e conferir apenas 80 unidades do item A
  6. Ao confirmar a conferencia/troca, o sistema detecta que conferido (80) < pedido (100)
  7. Exibe a mensagem C-0000: "A Quantidade Conferida e Menor do Que a Quantidade Informada no Pedido. Deseja Ajustar Automaticamente o Pedido?"
  8. Se o usuario clicar Sim:
    • UPDATE ITEMPEDIDO SET QT_PEDIDA=80, PS_PEDIDO=<peso_correspondente> WHERE ...
    • Recalcula VL_TOTAL com base nas novas quantidades
    • Se for semente, refaz os lotes em ITEMPEDIDOSEMENTE
  9. 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' em ST_PERMITEAJUSTEMPD031 e desabilita/define ReadOnly no ComboBox (UMFA001.pas:2443,2447,2451)
  • Ao trocar para 'A' (Agrupado): libera edicao (UMFA001.pas:2460,2464)
TP_CONTROLELOTEST_PERMITEAJUSTEMPD031Comportamento 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:

TelaQuando disparaGatilho
MPD031No fluxo de troca/ajuste de item durante a conferencia do carregamentobtnConfereItemTroca - quando a soma conferida (anterior + troca) e menor que o pedido
MPD091No fluxo de conferencia por codigo de barrasAo validar item cujo saldo conferido (QT_CONFERENCIA + leitura atual) e menor que QT_PEDIDA

Tabela Comparativa Resumida​

OpcaoDescricaoMensagem ao operadorUPDATE em ITEMPEDIDO.QT_PEDIDADisponivel quando
NNao ajusta (padrao)NaoNaoSempre (mas forcado neste valor quando TP_CONTROLELOTE='I')
SPergunta e ajusta opcionalmenteSim (C-0000)Se usuario aceitarSo quando TP_CONTROLELOTE='A'

Referencias no Codigo Fonte​

ArquivoLinha(s)Papel
source/MFA001/UMFA001.dfm9366-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.pas262 (declaracao tabPARMFATURST_PERMITEAJUSTEMPD031: TStringField), 557 (AfterInsert -> valor padrao 'N')Default
source/MFA001/UMFA001.pas497 (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.pas1324 (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.pas252 (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/ referencia ST_PERMITEAJUSTEMPD031. Toda a logica vive no Delphi via ParmFatur.Values['ST_PERMITEAJUSTEMPD031'] apos BuscaParametros/tabPARMFATUR.