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_LOTEPEDIDOValor padrão:S(Sim) — atribuído noAfterInsertemUdmMFA001.pas:484
Telas impactadas
| Módulo | Código | Onde lê | Papel |
|---|---|---|---|
| Pedido de Venda | MPD002 | UMPD002.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ção | MEQ019 | UMEQ019.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) | MPD037 | UdmMPD037.pas:181,188 (SELECT ... ST_LOTEPEDIDO → dmMPD037.iStLotePedido) | Leitora — carrega o parâmetro em memória (uso legado) |
| Pedido/Balança | MPD056 | UdmMPD056.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) | MFA001 | UMFA001.dfm:8596-8622 (ComboBox) e UdmMFA001.dfm:140 (SELECT) e UdmMFA001.pas:136,484 | Produtora — onde o usuário configura o valor |
| Parâmetros (tela antiga / Recapadora) | CPD009 / RCA006 | CPD009\UdmCPD009.dfm e RCA006\UdmRCA006.dfm (INSERT/UPDATE/SELECT de PARMFATUR) | Produtora paralela — mantém o campo em sincronia |
Campos envolvidos
| Campo | Tabela | Descrição |
|---|---|---|
ST_LOTEPEDIDO | PARMFATUR | Ativa ou desativa o rateio de lote no pedido |
ST_PRODUCAOVENDA | PARMFATUR | Se 'N' o bloco de rateio é executado; se 'S' a rotina de lote no pedido é ignorada (ver UMPD002.pas:2803) |
TP_CONTROLELOTE | PARMFATUR | Decide rateio Individual ('I') por item ou Agrupado ('A') por pedido inteiro (UMPD002.pas:2842,2857,2863,2869,2906) |
ST_SEMENTE | ITEM | Se 'S' ou 'P', o item entra no rateio |
CD_OPERACAO | ITEMPEDIDO | Deve estar preenchido para o item ser considerado no rateio |
TP_UNIDADE / TIPO | ITEMPEDIDO | Define se quantidade (QT_PEDIDA) ou peso (PS_PEDIDO) alimenta o rateio |
Tabelas gravadas
| Tabela | Operação | Origem |
|---|---|---|
ITEMPEDIDOSEMENTE | DELETE + INSERT do(s) lote(s) rateado(s) pela função RateioLoteProducao | UMPD002.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 faz | Detalhe |
|---|---|
| Rateio de lote ao salvar pedido | Dispara - 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 cancelado | Raise JException.Create('W-0000', ['Rateio de Lotes de Semente Cancelado']) em UMPD002.pas:2866,2927 e UMEQ019.pas:588 |
| Impacto no MEQ019 | Ao 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
- Vá em MFA001 → Parâmetros → Pedidos / O.S. → Opção 1 → Lote no Pedido = "Sim"
- Defina também
TP_CONTROLELOTE(Individual ou Agrupado) e garantaST_PRODUCAOVENDA = 'N' - Salve os parâmetros (F6)
- Cadastre um produto com
ST_SEMENTE = 'S'(semente) e uma operação de lote ativa - Abra um Pedido de Venda em MPD002
- Adicione o produto-semente informando quantidade e operação
- Clique em Salvar (F6)
- Sistema abre a tela de Rateio de Lote de Produção — usuário escolhe de quais lotes sair o estoque
- Ao confirmar, o sistema apaga registros antigos de
ITEMPEDIDOSEMENTEpara este pedido e grava os novos comNR_LOTE,QT_LOTE,CD_EMPRLOTE - 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 faz | Detalhe |
|---|---|
| Rateio de lote ao salvar pedido | Não executa - o bloco if (parmfatur.values['ST_LOTEPEDIDO'] = 'S') em UMPD002.pas:2808 não entra |
Gravação em ITEMPEDIDOSEMENTE | Não ocorre a partir do salvamento do pedido |
| Comportamento no MEQ019 | Bloco 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-lote | Deve ser tratado por outro fluxo (controle de lote manual ou rotinas específicas por módulo) |
Simulação passo a passo
- MFA001 → Parâmetros → Pedidos / O.S. → Opção 1 → Lote no Pedido = "Não"
- Salve os parâmetros (F6)
- Abra um Pedido de Venda em MPD002 com um item-semente
- Salve o pedido (F6)
- Nenhuma tela de rateio de lote aparece — o pedido salva direto
- Consulte
ITEMPEDIDOSEMENTE- nenhum registro foi criado para este pedido - 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ção | Descrição | Rateio ao salvar pedido? | Grava ITEMPEDIDOSEMENTE? | Exige ST_PRODUCAOVENDA = 'N'? |
|---|---|---|---|---|
| S | Sim (padrão) | Sim | Sim (conforme TP_CONTROLELOTE) | Sim |
| N | Não | Não | Não | - |
Referências no Código Fonte
| Arquivo | Linha(s) | Papel |
|---|---|---|
source/MFA001/UMFA001.dfm | 7921 (Caption "Lote no Pedido"), 8596-8622 (ComboBox cmbST_LOTEPEDIDO, Items Sim=S / Não=N) | UI do parâmetro |
source/MFA001/UdmMFA001.dfm | 140 (SELECT PARMFATUR.ST_LOTEPEDIDO) | Carrega valor atual |
source/MFA001/UdmMFA001.pas | 136 (campo TStringField), 484 (AfterInsert → valor padrão 'S') | Declaração + default |
source/MPD002/UMPD002.pas | 2803 (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.pas | 5743 (SELECT do parâmetro em BuscaParametros_MPD002) | Leitura |
source/MEQ019/UMEQ019.pas | 527 (var), 558-562 (SELECT), 567-611 (bloco ativo if iST_LOTEPEDIDO='S', rateio, insert em ITEMPEDIDOSEMENTE) | Consumidora |
source/MPD037/UdmMPD037.pas | 101 (var iStLotePedido), 181 (SELECT), 188 (atribuição) | Leitura (legado) |
source/MPD056/UdmMPD056.pas | 95 (var iStLotePedido), 148 (SELECT), 155 (atribuição) | Leitura (legado) |
source/CPD009/UdmCPD009.dfm | 330, 394, 494, 598 (INSERT/UPDATE/SELECT PARMFATUR) | Parâmetro mantido em CRUD antigo |
source/RCA006/UdmRCA006.dfm | 3079, 3143, 3243, 3347 (INSERT/UPDATE/SELECT PARMFATUR da recapadora) | Parâmetro mantido em CRUD da recapadora |
Observação: Nenhum script SQL em
Scripts/referenciaST_LOTEPEDIDOdiretamente — toda a lógica vive no código Delphi. Os lotes rateados são gravados emITEMPEDIDOSEMENTEvia comandos SQL inline emUMPD002.paseUMEQ019.pas.