Pular para o conteúdo principal

Parâmetro Confirmar Entrega na Remessa (Nota Mestra)

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → aba Controle Entrega (pagControleEntrega / grupo grpControleEntrega - "Parâmetros de Controle de Entrega") - rótulo "Confirmar Entrega na Remessa" (Label96, UMFA001.dfm:11175-11188) Tabela: PARMFATUR.ST_CONFIRMAENTREGAREMESSA Valor padrão: N (Não)

Controla se, no fluxo de Nota Mestra/Remessa, as procedures GERA_MESTRA e CANCELA_MESTRA devem gerar automaticamente registros em CONTROLEENTREGA via GERA_CONTROLEENTREGA ao emitir/cancelar uma remessa. Funciona em conjunto com TP_EXCLUSAOENTREGADEVOLUCAO: o gatilho SQL só dispara quando o par (ST_CONFIRMAENTREGAREMESSA = 'S' AND TP_EXCLUSAOENTREGADEVOLUCAO = 'A') é verdadeiro (Scripts/GERA_MESTRA.sql:195,301; Scripts/CANCELA_MESTRA.sql:340).

Além de ativar o automatismo SQL, o parâmetro inverte a lógica de verificação manual em MNF005 (cancelamento de nota) e MNF019 (devolução): quando ST_CONFIRMAENTREGAREMESSA = 'N' o Delphi avisa/bloqueia manualmente sobre controles de entrega existentes; quando 'S', assume que a procedure cuidou disso e pula a verificação (comentário histórico no código: "Só irá verificar o Controle Entrega quando o parâmetro for igual a Não. Caso contrario o processo será automático, feito pela procedure GERA_CONTROLEENTREGA" - Kevin - 11/12/2017, chamado 125274).

O combo só faz sentido quando TP_MOVCONTENTREGA = 'M' (Mestra): cmbTP_MOVCONTENTREGAChange (UMFA001.pas:2470-2482) habilita/desabilita o campo e força = 'N' em qualquer outro caso.

Telas impactadas​

MóduloCódigoUso
Parâmetros de FaturamentoMFA001Único local de configuração (cmbST_CONFIRMAENTREGAREMESSA) - UMFA001.dfm:11317-11344
Cancelamento de Nota FiscalMNF005Só verifica controle de entrega existente e pede confirmação de cancelamento se ST_CONFIRMAENTREGAREMESSA = 'N' e TP_EXCLUSAOENTREGADEVOLUCAO = 'M' (UMNF005.pas:445); se 'S', pula a validação manual porque o trigger do CANCELA_MESTRA cuida do controle
Devolução/Agendamento de Entrega via NFMNF019Duas decisões diferentes: (1) ao devolver (cmbTP_NOTA.Value = 'D') só recalcula saldos de CONTROLEENTREGA quando = 'N' (UMNF019.pas:1480); (2) ao gravar uma nota TP_NOTA = 'S' (saída), só aciona SAVEPOINT MPD002_ENTREGA e lógica de entrega manual quando = 'N' (UMNF019.pas:1849)

Procedures/Views impactadas​

ObjetoArquivoPapel
GERA_MESTRAScripts/GERA_MESTRA.sql linhas 42, 47-50, 195-203, 301-308Lê ST_CONFIRMAENTREGAREMESSA e TP_EXCLUSAOENTREGADEVOLUCAO da PARMFATUR para a variável local. Em dois pontos distintos (geração de remessa simples em I_ST_MESTRA IN ('R','C','D') e loop de controle com saldos fracionados), executa GERA_CONTROLEENTREGA somente se V_ST_CONFIRMAENTREGAREMESSA = 'S' AND V_TP_EXCLUSAOENTREGADEVOLUCAO = 'A' AND I_CD_SERIE <> 'XXXX'
CANCELA_MESTRAScripts/CANCELA_MESTRA.sql linhas 42, 61-64, 340-347Mesma leitura do par. No cancelamento de remessa (I_ST_MESTRA = 'R') com V_TP_MESTRA IN ('F', 'I', 'R'), chama GERA_CONTROLEENTREGA sob a mesma condição: V_ST_CONFIRMAENTREGAREMESSA = 'S' AND V_TP_EXCLUSAOENTREGADEVOLUCAO = 'A' AND I_CD_SERIE <> 'XXXX'
GERA_CONTROLEENTREGAinvocada pelas duas acimaProcedure alvo que efetivamente insere/atualiza a CONTROLEENTREGA para cada item da remessa

Campos envolvidos​

Tabela.CampoTipoDescrição
PARMFATUR.ST_CONFIRMAENTREGAREMESSACHAR(1) (DOM_CHAR1)O próprio parâmetro (UdmMFA001.dfm:1906-1911, FixedChar = True, Size = 1)
PARMFATUR.TP_MOVCONTENTREGACHAR(1)Parâmetro "pai" no ComboBox - só habilita este combo quando = 'M' (UMFA001.pas:2472-2481); em qualquer outro valor força ST_CONFIRMAENTREGAREMESSA := 'N'
PARMFATUR.ST_ENTREGACHAR(1)Parâmetro "avô" - quando = 'N' desabilita o combo e força ST_CONFIRMAENTREGAREMESSA := 'N' (UMFA001.pas:1881,1885)
PARMFATUR.TP_EXCLUSAOENTREGADEVOLUCAOCHAR(1)Parâmetro "irmão" - usado em conjunto nas procedures e em MNF005. O OnChange deste combo (UMFA001.pas:2484-2497) altera TP_EXCLUSAOENTREGADEVOLUCAO: se 'S' → força = 'A' (Automático); se 'N' → força = 'M' (Manual)
MESTRA.*, REMESSA.*, CONTROLEENTREGA.*-Tabelas-alvo envolvidas no fluxo de Nota Mestra/Remessa e respectivo controle de entrega
NOTA.TP_NOTACHAR(1)Condição de entrada em MNF019 ('D' devolução, 'S' saída) para avaliar o parâmetro

Opções disponíveis​

S - Sim (Automático via procedure)​

O que fazDetalhe
GERA_MESTRAAo gerar remessa (I_ST_MESTRA IN ('R','C','D')), dispara EXECUTE PROCEDURE GERA_CONTROLEENTREGA(...) criando automaticamente os controles de entrega para cada item da remessa (Scripts/GERA_MESTRA.sql:195-203,301-308)
CANCELA_MESTRAAo cancelar uma remessa (I_ST_MESTRA = 'R' e V_TP_MESTRA IN ('F', 'I', 'R')), dispara GERA_CONTROLEENTREGA para atualizar/estornar os controles de entrega vinculados (Scripts/CANCELA_MESTRA.sql:340-347)
Condição extraAmbos os gatilhos exigem também V_TP_EXCLUSAOENTREGADEVOLUCAO = 'A' e I_CD_SERIE <> 'XXXX'
TP_EXCLUSAOENTREGADEVOLUCAOAo setar 'S', o OnChange do combo força TP_EXCLUSAOENTREGADEVOLUCAO := 'A' (Automático) - garantindo a coerência do par exigido pelas procedures (UMFA001.pas:2486-2490)
MNF005Não executa a verificação manual de controle de entrega ao cancelar a nota (UMNF005.pas:445) - assume que CANCELA_MESTRA já cuidou
MNF019Não valida saldos de CONTROLEENTREGA na devolução (UMNF019.pas:1480) nem executa o bloco manual SAVEPOINT MPD002_ENTREGA ao gravar saída (UMNF019.pas:1849)
Cenário típicoEmpresas com fluxo Nota Mestra → Nota Filha que querem que a própria procedure de remessa crie/estorne os CONTROLEENTREGA sem intervenção do operador

Simulação passo a passo​

  1. Em MFA001 → aba Controle Entrega:
    • ST_ENTREGA = Pedido Atendido (P) ou Nota Fiscal (S)
    • TP_MOVCONTENTREGA = Mestra (M) - necessário para habilitar o combo (UMFA001.pas:2474)
  2. O combo "Confirmar Entrega na Remessa" (cmbST_CONFIRMAENTREGAREMESSA) fica habilitado - selecione Sim (S)
  3. O OnChange força automaticamente TP_EXCLUSAOENTREGADEVOLUCAO := 'A' (UMFA001.pas:2489) - verificável na aba
  4. Salve (F6) - PARMFATUR.ST_CONFIRMAENTREGAREMESSA = 'S' e TP_EXCLUSAOENTREGADEVOLUCAO = 'A'
  5. Emita uma Nota Mestra (remessa) chamando o fluxo que executa GERA_MESTRA (ex.: MPD002/MNF002 com ST_MESTRA = 'R') em série diferente de 'XXXX'
  6. No trigger GERA_MESTRA, a variável V_ST_CONFIRMAENTREGAREMESSA = 'S' + V_TP_EXCLUSAOENTREGADEVOLUCAO = 'A' + I_CD_SERIE <> 'XXXX' → dispara EXECUTE PROCEDURE GERA_CONTROLEENTREGA(...) (Scripts/GERA_MESTRA.sql:195-203)
  7. A CONTROLEENTREGA é populada automaticamente para cada item da remessa
  8. Ao cancelar essa remessa via MNF005: a verificação manual de controle de entrega (UMNF005.pas:445) é pulada (porque ST_CONFIRMAENTREGAREMESSA = 'S') - o operador não vê a pergunta "A Nota Possui Controle de Entrega, Deseja Continuar...". CANCELA_MESTRA assume o estorno via GERA_CONTROLEENTREGA (Scripts/CANCELA_MESTRA.sql:340-347)

Resultado esperado: A tabela CONTROLEENTREGA é mantida exclusivamente pela procedure GERA_MESTRA/CANCELA_MESTRA. O operador não recebe perguntas de confirmação manual ao cancelar a nota nem passa pela validação de devolução em MNF019. Fluxo 100% automático para distribuidores com alto volume de remessas.


N - Não (Manual - padrão)​

O que fazDetalhe
GERA_MESTRANão dispara GERA_CONTROLEENTREGA - o IF de Scripts/GERA_MESTRA.sql:195 e :301 falha porque V_ST_CONFIRMAENTREGAREMESSA = 'N'
CANCELA_MESTRANão dispara GERA_CONTROLEENTREGA - o IF de Scripts/CANCELA_MESTRA.sql:340 falha
TP_EXCLUSAOENTREGADEVOLUCAOAo setar 'N', o OnChange força TP_EXCLUSAOENTREGADEVOLUCAO := 'M' (Manual) - o operador precisa administrar a entrega manualmente (UMFA001.pas:2494-2496)
MNF005Executa a verificação: SELECT FIRST 1 C.CD_EMPRESA FROM CONTROLEENTREGA C WHERE ... AND C.ST_ENTREGUE <> 'N'. Se houver, mostra C-0000 ("A Nota Possui Controle de Entrega, Deseja Continuar e Cancelar os Controles de Entrega?") e, se confirmar, cancela manualmente os pedidos vinculados (UMNF005.pas:445-...). Condição completa: ST_CONFIRMAENTREGAREMESSA = 'N' AND TP_EXCLUSAOENTREGADEVOLUCAO = 'M'
MNF019 devoluçãoEm nota TP_NOTA = 'D', valida manualmente o saldo de CONTROLEENTREGA para cada item devolvido via DEVOLUCAO_CONTROLEENTREGA(...) (UMNF019.pas:1480-1558), levantando W-0000 se o saldo agendado/entregue impedir a devolução
MNF019 saídaEm nota TP_NOTA = 'S', executa o bloco manual SAVEPOINT MPD002_ENTREGA (UMNF019.pas:1849-1853) replicando a lógica de entrega que a procedure faria
Cenário típicoEmpresas que não usam Nota Mestra ou que preferem manter controle total/manual sobre CONTROLEENTREGA via telas (MPD002/MNF002/MNF016)

Simulação passo a passo​

  1. Em MFA001 → aba Controle Entrega:
    • ST_ENTREGA = Pedido Atendido (P)
    • TP_MOVCONTENTREGA = Mestra (M) → combo habilitado
  2. Selecione "Confirmar Entrega na Remessa" = Não (N)
  3. O OnChange força TP_EXCLUSAOENTREGADEVOLUCAO := 'M' (Manual) (UMFA001.pas:2495)
  4. Salve (F6) - PARMFATUR.ST_CONFIRMAENTREGAREMESSA = 'N'
  5. Emita uma Nota Mestra (remessa): GERA_MESTRA executa mas pula o EXECUTE PROCEDURE GERA_CONTROLEENTREGA porque o IF em Scripts/GERA_MESTRA.sql:195 falha
  6. Usuário precisa entrar em MNF016 ou similar para criar manualmente os registros de CONTROLEENTREGA
  7. Ao cancelar a nota em MNF005: o IF de UMNF005.pas:445 passa (= 'N' e TP_EXCLUSAOENTREGADEVOLUCAO = 'M') → executa SELECT FROM CONTROLEENTREGA e, se encontrar linhas, exibe MsgCodigo('C-0000', ...) pedindo confirmação ao operador
  8. Em devolução por MNF019, o bloco UMNF019.pas:1480 valida saldo e chama DEVOLUCAO_CONTROLEENTREGA(...) - levanta erro se saldo entregue for maior que o devolvido

Resultado esperado: Nenhum automatismo SQL para CONTROLEENTREGA. O operador controla tudo manualmente e recebe avisos/bloqueios nas telas MNF005 e MNF019 sempre que houver conflito com controles de entrega existentes. Valor default, seguro para implantações novas sem fluxo de remessa estruturado.


Interação com TP_MOVCONTENTREGA / ST_CONTENTREGA / TP_EXCLUSAOENTREGADEVOLUCAO / ST_ENTREGA​

  • ST_ENTREGA (avô): quando = 'N', cmbST_ENTREGAChange (UMFA001.pas:1881) desabilita cmbST_CONFIRMAENTREGAREMESSA e força ST_CONFIRMAENTREGAREMESSA := 'N' (UMFA001.pas:1885). Para qualquer edição do parâmetro, ST_ENTREGA precisa ser diferente de 'N'.
  • TP_MOVCONTENTREGA (pai): cmbTP_MOVCONTENTREGAChange só habilita este combo quando = 'M' (Mestra) (UMFA001.pas:2472-2475); em 'N' ou 'A', desabilita e força ST_CONFIRMAENTREGAREMESSA := 'N' (UMFA001.pas:2476-2480). O parâmetro é intrinsecamente ligado ao fluxo de Nota Mestra - fora dele não tem efeito nenhum.
  • TP_EXCLUSAOENTREGADEVOLUCAO (irmão acoplado): este próprio combo altera o irmão via cmbST_CONFIRMAENTREGAREMESSAChange (UMFA001.pas:2484-2497):
    • ST_CONFIRMAENTREGAREMESSA = 'S' → força TP_EXCLUSAOENTREGADEVOLUCAO := 'A' (Automático)
    • ST_CONFIRMAENTREGAREMESSA = 'N' → força TP_EXCLUSAOENTREGADEVOLUCAO := 'M' (Manual)
    • Isso garante o par ('S','A') exigido pelas procedures GERA_MESTRA/CANCELA_MESTRA e o par ('N','M') exigido pela validação de MNF005.
  • ST_CONTENTREGA (irmão não relacionado): parâmetro independente que decide se serviços entram no controle de entrega. Não interage diretamente com este, mas pertence ao mesmo grupo grpControleEntrega.

Tabela Comparativa Resumida​

OpçãoNomeGERA_MESTRA/CANCELA_MESTRATP_EXCLUSAOENTREGADEVOLUCAO forçadoMNF005 cancelamentoMNF019 devolução/saídaCenário típico
SSimDisparam GERA_CONTROLEENTREGA automaticamenteA (Automático)Pula verificação manualPula validação de saldoDistribuidor com fluxo de remessa estruturado
NNão (padrão)Não disparamM (Manual)Executa verificação + C-0000Executa validação e SAVEPOINT manualDefault conservador; empresa sem remessa ou com controle manual

Referências no Código Fonte​

ComboBox e valor padrão​

ArquivoLinha(s)Trecho
source/MFA001/UMFA001.dfm11109-11117pagControleEntrega: TTabSheet com Caption = 'Controle Entrega' e grpControleEntrega: TGroupBox - Caption = ' Parâmetros de Controle de Entrega '
source/MFA001/UMFA001.dfm11175-11188Label96: TLabel com Caption = 'Confirmar Entrega na Remessa' (label do combo)
source/MFA001/UMFA001.dfm11317-11344cmbST_CONFIRMAENTREGAREMESSA: TwwDBComboBox com Items.Strings = ('Sim'#9'S', 'Não'#9'N'), DataField = 'ST_CONFIRMAENTREGAREMESSA', OnChange = cmbST_CONFIRMAENTREGAREMESSAChange
source/MFA001/UMFA001.pas524Declaração cmbST_CONFIRMAENTREGAREMESSA: TwwDBComboBox
source/MFA001/UMFA001.pas827Declaração do handler cmbST_CONFIRMAENTREGAREMESSAChange
source/MFA001/UMFA001.pas1881, 1885cmbST_ENTREGAChange: desabilita e força = 'N' quando ST_ENTREGA = 'N'
source/MFA001/UMFA001.pas2470-2482cmbTP_MOVCONTENTREGAChange: só habilita o combo quando TP_MOVCONTENTREGA = 'M'; senão desabilita e força 'N'
source/MFA001/UMFA001.pas2484-2497cmbST_CONFIRMAENTREGAREMESSAChange: 'S' → força TP_EXCLUSAOENTREGADEVOLUCAO := 'A'; 'N' → força := 'M'
source/MFA001/UdmMFA001.pas271Declaração tabPARMFATURST_CONFIRMAENTREGAREMESSA: TStringField
source/MFA001/UdmMFA001.pas562AfterInsert: tabPARMFATURST_CONFIRMAENTREGAREMESSA.AsString := 'N' (valor padrão ao criar PARMFATUR)
source/MFA001/UdmMFA001.dfm1906-1911Campo tabPARMFATURST_CONFIRMAENTREGAREMESSA (FieldName = 'ST_CONFIRMAENTREGAREMESSA', FixedChar = True, Size = 1)
source/MFA001/UdmMFA001.dfm2439, 2611, 2864ST_CONFIRMAENTREGAREMESSA nos SELECT/INSERT/UPDATE gerados pelo FireDAC para tabPARMFATUR

Consumidores (leem o parâmetro)​

ArquivoLinhaUso
source/MNF005/UMNF005.pas445if ((parmFatur.Values['ST_CONFIRMAENTREGAREMESSA'] = 'N') and (parmFatur.Values['TP_EXCLUSAOENTREGADEVOLUCAO'] = 'M')) → verifica CONTROLEENTREGA e pede MsgCodigo('C-0000', ...) antes de cancelar a nota. Comentário histórico Kevin - 11/12/2017 - Chamado 125274
source/MNF019/UMNF019.pas1480if (frmMNF019.cmbTP_NOTA.Value = 'D') and (ParmFatur.Values['ST_CONFIRMAENTREGAREMESSA'] = 'N') → valida saldo de CONTROLEENTREGA na devolução e chama DEVOLUCAO_CONTROLEENTREGA(...)
source/MNF019/UMNF019.pas1849if ((Trim(dmMNF019.tabNOTATP_NOTA.AsString) = 'S') and (ParmFatur.Values['ST_CONFIRMAENTREGAREMESSA'] = 'N')) → executa SAVEPOINT MPD002_ENTREGA e bloco manual de entrega ao gravar nota de saída

Scripts SQL (Firebird)​

ArquivoLinha(s)Uso
Scripts/GERA_MESTRA.sql42declare variable V_ST_CONFIRMAENTREGAREMESSA DOM_CHAR1;
Scripts/GERA_MESTRA.sql47-50SELECT P.ST_CONFIRMAENTREGAREMESSA, P.TP_EXCLUSAOENTREGADEVOLUCAO FROM PARMFATUR P WHERE P.CD_EMPRESA = :I_CD_EMPRESA INTO :V_ST_CONFIRMAENTREGAREMESSA, :V_TP_EXCLUSAOENTREGADEVOLUCAO;
Scripts/GERA_MESTRA.sql195-203IF (V_ST_CONFIRMAENTREGAREMESSA = 'S' AND V_TP_EXCLUSAOENTREGADEVOLUCAO = 'A' AND I_ST_MESTRA IN ('R','C','D') AND I_CD_SERIE <> 'XXXX') THEN BEGIN EXECUTE PROCEDURE GERA_CONTROLEENTREGA(...) END
Scripts/GERA_MESTRA.sql301-308Mesmo gatilho, dentro do loop de saldos fracionados (sem filtro em I_ST_MESTRA)
Scripts/CANCELA_MESTRA.sql42declare variable V_ST_CONFIRMAENTREGAREMESSA DOM_CHAR1;
Scripts/CANCELA_MESTRA.sql61-64SELECT P.ST_CONFIRMAENTREGAREMESSA, P.TP_EXCLUSAOENTREGADEVOLUCAO FROM PARMFATUR P WHERE P.CD_EMPRESA = :I_CD_EMPRESA INTO :V_ST_CONFIRMAENTREGAREMESSA, :V_TP_EXCLUSAOENTREGADEVOLUCAO;
Scripts/CANCELA_MESTRA.sql340-347IF (V_ST_CONFIRMAENTREGAREMESSA = 'S' AND V_TP_EXCLUSAOENTREGADEVOLUCAO = 'A' AND V_TP_MESTRA IN ('F', 'I', 'R') AND I_CD_SERIE <> 'XXXX') THEN BEGIN EXECUTE PROCEDURE GERA_CONTROLEENTREGA(...) END