Bloqueio da Data de Recebimento do CTR (Conhecimento de Frete)
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Notas Fiscais → Parâmetros de Notas (campo "Bloq. Data de Recebimento CTR [MNF001]") Tabela:
PARMFATUR.ST_BLOQDATACTR(DOM_CHAR1, NOT NULL) Valor padrão:N(não bloqueia — DEFAULT na DDL emdocs/schema/tables/PARMFATUR.sql:160)
Descrição
Controla se, ao ratear um CTe/CTR (Conhecimento de Transporte Rodoviário - Frete) sobre as Notas Fiscais de Entrada no MNF001, o sistema deve exigir que a Data de Emissão das Notas Fiscais selecionadas para rateio seja igual à Data de Emissão do CTe que está sendo lançado.
Quando ativo (S), o sistema só permite associar ao CTR notas cujo DT_EMISSAO coincide com o DT_EMISSAO do próprio conhecimento de frete, impedindo rateios de frete em notas de datas divergentes.
Telas impactadas
| Módulo | Código | Arquivo | Descrição |
|---|---|---|---|
| Nota Fiscal de Entrada - Rateio de Frete | MNF001 | source/MNF001/UFRETENF.pas, source/MNF001/UdmMNF001.pas | Tela de rateio do CTe/CTR sobre as Notas Fiscais de entrada (usa iST_BLOQDATACTR para validar datas) |
| MFA001 (configuração) | MFA001 | source/MFA001/UMFA001.dfm, source/MFA001/UdmMFA001.pas | Tela onde o parâmetro é editado (ComboBox Sim/Não) |
Observação: Existe código comentado em
source/MNF034/UdmMNF034.pas:382referenciando este parâmetro no contexto de rateio de frete da MNF034 (conhecimentos CTe), mas a validação está desativada naquele módulo. Atualmente só MNF001 aplica a regra.
Campos envolvidos
| Campo | Tabela | Descrição |
|---|---|---|
DT_EMISSAO | NOTA (CTe — tipo C) | Data de emissão do conhecimento de frete |
DT_EMISSAO | NOTA (NF de origem — tipo E) | Data de emissão da Nota Fiscal candidata ao rateio de frete |
FRETENOTA.NR_LANCAMENTONF | FRETENOTA | Lançamento da nota vinculada ao CTR |
Como o valor é lido
No carregamento do MNF001, o parâmetro é obtido na procedure de leitura do PARMFATUR e armazenado na variável global dmMNF001.iST_BLOQDATACTR (declarada em source/MNF001/UdmMNF001.pas:1113):
// source/MNF001/UdmMNF001.pas:1378-1416 (trecho)
' CD_MOVTRANSFENT, CD_ITEMCTE, ST_BLOQDATACTR, TP_ORDENALET100, ...
...
dmMNF001.iST_BLOQDATACTR := Resultado[24];
A partir desse ponto, toda a lógica da tela de Frete (UFRETENF.pas) consulta essa variável em memória.
Opções disponíveis
S - Sim (Bloqueia: Data da Nota DEVE ser igual à Data do CTe)
| O que faz | Detalhe |
|---|---|
| Mostra aviso visual na tela de rateio? | SIM (label lblmsgParametroDTCTR visível em UFRETENF.pas:1063-1064): "Permitido apenas Notas com Data lançamento igual a Data de Recebimento." |
| Ao gravar uma linha de nota no rateio | Valida se NOTA.DT_EMISSAO = FRETENF.DT_EMISSAO; se diverge, lança erro (UFRETENF.pas:164-169) |
| Filtro da pesquisa de notas candidatas | O SELECT que lista notas filtra N.DT_EMISSAO = [DT_EMISSAO do CTe] (UFRETENF.pas:910-913 e UdmMNF001.pas:5658-5662) |
| Impacto na listagem | Apenas notas com a mesma data de emissão do CTe aparecem para rateio |
Lógica no código
// source/MNF001/UFRETENF.pas:164-169 (validacao na gravacao)
if(dmMNF001.iST_BLOQDATACTR = 'S')then
if(tabFRETENFDT_EMISSAO.AsString <> '')then
if(tabNOTADT_EMISSAO.AsString <> tabFRETENFDT_EMISSAO.AsString)then
begin
Raise JException.Create('W-0000',
['A data de Recebimento da Nota diverge da data de Emissão da Nota. Verifique!']);
end;
// source/MNF001/UFRETENF.pas:910-913 (filtro no SELECT de notas candidatas)
datasNota := '';
if(dmMNF001.iST_BLOQDATACTR = 'S')then
datasNota := Nulo(dmMNF001.tabNOTADT_EMISSAO.AsString, 'D')
else
datasNota := 'N.DT_EMISSAO ';
// ... e depois usa "AND N.DT_EMISSAO = " + datasNota
// source/MNF001/UFRETENF.pas:1062-1064 (exibicao do aviso na FormActivate)
lblmsgParametroDTCTR.visible := false;
if(dmMNF001.iST_BLOQDATACTR = 'S')then
lblmsgParametroDTCTR.visible := true;
Simulação passo a passo
- Acesse MFA001 → aba Notas Fiscais → sub-aba Parâmetros de Notas
- No ComboBox "Bloq. Data de Recebimento CTR [MNF001]" selecione Sim
- Salve (F6)
- Abra MNF001 e lance um CTe de entrada com
DT_EMISSAO = 10/04/2026 - Clique em Rateio do Frete para abrir o
UFRETENF - A tela exibe o aviso "Permitido apenas Notas com Data lançamento igual a Data de Recebimento."
- Ao procurar notas para ratear, somente notas com
DT_EMISSAO = 10/04/2026são listadas - Tente gravar uma linha de nota cuja emissão seja
08/04/2026→ Erro: "A data de Recebimento da Nota diverge da data de Emissão da Nota. Verifique!" - Grave uma nota com
DT_EMISSAO = 10/04/2026→ sucesso
Resultado esperado: O rateio do CTe só aceita notas emitidas na mesma data do próprio CTe; tanto a listagem (filtro) quanto a gravação (validação) aplicam a restrição.
N - Não (Livre: qualquer data é aceita)
| O que faz | Detalhe |
|---|---|
| Mostra aviso visual? | Não (label fica invisível) |
| Validação na gravação | Pulada — qualquer data de NF pode ser associada ao CTR |
| Filtro da pesquisa de notas | Não há filtro por data (usa N.DT_EMISSAO sem igualdade, ou seja, mantém qualquer valor) |
| Comportamento | Padrão legado: rateio livre de frete sobre qualquer NF de entrada do mesmo fornecedor/pessoa |
Simulação passo a passo
- Acesse MFA001 → aba Notas Fiscais → Parâmetros de Notas
- No ComboBox "Bloq. Data de Recebimento CTR [MNF001]" selecione Não
- Salve (F6)
- Abra MNF001 e lance um CTe com
DT_EMISSAO = 10/04/2026 - Abra o rateio de frete (
UFRETENF) - Aviso não aparece
- A pesquisa de notas candidatas lista todas as notas elegíveis, independentemente da data de emissão
- Grave uma nota com
DT_EMISSAO = 01/04/2026(diferente do CTe) → Gravação permitida
Resultado esperado: Qualquer NF de entrada do fornecedor pode ser rateada pelo CTR, sem validação/filtro por data de emissão.
Tabela Comparativa Resumida
| Opção | Aviso na tela | Filtro de notas (SELECT) | Validação na gravação | Resultado prático |
|---|---|---|---|---|
| S | Visível | AND N.DT_EMISSAO = [DT do CTe] | Bloqueia se datas divergem | Só rateia notas da mesma data do CTR |
| N | Oculto | Sem restrição de data | Não valida | Livre (padrão) |
Mensagens geradas
| Código | Tipo | Mensagem | Origem |
|---|---|---|---|
W-0000 | Aviso (JException) | A data de Recebimento da Nota diverge da data de Emissão da Nota. Verifique! | source/MNF001/UFRETENF.pas:168 |
Também existe o label estático " Permitido apenas Notas com Data lançamento igual a Data de Recebimento."* em
source/MNF001/UFRETENF.dfm:114-130(lblmsgParametroDTCTR), exibido apenas quando o parâmetro =S.
Referências no Código Fonte
Delphi (source/)
| Arquivo | Linha(s) | Papel |
|---|---|---|
source/MFA001/UMFA001.dfm | 6342-6354 | Label73: Caption "Bloq. Data de Recebimento CTR [MNF001]" |
source/MFA001/UMFA001.dfm | 7277-7303 | ComboBox wwDBComboBox11 (DataField=ST_BLOQDATACTR, Items Sim=S/Não=N) |
source/MFA001/UdmMFA001.dfm | 223-224 | SELECT do tabPARMFATUR incluindo a coluna |
source/MFA001/UdmMFA001.dfm | 1559-1562 | Definição do TStringField |
source/MFA001/UdmMFA001.dfm | 2810 | Cláusula UPDATE gerada pelo TUpdateSQL |
source/MFA001/UdmMFA001.dfm | 3104 | SELECT secundário do tabPARMFATUR |
source/MFA001/UdmMFA001.pas | 211 | Declaração tabPARMFATURST_BLOQDATACTR: TStringField |
source/MNF001/UdmMNF001.pas | 1113 | Declaração da variável iST_BLOQDATACTR: String |
source/MNF001/UdmMNF001.pas | 1378 | Inclusão da coluna no SELECT do PARMFATUR |
source/MNF001/UdmMNF001.pas | 1416 | dmMNF001.iST_BLOQDATACTR := Resultado[24] |
source/MNF001/UdmMNF001.pas | 5659-5662 | Uso em pesquisa de notas para rateio (filtro condicional por data) |
source/MNF001/UFRETENF.pas | 164-169 | Validação na gravação do rateio (lança W-0000) |
source/MNF001/UFRETENF.pas | 910-913 | Filtro de data no SELECT de notas candidatas |
source/MNF001/UFRETENF.pas | 1063-1064 | Exibe/oculta lblmsgParametroDTCTR no FormActivate |
source/MNF001/UFRETENF.dfm | 114-130 | Label lblmsgParametroDTCTR (aviso visual) |
source/MNF034/UdmMNF034.pas | 382-385 | Código comentado referenciando o parâmetro (regra não aplicada em MNF034) |
SQL (Scripts/)
Nenhuma referência encontrada em Scripts/ — o parâmetro é consumido exclusivamente por código Delphi.
DDL
| Arquivo | Linha | Conteúdo |
|---|---|---|
docs/schema/tables/PARMFATUR.sql | 160 | ST_BLOQDATACTR DOM_CHAR1 DEFAULT 'N' NOT NULL |