Pular para o conteúdo principal

ST_BLOQUEIAORDEMCARREG - Bloqueia Faturamento pela Ordem de Carregamento

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → aba Notas Fiscais → sub-aba Parâmetros de Notas → campo "Bloqueia Faturamento pela Ordem de Carregamento" Tabela: PARMFATUR.ST_BLOQUEIAORDEMCARREG — DOM_CHAR1 DEFAULT 'N' NOT NULL Valor padrão: N (Não bloqueia)

Este parâmetro controla se a emissão de Nota Fiscal a partir de uma Ordem de Carregamento é bloqueada quando a ordem ainda não foi liberada para venda (ORDEMCARREG.ST_VENDALIBERADA = 'N').

Funciona como um trava de liberação comercial: mesmo que o embarque/ordem exista no sistema, enquanto a ordem não for marcada como liberada, o faturamento pelos módulos MPD011 (Faturamento por Ordem de Carregamento) e MRC020 (NF Fatura de Embarque) é abortado com a mensagem "A Ordem de Carregamento está Bloqueada para Faturamento. Verifique!".

O parâmetro não é consultado por stored procedures — toda a lógica reside no código Delphi dos módulos consumidores.

Telas impactadas​

MóduloCódigoPapel
Parâmetros de FaturamentoMFA001Tela onde o parâmetro é configurado (ComboBox Sim/Não)
Faturamento por Ordem de CarregamentoMPD011Consumidor principal — bloqueia emissão de NF manual (botão Emitir NF) e emissão automática (botão Gerar Automático) quando ST_VENDALIBERADA = 'N' e parâmetro = 'S'
NF Fatura de Embarque (Recap)MRC020Consulta o parâmetro em Busca_Parametros e bloqueia a emissão quando a ordem não está liberada
Cadastros de Empresa (réplica dos parâmetros)RCA006, CPD009Contém cópias do SELECT/INSERT/UPDATE da PARMFATUR para manutenção do registro — não consomem o parâmetro, apenas o persistem

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_BLOQUEIAORDEMCARREGO parâmetro em si (DOM_CHAR1, default 'N', NOT NULL). Valores: 'S' ou 'N'
ORDEMCARREG.ST_VENDALIBERADAStatus que indica se a ordem está liberada para venda/faturamento. Quando 'N' e o parâmetro é 'S', o faturamento é bloqueado

Opções disponíveis​

S - Sim (bloqueia faturamento de ordens não liberadas)​

O que fazDetalhe
Regra geralAo emitir NF a partir de uma Ordem de Carregamento, o sistema consulta ORDEMCARREG.ST_VENDALIBERADA. Se retornar 'N' (ordem ainda não liberada), a emissão é abortada com exceção.
Validação em MPD011 — Emissão manual (UMPD011.pas:1096-1104)No loop que percorre as ordens selecionadas (evento do botão Emitir NF, aba "Ordem de Carregamento"), executa SELECT FIRST 1 ST_VENDALIBERADA FROM ORDEMCARREG WHERE CD_EMPRESA = ... AND NR_EMBARQUE = .... Se Resultado[0] = 'N' e parmfatur.values['ST_BLOQUEIAORDEMCARREG'] = 'S', dispara raise JException.Create('W-0000', ['A Ordem de Carregamento está Bloqueada para Faturamento. Verifique!']).
Validação em MPD011 — Geração automática (UMPD011.pas:1380-1388)Mesma validação, aplicada dentro do evento btnGerarAutomatico (disponível somente quando ST_ORDEMCARREG = 'S' e TPENVIO = 'L').
Validação em MRC020 (UMRC020.pas:1130-1138)Usa a variável de cache dmMRC020.iST_BLOQUEIAORDEMCARREG (carregada em Busca_Parametros, UdmMRC020.pas:382-389). Mesma mensagem: "A Ordem de Carregamento está Bloqueada para Faturamento. Verifique!".
Fluxo que libera a ordemPara tirar o bloqueio, é necessário que a ordem seja liberada comercialmente (muda ORDEMCARREG.ST_VENDALIBERADA para valor diferente de 'N') — tipicamente via rotina de liberação de crédito / aprovação do vendedor.
Outros parâmetros não afetadosStatus da ordem (ORDEMCARREG.ST_ORDEMCARREG = N/A/C), bloqueio de pedidos (ST_PEDIDO = 'B'), embarque cancelado (EMBARQUE.ST_EMBARQUE = 'C') e quantidade de pneus válidos continuam sendo validados independentemente deste parâmetro.

Simulação passo a passo​

  1. MFA001 → aba "Notas Fiscais" → sub-aba "Parâmetros de Notas" → campo "Bloqueia Faturamento pela Ordem de Carregamento" = Sim
  2. Salve (F6)
  3. Crie um pedido de venda e vincule-o a um Embarque/Ordem de Carregamento
  4. Garanta que a ordem esteja com ST_VENDALIBERADA = 'N' (não liberada — condição típica logo após o cadastro da ordem)
  5. Abra o MPD011, selecione o embarque e clique em "Emitir NF"
  6. Resultado: o sistema exibe a mensagem de aviso "A Ordem de Carregamento está Bloqueada para Faturamento. Verifique!" e não emite a nota
  7. Libere a ordem via fluxo de aprovação (atualiza ST_VENDALIBERADA para 'S')
  8. Repita a emissão no MPD011 — agora a NF é gerada normalmente

Resultado esperado: o faturamento só é permitido após a liberação explícita da ordem. Cria uma barreira de aprovação entre o carregamento físico e a emissão fiscal.


N - Não (não bloqueia — valor padrão)​

O que fazDetalhe
Regra geralO valor de ORDEMCARREG.ST_VENDALIBERADA é ignorado para fins de bloqueio do faturamento. O SELECT continua sendo executado em MPD011/MRC020, mas o IF com o raise nunca entra (a segunda condição parmfatur.values['ST_BLOQUEIAORDEMCARREG'] = 'S' fica False).
Demais validaçõesAs demais validações (ordem cancelada, pedidos bloqueados, recusados, etc.) continuam ativas — este parâmetro trata exclusivamente o check de liberação comercial da ordem.
Cenário típicoEmpresas que não usam o ciclo de liberação comercial da ordem de carregamento — basta a ordem existir para que a NF possa ser emitida. É o comportamento de quem não usa o controle de ST_VENDALIBERADA.

Simulação passo a passo​

  1. MFA001 → "Bloqueia Faturamento pela Ordem de Carregamento" = Não (default)
  2. Salve (F6)
  3. Crie um pedido e vincule a um Embarque/Ordem de Carregamento, sem liberar a ordem (ST_VENDALIBERADA = 'N')
  4. Abra o MPD011 e emita a NF
  5. Resultado: a NF é gerada normalmente, mesmo com a ordem ainda não liberada comercialmente

Resultado esperado: o fluxo de emissão não passa pela verificação de liberação comercial — o sistema assume que qualquer ordem cadastrada pode ser faturada.


Interação com outros parâmetros​

  • ST_ORDEMCARREG (ver parâmetro): define como a NF é montada (por pedido, por pessoa, com similar, recapadora). ST_BLOQUEIAORDEMCARREG é ortogonal — atua antes (no gate de permissão), independente do modo de consolidação escolhido.
  • ST_BLOQUEIONF: bloqueia emissão de NF de forma global (por empresa) — check distinto, em outro ponto do fluxo.
  • ST_BLOQUEIOPED: bloqueia criação de pedido — atua ainda antes, fora do ciclo de ordem/embarque.

Tabela Comparativa Resumida​

ValorNomeConsulta ST_VENDALIBERADAComportamento quando ordem não liberada ('N')Mensagem exibida
SSim (bloqueia)SimAborta emissão em MPD011 e MRC020"A Ordem de Carregamento está Bloqueada para Faturamento. Verifique!"
NNão (default)Sim (mas resultado ignorado)Permite emissão normalmente—

Referências no Código Fonte​

Tela MFA001 (definição do parâmetro)​

  • source/MFA001/UdmMFA001.pas:118 — declaração do TField tabPARMFATURST_BLOQUEIAORDEMCARREG: TStringField
  • source/MFA001/UdmMFA001.pas:470 — tabPARMFATURST_BLOQUEIAORDEMCARREG.AsString := 'N'; (valor default no AfterInsert)
  • source/MFA001/UdmMFA001.dfm:1040-1044 — definição do TField (FieldName ST_BLOQUEIAORDEMCARREG, Size 1, Alignment taCenter)
  • source/MFA001/UdmMFA001.dfm:2368 — coluna do SELECT principal da tabPARMFATUR
  • source/MFA001/UdmMFA001.dfm:2522 — coluna do INSERT da tabPARMFATUR
  • source/MFA001/UdmMFA001.dfm:2700 — coluna do UPDATE da tabPARMFATUR
  • source/MFA001/UMFA001.pas:385 — cmbST_BLOQUEIAORDEMCARREG: TwwDBComboBox;
  • source/MFA001/UMFA001.dfm:6084-6098 — TLabel lbl48 com caption "Bloqueia Faturamento pela Ordem de Carregamento" (FocusControl aponta para o combo)
  • source/MFA001/UMFA001.dfm:6789-6815 — definição do ComboBox (DataField = 'ST_BLOQUEIAORDEMCARREG', DataSource = dmMFA001.dsPARMFATUR) com os 2 itens:
    • Sim → S
    • Não → N

Consumo do parâmetro​

  • source/MPD011/UdmMPD011.pas:1577 — SQL BuscaParametros_MPD011 que lê PF.ST_BLOQUEIAORDEMCARREG junto com demais colunas da PARMFATUR (resultado é carregado em parmfatur: TStringList)
  • source/MPD011/UMPD011.pas:1103 — bloqueio na emissão manual de NF: if ((Trim(Resultado[0]) = 'N') and (parmfatur.values['ST_BLOQUEIAORDEMCARREG'] = 'S')) then raise JException.Create('W-0000', ['A Ordem de Carregamento está Bloqueada para Faturamento. Verifique!']);
  • source/MPD011/UMPD011.pas:1387 — mesma validação aplicada ao fluxo do botão "Gerar Automático" (geração em lote de NFe)
  • source/MRC020/UdmMRC020.pas:286 — campo iST_BLOQUEIAORDEMCARREG: String na seção private do TdmMRC020
  • source/MRC020/UdmMRC020.pas:382-389 — Busca_Parametros carrega o parâmetro da PARMFATUR e armazena em dmMRC020.iST_BLOQUEIAORDEMCARREG := Resultado[3]
  • source/MRC020/UMRC020.pas:1137 — bloqueio na emissão de NF do embarque: if ((Trim(Resultado[0]) = 'N') AND (dmMRC020.iST_BLOQUEIAORDEMCARREG = 'S')) then raise JException.Create('W-0000', ['A Ordem de Carregamento está Bloqueada para Faturamento. Verifique!']);

Persistência em outros cadastros (não consomem, apenas gravam)​

  • source/RCA006/UdmRCA006.dfm:3112, 3195 — INSERT/UPDATE da PARMFATUR no cadastro RCA006
  • source/CPD009/UdmCPD009.dfm:363, 446 — INSERT/UPDATE da PARMFATUR no cadastro CPD009

DDL​

  • docs/schema/tables/PARMFATUR.sql:78 — ST_BLOQUEIAORDEMCARREG DOM_CHAR1 DEFAULT 'N' NOT NULL COLLATE PT_BR

Procedures impactadas​

Nenhuma. O parâmetro é consumido apenas no código Delphi dos módulos MPD011 e MRC020 — não há referência em stored procedures do Firebird (grep em Scripts/ retorna vazio).