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 NULLValor 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ódulo | Código | Papel |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Tela onde o parâmetro é configurado (ComboBox Sim/Não) |
| Faturamento por Ordem de Carregamento | MPD011 | Consumidor 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) | MRC020 | Consulta 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, CPD009 | Conté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
| Campo | Descrição |
|---|---|
PARMFATUR.ST_BLOQUEIAORDEMCARREG | O parâmetro em si (DOM_CHAR1, default 'N', NOT NULL). Valores: 'S' ou 'N' |
ORDEMCARREG.ST_VENDALIBERADA | Status 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 faz | Detalhe |
|---|---|
| Regra geral | Ao 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 ordem | Para 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 afetados | Status 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
- MFA001 → aba "Notas Fiscais" → sub-aba "Parâmetros de Notas" → campo "Bloqueia Faturamento pela Ordem de Carregamento" = Sim
- Salve (F6)
- Crie um pedido de venda e vincule-o a um Embarque/Ordem de Carregamento
- Garanta que a ordem esteja com
ST_VENDALIBERADA = 'N'(não liberada — condição típica logo após o cadastro da ordem) - Abra o MPD011, selecione o embarque e clique em "Emitir NF"
- Resultado: o sistema exibe a mensagem de aviso "A Ordem de Carregamento está Bloqueada para Faturamento. Verifique!" e não emite a nota
- Libere a ordem via fluxo de aprovação (atualiza
ST_VENDALIBERADApara'S') - 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 faz | Detalhe |
|---|---|
| Regra geral | O 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ções | As 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ípico | Empresas 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
- MFA001 → "Bloqueia Faturamento pela Ordem de Carregamento" = Não (default)
- Salve (F6)
- Crie um pedido e vincule a um Embarque/Ordem de Carregamento, sem liberar a ordem (
ST_VENDALIBERADA = 'N') - Abra o MPD011 e emita a NF
- 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
| Valor | Nome | Consulta ST_VENDALIBERADA | Comportamento quando ordem não liberada ('N') | Mensagem exibida |
|---|---|---|---|---|
| S | Sim (bloqueia) | Sim | Aborta emissão em MPD011 e MRC020 | "A Ordem de Carregamento está Bloqueada para Faturamento. Verifique!" |
| N | Nã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 TFieldtabPARMFATURST_BLOQUEIAORDEMCARREG: TStringFieldsource/MFA001/UdmMFA001.pas:470—tabPARMFATURST_BLOQUEIAORDEMCARREG.AsString := 'N';(valor default noAfterInsert)source/MFA001/UdmMFA001.dfm:1040-1044— definição do TField (FieldNameST_BLOQUEIAORDEMCARREG, Size 1, Alignment taCenter)source/MFA001/UdmMFA001.dfm:2368— coluna do SELECT principal databPARMFATURsource/MFA001/UdmMFA001.dfm:2522— coluna do INSERT databPARMFATURsource/MFA001/UdmMFA001.dfm:2700— coluna do UPDATE databPARMFATURsource/MFA001/UMFA001.pas:385—cmbST_BLOQUEIAORDEMCARREG: TwwDBComboBox;source/MFA001/UMFA001.dfm:6084-6098—TLabel lbl48com 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→SNão→N
Consumo do parâmetro
source/MPD011/UdmMPD011.pas:1577— SQLBuscaParametros_MPD011que lêPF.ST_BLOQUEIAORDEMCARREGjunto com demais colunas da PARMFATUR (resultado é carregado emparmfatur: 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— campoiST_BLOQUEIAORDEMCARREG: Stringna seção private do TdmMRC020source/MRC020/UdmMRC020.pas:382-389—Busca_Parametroscarrega o parâmetro da PARMFATUR e armazena emdmMRC020.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 RCA006source/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).