Pular para o conteúdo principal

Parâmetro de Controle de Entrega (Comportamento)

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → aba Controle Entrega (pagControleEntrega / grupo grpControleEntrega) Tabela: PARMFATUR.ST_ENTREGA Valor padrão: N (Não utiliza controle de entrega)

Define se o sistema faz o agendamento e acompanhamento da entrega dos itens e em qual documento o controle é gerado (Pedido, Nota ou ambos). Quando diferente de N, ativa a gravação de registros na tabela CONTROLEENTREGA ao salvar o pedido ou a nota, e habilita os parâmetros complementares da mesma aba (ST_CONTENTREGA, ST_ENTREGACONSUMIDORFINAL, TP_MOVCONTENTREGA, ST_CONFIRMAENTREGAREMESSA).

Telas impactadas​

MóduloCódigoDescrição
Pedido de VendaMPD002Gera CONTROLEENTREGA do pedido quando valor P, H ou T
Nota Fiscal SaídaMNF002Gera CONTROLEENTREGA da nota quando valor S ou T (com regra adicional sobre pedido)
Cotação/Ordem (gera NF)MPD011Ao gerar nota a partir de ordem, cria CONTROLEENTREGA se valor S ou T
Pesquisa de Pedidos (Entrega)MNF015Exibe legenda/coluna "Entregue" apenas quando valor P, H ou T
Agendamento de EntregasMNF019Monta o LEFT JOIN em CONTROLEENTREGA de Nota (S), Pedido (P/H) ou ambos (T)
Relatório de Requisição (Tipo N)REQ001Lê ST_ENTREGA da PARMFATUR para montar layout REQ001_N

Procedures/Views/Triggers impactadas​

ObjetoArquivoPapel
SCRIPT_TRANSFCONTROLEENTREGAScripts/SCRIPT_TRANSFCONTROLEENTREGA.sqlScript de migração — só processa empresas com PARMFATUR.ST_ENTREGA <> 'N' (linha 24) e chama VIEW_CONTROLEENTREGA passando o valor como parâmetro (linha 33)
TRGBD_ITEMPEDIDO (trigger BEFORE DELETE)Scripts/TRGBD_ITEMPEDIDO.sqlAo deletar item de pedido, carrega P.ST_ENTREGA em :V_TP_CONTROLEENTREGA (linha 14) e só roda a lógica de CONTROLEENTREGA quando diferente de P
TRGAIUD_ITEMPEDIDO (trigger AFTER I/U/D)Scripts/TRGAIUD_ITEMPEDIDO.sqlMesmo padrão (linha 251): se ST_ENTREGA <> 'P' recalcula/ajusta quantidades em CONTROLEENTREGA quando QT_PEDIDA/PS_PEDIDO mudam
ControleEntrega (função Delphi)source/jControleEntrega/jEntrega.pas + UDadosEntrega.pasRecebe o valor em iParametros[5] e abre a tela TfrmEntrega de confirmação/agendamento

Campos envolvidos​

Tabela.CampoDescrição
PARMFATUR.ST_ENTREGAO próprio parâmetro
PARMFATUR.ST_CONTENTREGATipo de item controlado (Produto / Produto+Serviço) — só é habilitado quando ST_ENTREGA <> 'N'
PARMFATUR.ST_ENTREGACONSUMIDORFINALMarca como Entregue automaticamente quando cliente = consumidor final. Forçado a N quando ST_ENTREGA = 'N'
PARMFATUR.TP_MOVCONTENTREGATipo de movimentação do controle — só habilitado quando ST_ENTREGA <> 'N'
PARMFATUR.ST_CONFIRMAENTREGAREMESSAConfirmação automática na remessa — forçado a N quando ST_ENTREGA = 'N'
PARMFATUR.CD_CONSUMIDORCódigo da pessoa "consumidor final" — usado pela função ControleEntrega
CONTROLEENTREGA.ST_ENTREGUESituação do registro gerado (N, G, E, R) — é a tabela-destino gravada quando ST_ENTREGA <> 'N'
ITEMPEDIDO.ST_ENTREGA / ITEMNOTA.ST_ENTREGA / NOTA.ST_ENTREGA / PEDIDO.ST_ENTREGAColunas homônimas em outras tabelas (marca status do item) — não confundir com o parâmetro PARMFATUR.ST_ENTREGA

Opções disponíveis​

S - Nota Fiscal​

O que fazDetalhe
Quem gera o CONTROLEENTREGA?Somente a Nota Fiscal de saída (MNF002 e ordens que geram NF como MPD011)
Pedido (MPD002) gera controle?Não
JOIN em MNF019CONTROLEENTREGA CEN ON CEN.CD_EMPRNOTA = N.CD_EMPRESA AND CEN.NR_LANCAMENTO = ... AND CEN.TP_NOTA = ... (linhas 752–765 de UMNF019.pas)
Trigger TRGBD_ITEMPEDIDO / TRGAIUD_ITEMPEDIDORoda normalmente (valor é diferente de P)

Simulação passo a passo​

  1. Em MFA001 → aba Controle Entrega → Controle de Entrega = Nota Fiscal (S)
  2. Salve os parâmetros (F6)
  3. Abra um Pedido de Venda em MPD002, inclua produtos e salve → nenhum registro em CONTROLEENTREGA é criado (o IF em UMPD002.pas linha 3220 não aceita S)
  4. Emita a Nota Fiscal em MNF002 → ao salvar, o IF em UMNF002.pas linha 4556 aceita S e dispara ControleEntrega → abre tela TfrmEntrega para agendar a entrega
  5. Confirme a situação dos itens → registros gravados em CONTROLEENTREGA com CD_EMPRNOTA, NR_LANCAMENTO, TP_NOTA, CD_SERIE

Resultado esperado: O controle de entrega é rastreado a partir da nota fiscal. O pedido passa direto, sem gerar agenda.


P - Pedido Atendido​

O que fazDetalhe
Quem gera o CONTROLEENTREGA?Somente o Pedido (MPD002)
Nota (MNF002) gera controle?Não
Trigger TRGBD_ITEMPEDIDO (linha 17)IF(:V_TP_CONTROLEENTREGA <> 'P') → não executa a manutenção de quantidades (o próprio pedido é a fonte, a trigger é contornada)
JOIN em MNF019Junta CONTROLEENTREGA CE pelas chaves do pedido (CE.CD_EMPRPEDIDO, CE.NR_PEDIDO, CE.TP_PEDIDO) — linha 770–772 de UMNF019.pas
Legenda em MNF015shpEntregue.Visible := True (linha 169 de UMNF015.pas)

Simulação passo a passo​

  1. MFA001 → Controle de Entrega = Pedido Atendido (P)
  2. Salve os parâmetros (F6)
  3. Abra um pedido em MPD002, inclua itens e salve → o IF em UMPD002.pas linha 3220 aceita P → abre TfrmEntrega para agendar a entrega, grava em CONTROLEENTREGA com CD_EMPRPEDIDO, NR_PEDIDO, TP_PEDIDO
  4. Emita a Nota Fiscal do pedido em MNF002 → o IF em UMNF002.pas linha 4556 recusa P → não gera novo controle, reaproveita o do pedido
  5. Em MNF015, a legenda "Entregue" aparece (verde quando QT_ENTREGUE > 0, vermelho caso contrário)

Resultado esperado: O agendamento ocorre no pedido. Ao atender o pedido pela nota, a quantidade entregue é abatida da mesma agenda.


H - Pedido Não Atendido​

O que fazDetalhe
Quem gera o CONTROLEENTREGA?Igual a P (pedido gera)
Diferença frente a PSemanticamente representa pedidos ainda não atendidos — no código, o tratamento é idêntico a P em todos os grep (MPD002, MNF002, MNF019, MNF015), exceto que as triggers de item se comportam igual (<> 'P' inclui H)
Trigger TRGBD_ITEMPEDIDOExecuta a lógica (valor H é diferente de P) — mantém consistência de quantidades na CONTROLEENTREGA quando o item do pedido é alterado/excluído
JOIN em MNF019 linha 767(ParmFatur.Values['ST_ENTREGA'] = 'P') or (ParmFatur.Values['ST_ENTREGA'] = 'H') — mesma lógica

Simulação passo a passo​

  1. MFA001 → Controle de Entrega = Pedido Não Atendido (H)
  2. Salve os parâmetros (F6)
  3. Abra um pedido em MPD002 → abre TfrmEntrega para agendar (mesma tela da opção P)
  4. Altere a QT_PEDIDA de um item já salvo → a trigger TRGAIUD_ITEMPEDIDO linha 251 roda e ajusta a quantidade em CONTROLEENTREGA (diferente de P, que a trigger pularia)
  5. Emita a NF em MNF002 → nota não gera novo controle

Resultado esperado: Igual a P para efeitos operacionais, mas as triggers de item do pedido permanecem ativas para manutenção das quantidades quando itens são editados.


T - Pedido Não Atendido / Nota​

O que fazDetalhe
Quem gera o CONTROLEENTREGA?Tanto o pedido quanto a nota podem gerar
Regra condicional em NF (MNF002 linha 4558)((ST_ENTREGA = 'T') and (dmMNF002.iPedido <> 'S')) or (ST_ENTREGA = 'S') — ou seja, quando a NF não é originada de pedido (iPedido <> 'S'), a nota também gera agenda. Se a NF veio de pedido, o controle já foi criado pelo pedido e não é duplicado
JOIN em MNF019 linha 781Junta CONTROLEENTREGA duplamente (CE do pedido + CEN da nota) com (CE.ST_ENTREGUE = 'G') OR (CEN.ST_ENTREGUE = 'G')
Legenda em MNF015Visível

Simulação passo a passo​

  1. MFA001 → Controle de Entrega = Pedido Não Atendido / Nota (T)
  2. Salve os parâmetros (F6)
  3. Abra um pedido em MPD002 → gera controle (linha 3220 aceita T)
  4. Emita a NF a partir desse pedido em MNF002 → linha 4558: como iPedido = 'S' e ST_ENTREGA = 'T', a NF não duplica o controle; reaproveita o do pedido
  5. Emita uma NF avulsa (sem pedido) em MNF002 → iPedido <> 'S', então a NF também gera controle de entrega
  6. Em MNF019, a pesquisa lista tanto agendas vindas do pedido quanto da nota

Resultado esperado: Cobertura completa — o sistema agenda entrega para qualquer documento que inicie a venda (pedido ou nota avulsa), sem duplicar quando um gera o outro.


N - Não (desligado)​

O que fazDetalhe
Controle de entregaTotalmente desligado — nenhum CONTROLEENTREGA é gerado por pedido ou nota
Parâmetros complementaresForçados a desabilitar: em UdmMFA001.pas linha 1694 ST_ENTREGAValidate zera ST_ENTREGACONSUMIDORFINAL = 'N' e desabilita cmbST_ENTREGACONSUMIDORFINAL. Em UMFA001.pas linha 1864 cmbST_ENTREGAChange desabilita cmbST_CONTENTREGA, cmbTP_MOVCONTENTREGA, cmbST_CONFIRMAENTREGAREMESSA e força ST_CONFIRMAENTREGAREMESSA = 'N' + TP_MOVCONTENTREGA = 'A'
Script SCRIPT_TRANSFCONTROLEENTREGAFiltra WHERE P.ST_ENTREGA <> 'N' (linha 24) — a migração pula empresas com N
Triggers TRGBD_ITEMPEDIDO / TRGAIUD_ITEMPEDIDOComo N é diferente de P, a lógica da trigger roda, porém o COUNT em CONTROLEENTREGA retorna 0 (não há registros), ficando inofensivo

Simulação passo a passo​

  1. MFA001 → Controle de Entrega = Não (N)
  2. Observe que, no mesmo OnChange, os combos de Controla Item, Confirmar Entrega na Remessa, Excluir Entrega na Devolução e Consumidor Final Entregue ficam desabilitados
  3. Salve os parâmetros (F6)
  4. Abra um pedido em MPD002, inclua itens, salve → nenhum registro em CONTROLEENTREGA, nenhuma tela de agendamento abre
  5. Emita a NF em MNF002 → idem
  6. Em MNF015, a legenda "Entregue" não aparece (condição das linhas 165–167 é falsa)

Resultado esperado: Este é o valor padrão (AfterInsert em UdmMFA001.pas linha 450). O módulo de controle de entrega fica inativo.

Este é o valor padrão ao criar um novo registro no MFA001.


Regra de Consumidor Final​

Quando ST_ENTREGA <> 'N' e PARMFATUR.ST_ENTREGACONSUMIDORFINAL = 'S', a função CarregarControleEntrega (source/jControleEntrega/UDadosEntrega.pas linhas 299–302) define automaticamente iStEntrega := 'E' (Entregue) quando o cliente do pedido/nota for igual a PARMFATUR.CD_CONSUMIDOR. Isso não abre a tela TfrmEntrega, grava o CONTROLEENTREGA direto como entregue e evita intervenção manual em vendas balcão.

Interação com outros parâmetros​

  • ST_CONTENTREGA, ST_ENTREGACONSUMIDORFINAL, TP_MOVCONTENTREGA, ST_CONFIRMAENTREGAREMESSA: todos controlados pelo OnChange do combo (UMFA001.pas linha 1864) e pelo OnValidate do campo (UdmMFA001.pas linha 1694). Só podem ser editados se ST_ENTREGA <> 'N'.
  • Ordem de disparo no save: em MPD002/MNF002, o bloco de controle de entrega roda depois do SAVEPOINT MPD002_ENTREGA e, se a função ControleEntrega retornar false, o ROLLBACK TO MPD002_ENTREGA é executado e a gravação é cancelada com W-0000 ("Controle de Entrega Cancelado.").

Tabela Comparativa Resumida​

OpçãoDescriçãoPedido (MPD002) gera?Nota (MNF002) gera?NF a partir de pedidoTriggers de ITEMPEDIDO
SNota FiscalNãoSimNota geraExecuta
PPedido AtendidoSimNãoReaproveita do pedidoNão executa (valor = P)
HPedido Não AtendidoSimNãoReaproveita do pedidoExecuta
TPedido Não Atendido / NotaSimSim (se NF avulsa)Reaproveita do pedidoExecuta
NNão (desligado)NãoNão-Executa (inofensivo)

Referências no Código Fonte​

ComboBox e default​

ArquivoLinha(s)Trecho
source/MFA001/UMFA001.dfm11203–11233cmbST_ENTREGA: TwwDBComboBox com Items.Strings = ('Nota Fiscal'#9'S', 'Pedido Atendido'#9'P', 'Pedido Não Atendido'#9'H', 'Pedido Não Atendido / Nota'#9'T', 'Não'#9'N')
source/MFA001/UMFA001.pas1864–1893cmbST_ENTREGAChange — habilita/desabilita combos complementares
source/MFA001/UdmMFA001.pas450AfterInsert: tabPARMFATURST_ENTREGA.AsString := 'N'
source/MFA001/UdmMFA001.pas1694–1705tabPARMFATURST_ENTREGAValidate — quando = 'N', zera ST_ENTREGACONSUMIDORFINAL

Consumidores em Pedidos/Notas​

ArquivoLinhaUso
source/MPD002/UMPD002.pas3220, 3244Gera CONTROLEENTREGA quando valor é P, H ou T
source/MNF002/UMNF002.pas4556, 4558, 4582Gera CONTROLEENTREGA quando valor é S ou T (com regra de iPedido)
source/MPD011/UNFORDEM.pas812–846Geração de entrega ao transformar ordem em NF — aceita S e T
source/MNF019/UMNF019.pas752, 767, 781Monta LEFT JOIN em CONTROLEENTREGA conforme valor
source/MNF019/UMNF019.pas2633, 2648, 2662Mesma lógica no segundo SELECT da pesquisa
source/MNF019/UdmMNF019.pas4175, 4191, 4205Terceira ocorrência do JOIN condicional
source/MNF015/UMNF015.pas165–167, 657–659Exibição da legenda "Entregue" e pintura do grid
source/REQ001/UREQ001.pas1710Lê ST_ENTREGA da PARMFATUR para selecionar layout REQ001_N
source/jControleEntrega/jEntrega.pas29–44Função pública ControleEntrega que recebe o valor em iParametros[5]
source/jControleEntrega/UDadosEntrega.pas102–360CarregarControleEntrega — monta SQL e insere em CONTROLEENTREGA

Scripts SQL (Firebird)​

ArquivoLinhaUso
Scripts/SCRIPT_TRANSFCONTROLEENTREGA.sql24, 33Filtra empresas com ST_ENTREGA <> 'N' e passa o valor para VIEW_CONTROLEENTREGA
Scripts/TRGBD_ITEMPEDIDO.sql14, 17Trigger BEFORE DELETE de item de pedido — só ajusta CONTROLEENTREGA quando ST_ENTREGA <> 'P'
Scripts/TRGAIUD_ITEMPEDIDO.sql251, 254Trigger AFTER I/U/D de item de pedido — mesmo filtro <> 'P'