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ódulo | Código | Uso |
|---|
| Parâmetros de Faturamento | MFA001 | Único local de configuração (cmbST_CONFIRMAENTREGAREMESSA) - UMFA001.dfm:11317-11344 |
| Cancelamento de Nota Fiscal | MNF005 | Só 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 NF | MNF019 | Duas 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
| Objeto | Arquivo | Papel |
|---|
GERA_MESTRA | Scripts/GERA_MESTRA.sql linhas 42, 47-50, 195-203, 301-308 | Lê 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_MESTRA | Scripts/CANCELA_MESTRA.sql linhas 42, 61-64, 340-347 | Mesma 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_CONTROLEENTREGA | invocada pelas duas acima | Procedure alvo que efetivamente insere/atualiza a CONTROLEENTREGA para cada item da remessa |
Campos envolvidos
| Tabela.Campo | Tipo | Descrição |
|---|
PARMFATUR.ST_CONFIRMAENTREGAREMESSA | CHAR(1) (DOM_CHAR1) | O próprio parâmetro (UdmMFA001.dfm:1906-1911, FixedChar = True, Size = 1) |
PARMFATUR.TP_MOVCONTENTREGA | CHAR(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_ENTREGA | CHAR(1) | Parâmetro "avô" - quando = 'N' desabilita o combo e força ST_CONFIRMAENTREGAREMESSA := 'N' (UMFA001.pas:1881,1885) |
PARMFATUR.TP_EXCLUSAOENTREGADEVOLUCAO | CHAR(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_NOTA | CHAR(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 faz | Detalhe |
|---|
GERA_MESTRA | Ao 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_MESTRA | Ao 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 extra | Ambos os gatilhos exigem também V_TP_EXCLUSAOENTREGADEVOLUCAO = 'A' e I_CD_SERIE <> 'XXXX' |
TP_EXCLUSAOENTREGADEVOLUCAO | Ao 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) |
| MNF005 | Não executa a verificação manual de controle de entrega ao cancelar a nota (UMNF005.pas:445) - assume que CANCELA_MESTRA já cuidou |
| MNF019 | Nã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ípico | Empresas 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
- 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)
- O combo "Confirmar Entrega na Remessa" (
cmbST_CONFIRMAENTREGAREMESSA) fica habilitado - selecione Sim (S)
- O
OnChange força automaticamente TP_EXCLUSAOENTREGADEVOLUCAO := 'A' (UMFA001.pas:2489) - verificável na aba
- Salve (F6) -
PARMFATUR.ST_CONFIRMAENTREGAREMESSA = 'S' e TP_EXCLUSAOENTREGADEVOLUCAO = 'A'
- 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'
- 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)
- A
CONTROLEENTREGA é populada automaticamente para cada item da remessa
- 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 faz | Detalhe |
|---|
GERA_MESTRA | Não dispara GERA_CONTROLEENTREGA - o IF de Scripts/GERA_MESTRA.sql:195 e :301 falha porque V_ST_CONFIRMAENTREGAREMESSA = 'N' |
CANCELA_MESTRA | Não dispara GERA_CONTROLEENTREGA - o IF de Scripts/CANCELA_MESTRA.sql:340 falha |
TP_EXCLUSAOENTREGADEVOLUCAO | Ao setar 'N', o OnChange força TP_EXCLUSAOENTREGADEVOLUCAO := 'M' (Manual) - o operador precisa administrar a entrega manualmente (UMFA001.pas:2494-2496) |
| MNF005 | Executa 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ção | Em 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ída | Em 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ípico | Empresas 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
- Em MFA001 → aba Controle Entrega:
ST_ENTREGA = Pedido Atendido (P)
TP_MOVCONTENTREGA = Mestra (M) → combo habilitado
- Selecione "Confirmar Entrega na Remessa" =
Não (N)
- O
OnChange força TP_EXCLUSAOENTREGADEVOLUCAO := 'M' (Manual) (UMFA001.pas:2495)
- Salve (F6) -
PARMFATUR.ST_CONFIRMAENTREGAREMESSA = 'N'
- 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
- Usuário precisa entrar em MNF016 ou similar para criar manualmente os registros de
CONTROLEENTREGA
- 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
- 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ção | Nome | GERA_MESTRA/CANCELA_MESTRA | TP_EXCLUSAOENTREGADEVOLUCAO forçado | MNF005 cancelamento | MNF019 devolução/saída | Cenário típico |
|---|
| S | Sim | Disparam GERA_CONTROLEENTREGA automaticamente | A (Automático) | Pula verificação manual | Pula validação de saldo | Distribuidor com fluxo de remessa estruturado |
| N | Não (padrão) | Não disparam | M (Manual) | Executa verificação + C-0000 | Executa validação e SAVEPOINT manual | Default conservador; empresa sem remessa ou com controle manual |
Referências no Código Fonte
ComboBox e valor padrão
| Arquivo | Linha(s) | Trecho |
|---|
source/MFA001/UMFA001.dfm | 11109-11117 | pagControleEntrega: TTabSheet com Caption = 'Controle Entrega' e grpControleEntrega: TGroupBox - Caption = ' Parâmetros de Controle de Entrega ' |
source/MFA001/UMFA001.dfm | 11175-11188 | Label96: TLabel com Caption = 'Confirmar Entrega na Remessa' (label do combo) |
source/MFA001/UMFA001.dfm | 11317-11344 | cmbST_CONFIRMAENTREGAREMESSA: TwwDBComboBox com Items.Strings = ('Sim'#9'S', 'Não'#9'N'), DataField = 'ST_CONFIRMAENTREGAREMESSA', OnChange = cmbST_CONFIRMAENTREGAREMESSAChange |
source/MFA001/UMFA001.pas | 524 | Declaração cmbST_CONFIRMAENTREGAREMESSA: TwwDBComboBox |
source/MFA001/UMFA001.pas | 827 | Declaração do handler cmbST_CONFIRMAENTREGAREMESSAChange |
source/MFA001/UMFA001.pas | 1881, 1885 | cmbST_ENTREGAChange: desabilita e força = 'N' quando ST_ENTREGA = 'N' |
source/MFA001/UMFA001.pas | 2470-2482 | cmbTP_MOVCONTENTREGAChange: só habilita o combo quando TP_MOVCONTENTREGA = 'M'; senão desabilita e força 'N' |
source/MFA001/UMFA001.pas | 2484-2497 | cmbST_CONFIRMAENTREGAREMESSAChange: 'S' → força TP_EXCLUSAOENTREGADEVOLUCAO := 'A'; 'N' → força := 'M' |
source/MFA001/UdmMFA001.pas | 271 | Declaração tabPARMFATURST_CONFIRMAENTREGAREMESSA: TStringField |
source/MFA001/UdmMFA001.pas | 562 | AfterInsert: tabPARMFATURST_CONFIRMAENTREGAREMESSA.AsString := 'N' (valor padrão ao criar PARMFATUR) |
source/MFA001/UdmMFA001.dfm | 1906-1911 | Campo tabPARMFATURST_CONFIRMAENTREGAREMESSA (FieldName = 'ST_CONFIRMAENTREGAREMESSA', FixedChar = True, Size = 1) |
source/MFA001/UdmMFA001.dfm | 2439, 2611, 2864 | ST_CONFIRMAENTREGAREMESSA nos SELECT/INSERT/UPDATE gerados pelo FireDAC para tabPARMFATUR |
Consumidores (leem o parâmetro)
| Arquivo | Linha | Uso |
|---|
source/MNF005/UMNF005.pas | 445 | if ((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.pas | 1480 | if (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.pas | 1849 | if ((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)
| Arquivo | Linha(s) | Uso |
|---|
Scripts/GERA_MESTRA.sql | 42 | declare variable V_ST_CONFIRMAENTREGAREMESSA DOM_CHAR1; |
Scripts/GERA_MESTRA.sql | 47-50 | SELECT 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.sql | 195-203 | IF (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.sql | 301-308 | Mesmo gatilho, dentro do loop de saldos fracionados (sem filtro em I_ST_MESTRA) |
Scripts/CANCELA_MESTRA.sql | 42 | declare variable V_ST_CONFIRMAENTREGAREMESSA DOM_CHAR1; |
Scripts/CANCELA_MESTRA.sql | 61-64 | SELECT 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.sql | 340-347 | IF (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 |