Bloqueio da Confirmação de Ordem de Carregamento Sem Nota Fiscal
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Faturamento → Opção 2 (label "Bloquear Confirmação Sem Nota Fiscal[MPD011/MRC020]") Tabela:
PARMFATUR.ST_BLOQCONFIRMACAOValor padrão:N(permite confirmar com pergunta)
Define o comportamento ao Confirmar/Encerrar uma Ordem de Carregamento que ainda possui pedidos sem Nota Fiscal emitida (ou seja, itens da ordem com ST_ORDEMCARREG = 'N' e NR_LANCAMENTO IS NULL). Quando ativado (S), impede totalmente o encerramento. Quando desativado (N), apenas pergunta ao usuário se deseja prosseguir mesmo assim.
Telas impactadas
| Módulo | Código | Descrição |
|---|---|---|
| Geração de NF por Ordem | MPD011 | Confirmação/Encerramento da Ordem de Carregamento (fluxo padrão) |
| Recebimento - Confirmação de Ordem | MRC020 | Confirmação/Encerramento de Ordem via Recebimento |
| Recebimento - Variante 049 | MRC049 | Outra variante de Confirmação de Ordem no Recebimento |
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_BLOQCONFIRMACAO | Flag S/N com a configuração do bloqueio |
ORDEMCARREG.ST_ORDEMCARREG | Situação da ordem de carregamento (N = em aberto / não encerrada) |
ORDEMCARREG.NR_LANCAMENTO | Se IS NULL indica que a NF ainda não foi emitida |
ORDEMCARREG.NR_EMBARQUE / CD_EMPRESA | Identificação da ordem em validação |
Opções disponíveis
N - Não (padrão)
| O que faz | Detalhe |
|---|---|
| Bloqueia a confirmação? | Não — exibe pergunta C-0000 ao usuário |
| Mensagem exibida | "Existem Notas Fiscais Pendentes para esta Ordem que não foram Emitidas. Deseja Confirmar/Encerrar a Ordem?" |
| Se o usuário responde "Sim" | Ordem é encerrada normalmente |
| Se o usuário responde "Não" | Lança JException W-0000 → "Encerramento da Ordem de Carregamento Cancelada!" |
Valor atribuído em AfterInsert | 'N' (UdmMFA001.pas:535) |
Simulação passo a passo
- Em MFA001 → Opção 1 → Bloquear Confirmação Sem Nota Fiscal = "Não".
- Salve os parâmetros (F6).
- Abra MPD011 (ou MRC020 / MRC049).
- Localize uma Ordem de Carregamento que tenha pelo menos um pedido sem Nota Fiscal emitida (
ORDEMCARREG.NR_LANCAMENTO IS NULLeST_ORDEMCARREG = 'N'). - Tente Confirmar/Encerrar a ordem.
Resultado esperado: Aparece o diálogo "Existem Notas Fiscais Pendentes para esta Ordem que não foram Emitidas. Deseja Confirmar/Encerrar a Ordem?". Clicando "Sim" a ordem é encerrada; clicando "Não" a operação é cancelada com a mensagem "Encerramento da Ordem de Carregamento Cancelada!".
S - Sim
| O que faz | Detalhe |
|---|---|
| Bloqueia a confirmação? | Sim — encerramento é abortado |
| Mensagem exibida | "Existem Notas Fiscais Pendentes para esta Ordem que não foram Emitidas." |
| Pergunta ao usuário? | Não — cai direto no else que dispara JException |
| Efeito final | A ordem não pode ser encerrada enquanto houver NFs pendentes |
Simulação passo a passo
- Em MFA001 → Opção 1 → Bloquear Confirmação Sem Nota Fiscal = "Sim".
- Salve os parâmetros (F6).
- Abra MPD011 (ou MRC020 / MRC049).
- Selecione uma Ordem de Carregamento com pelo menos um pedido ainda sem NF emitida.
- Tente Confirmar/Encerrar a ordem.
Resultado esperado: O sistema exibe imediatamente a mensagem "Existem Notas Fiscais Pendentes para esta Ordem que não foram Emitidas." (em MPD011) ou "Existem Notas Fiscais Pendentes para esta Ordem que não foram Emitidas. Confirmação Cancelada!" (em MRC020/MRC049) e aborta o encerramento da ordem.
Regra Geral
- O parâmetro é carregado pela rotina
BuscaParametros_MPD011no datamodule de MPD011 e replicado noTStringListque é passado para as unidades MRC020/MRC049 viaParmFatur.Values['ST_BLOQCONFIRMACAO']. - Em todos os três módulos (MPD011, MRC020, MRC049) a lógica de decisão é idêntica:
if ParmFatur.Values['ST_BLOQCONFIRMACAO'] = 'N' then <pergunta>caso contrário<bloqueia direto>. - O rótulo no formulário deixa explícito quais telas são afetadas:
Bloquear Confirmação Sem Nota Fiscal[MPD011/MRC020](UMFA001.dfm:3794). - A verificação de "NFs pendentes" é feita pelo próprio módulo via
SELECT COUNT(NR_EMBARQUE) FROM ORDEMCARREG WHERE ST_ORDEMCARREG = 'N' AND NR_LANCAMENTO IS NULLantes de avaliar o parâmetro. - Não existe procedure armazenada (
Scripts/*.sql) usando este parâmetro — o controle é inteiramente feito no lado cliente (Delphi).
Tabela Comparativa Resumida
| Opção | Descrição | Permite encerrar? | Pergunta ao usuário? | Mensagem |
|---|---|---|---|---|
| N | Não (padrão) | Sim, se usuário confirmar | Sim | "Deseja Confirmar/Encerrar a Ordem?" |
| S | Sim | Não | Não | "Existem Notas Fiscais Pendentes para esta Ordem que não foram Emitidas." |
Referências no Código Fonte
| Arquivo | Linhas | Função |
|---|---|---|
source/MFA001/UMFA001.dfm | 3788-3802 | Label lblST_CONFIRMACAOBLOQUEIO com caption "Bloquear Confirmação Sem Nota Fiscal[MPD011/MRC020]" |
source/MFA001/UMFA001.dfm | 4312-4338 | ComboBox cmbST_BLOQCONFIRMACAO com Items.Strings = ('Sim'#9'S', 'Não'#9'N'), DataField = 'ST_BLOQCONFIRMACAO' |
source/MFA001/UMFA001.pas | 415-416 | Declaração de lblST_CONFIRMACAOBLOQUEIO: TLabel e cmbST_BLOQCONFIRMACAO: TwwDBComboBox |
source/MFA001/UdmMFA001.pas | 230 | Campo tabPARMFATURST_BLOQCONFIRMACAO: TStringField |
source/MFA001/UdmMFA001.pas | 535 | Valor padrão 'N' em AfterInsert |
source/MFA001/UdmMFA001.dfm | 245, 1677-1682, 2416, 2587, 2825, 3125 | SELECT / INSERT / UPDATE do campo no dataset tabPARMFATUR |
source/MPD011/UdmMPD011.pas | 1580 | BuscaParametros_MPD011 inclui PF.ST_BLOQCONFIRMACAO no SELECT de PARMFATUR |
source/MPD011/UMPD011.pas | 862-869 | Lógica if (ParmFatur.Values['ST_BLOQCONFIRMACAO'] = 'N') then msgCodigo('C-0000',...) else raise JException na confirmação da ordem |
source/MRC020/UMRC020.pas | 860-867 | Mesma lógica aplicada na confirmação da ordem em MRC020 |
source/MRC049/UMRC049.pas | 795-802 | Mesma lógica aplicada na confirmação da ordem em MRC049 |