Pular para o conteúdo principal

Parâmetro de Lote no Pedido

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / O.S. → Opção 1 → campo Lote no Pedido Tabela: PARMFATUR.ST_LOTEPEDIDO Valor padrão: S (Sim) — atribuído no AfterInsert em UdmMFA001.pas:484

Telas impactadas​

MóduloCódigoOnde lêPapel
Pedido de VendaMPD002UMPD002.pas:2808 (parmfatur.values['ST_LOTEPEDIDO'] = 'S')Consumidora ativa — ao salvar pedido, dispara rateio de lote de sementes para itens ST_SEMENTE = 'S' ou 'P' com operação informada
Separação / Liberação de ProduçãoMEQ019UMEQ019.pas:558-567 (SELECT P.ST_LOTEPEDIDO FROM PARMFATUR ... if iST_LOTEPEDIDO = 'S')Consumidora ativa — ao liberar separação, dispara RateioLoteProducao e insere em ITEMPEDIDOSEMENTE
Pedido/Orçamento (fluxo alternativo)MPD037UdmMPD037.pas:181,188 (SELECT ... ST_LOTEPEDIDO → dmMPD037.iStLotePedido)Leitora — carrega o parâmetro em memória (uso legado)
Pedido/BalançaMPD056UdmMPD056.pas:148,155 (SELECT ... ST_LOTEPEDIDO → dmMPD056.iStLotePedido)Leitora — carrega o parâmetro em memória (uso legado)
Parâmetros Faturamento (tela de configuração)MFA001UMFA001.dfm:8596-8622 (ComboBox) e UdmMFA001.dfm:140 (SELECT) e UdmMFA001.pas:136,484Produtora — onde o usuário configura o valor
Parâmetros (tela antiga / Recapadora)CPD009 / RCA006CPD009\UdmCPD009.dfm e RCA006\UdmRCA006.dfm (INSERT/UPDATE/SELECT de PARMFATUR)Produtora paralela — mantém o campo em sincronia

Campos envolvidos​

CampoTabelaDescrição
ST_LOTEPEDIDOPARMFATURAtiva ou desativa o rateio de lote no pedido
ST_PRODUCAOVENDAPARMFATURSe 'N' o bloco de rateio é executado; se 'S' a rotina de lote no pedido é ignorada (ver UMPD002.pas:2803)
TP_CONTROLELOTEPARMFATURDecide rateio Individual ('I') por item ou Agrupado ('A') por pedido inteiro (UMPD002.pas:2842,2857,2863,2869,2906)
ST_SEMENTEITEMSe 'S' ou 'P', o item entra no rateio
CD_OPERACAOITEMPEDIDODeve estar preenchido para o item ser considerado no rateio
TP_UNIDADE / TIPOITEMPEDIDODefine se quantidade (QT_PEDIDA) ou peso (PS_PEDIDO) alimenta o rateio

Tabelas gravadas​

TabelaOperaçãoOrigem
ITEMPEDIDOSEMENTEDELETE + INSERT do(s) lote(s) rateado(s) pela função RateioLoteProducaoUMPD002.pas:2873-2900 (individual) e UMPD002.pas:2933-2960 (agrupado); UMEQ019.pas:593-607 (separação)

Opções disponíveis​

S - Sim (Controla Lote no Pedido)​

O que fazDetalhe
Rateio de lote ao salvar pedidoDispara - abre a rotina RateioLoteProducao para cada item com ST_SEMENTE = 'S' ou 'P' e CD_OPERACAO informado
Usa TP_CONTROLELOTE = 'I' (Individual)Rateia lote por item do pedido; salva um ou mais registros em ITEMPEDIDOSEMENTE por item
Usa TP_CONTROLELOTE = 'A' (Agrupado)Rateia lote considerando todos os itens do pedido juntos (um único diálogo de rateio)
Se ST_PRODUCAOVENDA = 'S'O bloco não é executado (condição externa if (parmfatur.values['ST_PRODUCAOVENDA'] = 'N') em UMPD002.pas:2803)
Se rateio canceladoRaise JException.Create('W-0000', ['Rateio de Lotes de Semente Cancelado']) em UMPD002.pas:2866,2927 e UMEQ019.pas:588
Impacto no MEQ019Ao liberar separação com esta opção ativa, o sistema também realiza o rateio e grava em ITEMPEDIDOSEMENTE (UMEQ019.pas:567-608)

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Pedidos / O.S. → Opção 1 → Lote no Pedido = "Sim"
  2. Defina também TP_CONTROLELOTE (Individual ou Agrupado) e garanta ST_PRODUCAOVENDA = 'N'
  3. Salve os parâmetros (F6)
  4. Cadastre um produto com ST_SEMENTE = 'S' (semente) e uma operação de lote ativa
  5. Abra um Pedido de Venda em MPD002
  6. Adicione o produto-semente informando quantidade e operação
  7. Clique em Salvar (F6)
  8. Sistema abre a tela de Rateio de Lote de Produção — usuário escolhe de quais lotes sair o estoque
  9. Ao confirmar, o sistema apaga registros antigos de ITEMPEDIDOSEMENTE para este pedido e grava os novos com NR_LOTE, QT_LOTE, CD_EMPRLOTE
  10. Se o usuário cancelar o rateio, o pedido é abortado com a mensagem W-0000 - Rateio de Lotes de Semente Cancelado

Resultado esperado: Pedidos que contêm produtos-semente (ou similares com ST_SEMENTE = 'S'/'P') geram automaticamente vínculo com lotes de produção via ITEMPEDIDOSEMENTE. O mesmo comportamento se repete no MEQ019 ao liberar separação.


N - Não (Ignora Lote no Pedido)​

O que fazDetalhe
Rateio de lote ao salvar pedidoNão executa - o bloco if (parmfatur.values['ST_LOTEPEDIDO'] = 'S') em UMPD002.pas:2808 não entra
Gravação em ITEMPEDIDOSEMENTENão ocorre a partir do salvamento do pedido
Comportamento no MEQ019Bloco if (iST_LOTEPEDIDO = 'S') em UMEQ019.pas:567 não entra, então a liberação de separação não efetua rateio automático de lote
Vínculo item-loteDeve ser tratado por outro fluxo (controle de lote manual ou rotinas específicas por módulo)

Simulação passo a passo​

  1. MFA001 → Parâmetros → Pedidos / O.S. → Opção 1 → Lote no Pedido = "Não"
  2. Salve os parâmetros (F6)
  3. Abra um Pedido de Venda em MPD002 com um item-semente
  4. Salve o pedido (F6)
  5. Nenhuma tela de rateio de lote aparece — o pedido salva direto
  6. Consulte ITEMPEDIDOSEMENTE - nenhum registro foi criado para este pedido
  7. Libere a separação em MEQ019 — igualmente não abre rateio

Resultado esperado: O fluxo de pedido / separação ignora completamente o controle de lote via ITEMPEDIDOSEMENTE. O pedido é gravado sem exigir vínculo de lote de produção.


Tabela Comparativa Resumida​

OpçãoDescriçãoRateio ao salvar pedido?Grava ITEMPEDIDOSEMENTE?Exige ST_PRODUCAOVENDA = 'N'?
SSim (padrão)SimSim (conforme TP_CONTROLELOTE)Sim
NNãoNãoNão-

Referências no Código Fonte​

ArquivoLinha(s)Papel
source/MFA001/UMFA001.dfm7921 (Caption "Lote no Pedido"), 8596-8622 (ComboBox cmbST_LOTEPEDIDO, Items Sim=S / Não=N)UI do parâmetro
source/MFA001/UdmMFA001.dfm140 (SELECT PARMFATUR.ST_LOTEPEDIDO)Carrega valor atual
source/MFA001/UdmMFA001.pas136 (campo TStringField), 484 (AfterInsert → valor padrão 'S')Declaração + default
source/MPD002/UMPD002.pas2803 (guard ST_PRODUCAOVENDA='N'), 2808 (teste ST_LOTEPEDIDO='S'), 2842-2901 (fluxo Individual), 2906-2961 (fluxo Agrupado), 2866/2927 (erro cancelamento)Consumidora principal
source/MPD002/UdmMPD002.pas5743 (SELECT do parâmetro em BuscaParametros_MPD002)Leitura
source/MEQ019/UMEQ019.pas527 (var), 558-562 (SELECT), 567-611 (bloco ativo if iST_LOTEPEDIDO='S', rateio, insert em ITEMPEDIDOSEMENTE)Consumidora
source/MPD037/UdmMPD037.pas101 (var iStLotePedido), 181 (SELECT), 188 (atribuição)Leitura (legado)
source/MPD056/UdmMPD056.pas95 (var iStLotePedido), 148 (SELECT), 155 (atribuição)Leitura (legado)
source/CPD009/UdmCPD009.dfm330, 394, 494, 598 (INSERT/UPDATE/SELECT PARMFATUR)Parâmetro mantido em CRUD antigo
source/RCA006/UdmRCA006.dfm3079, 3143, 3243, 3347 (INSERT/UPDATE/SELECT PARMFATUR da recapadora)Parâmetro mantido em CRUD da recapadora

Observação: Nenhum script SQL em Scripts/ referencia ST_LOTEPEDIDO diretamente — toda a lógica vive no código Delphi. Os lotes rateados são gravados em ITEMPEDIDOSEMENTE via comandos SQL inline em UMPD002.pas e UMEQ019.pas.