ST_FECHAORDEMCARREGNOTAS - Fecha Ordem Carregamento ao Emitir Notas
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → aba Pedidos / O.S. → sub-aba Opção 1 → GroupBox "Parâmetros de Pedidos/Ordem de Serviço" → campo "Fecha Ordem Carregamento ao Emitir Notas" Tabela:
PARMFATUR.ST_FECHAORDEMCARREGNOTAS—DOM_CHAR1 DEFAULT 'N' NOT NULLValor padrão:N(Não fecha automaticamente)
Este parâmetro controla se, ao terminar a emissão das Notas Fiscais de uma Ordem de Carregamento, o sistema deve encerrar automaticamente a ordem (executando o fluxo de "Atender Ordem" / clique automático em btnFinalizar).
Quando ativo (S), os módulos de faturamento de embarque/ordem detectam se todas as notas planejadas da ordem já foram geradas (ORDEMCARREG.NR_LANCAMENTO IS NULL = 0) e, se sim, disparam o encerramento da ordem — seja via chamada direta a AtendeOrdemCarregamento(...) em MNF004, seja via clique automático no botão "Finalizar" em MPD011, MRC020 e MRC049.
O parâmetro não é consultado por stored procedures — toda a lógica reside no código Delphi dos módulos consumidores. O grep em Scripts/ retorna vazio.
Telas impactadas
| Módulo | Código | Papel |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Tela onde o parâmetro é configurado (ComboBox Sim/Não) |
| Emissão de NF | MNF004 | Consumidor — após emitir a NF, se o parâmetro = 'S' e todas as notas da ordem já foram geradas, chama AtendeOrdemCarregamento(iCdEmpEmbarque, iNrEmbarque) |
| Faturamento por Ordem de Carregamento | MPD011 | Consumidor principal — dispara clique automático em btnFinalizar (fechamento da ordem) ao final do loop de emissão, tanto no fluxo manual quanto no "Gerar Automático" |
| NF Fatura de Embarque (Recap) | MRC020 | Consumidor — após emitir notas do embarque, dispara clique automático em btnFinalizar se temAConfirmar = True |
| Emissão de NF de Embarque (variação MRC049) | MRC049 | Consumidor — mesma lógica do MRC020, porém também exige NrNotasFiscais <> '' (garante que pelo menos uma nota foi efetivamente emitida) |
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_FECHAORDEMCARREGNOTAS | O parâmetro em si (DOM_CHAR1, default 'N', NOT NULL). Valores: 'S' ou 'N' |
ORDEMCARREG.NR_LANCAMENTO | Vínculo da linha da ordem com a nota gerada. Enquanto houver linhas da ordem com NR_LANCAMENTO IS NULL e ST_ORDEMCARREG = 'N', a ordem ainda tem notas pendentes e não deve ser encerrada |
ORDEMCARREG.ST_ORDEMCARREG | Status da linha da ordem. A checagem só considera linhas com ST_ORDEMCARREG = 'N' (não atendidas/não canceladas) |
NOTA.ST_NOTA | Em MRC049, só linhas ligadas a notas válidas (ST_NOTA = 'V') são consideradas no count |
Opções disponíveis
S - Sim (fecha ordem automaticamente ao concluir as notas)
| O que faz | Detalhe |
|---|---|
| Regra geral | Após emitir a(s) nota(s) da ordem, o sistema conta quantas linhas da ORDEMCARREG ainda estão sem nota (NR_LANCAMENTO IS NULL + ST_ORDEMCARREG = 'N'). Se o total for zero, significa que todas as notas planejadas já foram geradas — e a ordem é encerrada automaticamente. |
Consumo em MNF004 (UMNF004.pas:488-529) | Após gravar cada nota, se Parmfatur.Values['ST_FECHAORDEMCARREGNOTAS'] = 'S', busca O.CD_EMPRESA, O.NR_EMBARQUE da ordem vinculada à nota, conta os itens pendentes da ordem (COUNT(O.NR_EMBARQUE) ... WHERE ST_ORDEMCARREG = 'N' AND N.NR_LANCAMENTO IS NULL); se o count retornar '0', chama AtendeOrdemCarregamento(iCdEmpEmbarque, iNrEmbarque) encerrando a ordem. |
Consumo em MPD011 — Emissão manual (UMPD011.pas:1178-1183) | Após o loop de emissão, se parmfatur.values['ST_FECHAORDEMCARREGNOTAS'] = 'S' e a variável local FechaOrdem (calculada dentro do loop verificando se sobram linhas pendentes) é True, executa btnFinalizar.Click — fecha a ordem como se o usuário clicasse em "Finalizar". |
Consumo em MPD011 — Geração automática (UMPD011.pas:1507-1512) | Mesma validação aplicada ao fluxo do botão "Gerar Automático" (geração em lote de NFe). |
Consumo em MRC020 (UMRC020.pas:1377-1383) | Após emitir notas do embarque, se Parmfatur.Values['ST_FECHAORDEMCARREGNOTAS'] = 'S' e temAConfirmar = True (pelo menos uma ordem ficou completamente atendida no loop), dispara btnFinalizar.Click. |
Consumo em MRC049 (UMRC049.pas:1202-1208) | Idêntico ao MRC020, mas exige também NrNotasFiscais <> '' — só fecha a ordem se alguma nota foi efetivamente emitida no ciclo (evita disparar o finalizar quando nada foi gerado). |
| Como a ordem é encerrada | O btnFinalizar.Click / AtendeOrdemCarregamento(...) executa a lógica padrão de finalização da ordem do módulo em uso (normalmente atualizando ORDEMCARREG.ST_ORDEMCARREG das linhas restantes, marcando o embarque como concluído, etc.). Esse fluxo já é o mesmo que o operador usaria manualmente. |
Simulação passo a passo
- MFA001 → aba "Pedidos / O.S." → sub-aba "Opção 1" → campo "Fecha Ordem Carregamento ao Emitir Notas" = Sim
- Salve (F6)
- Cadastre uma Ordem de Carregamento contendo 3 pedidos que resultarão em 3 notas fiscais
- Abra o MPD011, selecione o embarque e clique em "Emitir NF"
- Após a emissão da última nota (todas as 3 prontas, nenhuma pendente), o sistema:
- Conta linhas da
ORDEMCARREGcomNR_LANCAMENTO IS NULL→ retorna0 - Seta
FechaOrdem := true - Ao final do loop, executa
btnFinalizar.Clickautomaticamente
- Conta linhas da
- Resultado: a ordem é finalizada sem o usuário precisar clicar no botão Finalizar. Aparece a mensagem "Notas Fiscais Emitidas com Sucesso!" e a ordem já sai encerrada
- Repita o mesmo cenário via MNF004 (emissão de nota individual vinculada à ordem): na emissão da última nota da ordem, o sistema chama
AtendeOrdemCarregamento(...)sem confirmação
Resultado esperado: o operador não precisa voltar manualmente à ordem para marcá-la como atendida — ela é encerrada no mesmo ato de emitir a última nota. Reduz um passo operacional quando o fluxo segue o caminho feliz.
N - Não (não fecha automaticamente — valor padrão)
| O que faz | Detalhe |
|---|---|
| Regra geral | A checagem de "todas as notas geradas" continua sendo calculada (o SQL e a variável FechaOrdem / temAConfirmar são computados normalmente), mas o IF com parmfatur.values['ST_FECHAORDEMCARREGNOTAS'] = 'S' fica False e nenhuma ação automática é disparada. |
| Ordem fica pendente de encerramento manual | Após emitir as notas, a ordem permanece com status em aberto até que o usuário finalize-a manualmente (botão Finalizar do próprio módulo, ou fluxo de atendimento via telas específicas). |
| Cenário típico | Empresas que preferem validar/conferir a ordem antes de encerrá-la, ou que têm etapas adicionais (liberação de entrega, assinatura, conferência fiscal) entre emitir as notas e encerrar a ordem de carregamento. |
| Demais validações | As demais regras de emissão (bloqueio por ordem não liberada, bloqueio por pedido, cálculo de comissão, etc.) continuam ativas — este parâmetro só trata o fechamento pós-emissão. |
Simulação passo a passo
- MFA001 → "Fecha Ordem Carregamento ao Emitir Notas" = Não (default)
- Salve (F6)
- Cadastre uma Ordem de Carregamento com 3 pedidos e emita todas as 3 notas pelo MPD011
- Resultado: as 3 notas são emitidas com sucesso, mas a ordem permanece em aberto (nenhum
btnFinalizar.Clické disparado) - O usuário precisa clicar manualmente em "Finalizar" (ou executar o fluxo de atender ordem) para encerrá-la
Resultado esperado: emissão das notas e fechamento da ordem são etapas separadas, controladas pelo operador. Respeita processos que exigem conferência entre a emissão fiscal e o encerramento logístico da ordem.
Interação com outros parâmetros
ST_ORDEMCARREG(ver parâmetro): define como a NF é montada a partir da ordem (por pedido, por pessoa, com similar, recapadora).ST_FECHAORDEMCARREGNOTASé ortogonal — atua depois (pós-emissão), independente do modo de consolidação.ST_BLOQUEIAORDEMCARREG(ver parâmetro): atua antes da emissão (gate de permissão com base emST_VENDALIBERADA).ST_FECHAORDEMCARREGNOTASatua depois da emissão (automação do encerramento). Os dois são complementares e independentes.ST_BLOQUEIONF: bloqueia emissão de NF de forma global — se ativo, nem chega a avaliar oST_FECHAORDEMCARREGNOTAS, pois nenhuma nota é gerada.
Tabela Comparativa Resumida
| Valor | Nome | Conta notas pendentes da ordem | Ação quando todas as notas foram geradas | Encerramento da ordem |
|---|---|---|---|---|
| S | Sim (fecha) | Sim | Dispara btnFinalizar.Click ou AtendeOrdemCarregamento(...) | Automático ao final da emissão |
| N | Não (default) | Sim (mas resultado não aciona nada) | Nenhuma ação | Manual — usuário precisa clicar "Finalizar" |
Referências no Código Fonte
Tela MFA001 (definição do parâmetro)
source/MFA001/UdmMFA001.pas:151— declaração do TFieldtabPARMFATURST_FECHAORDEMCARREGNOTAS: TStringFieldsource/MFA001/UdmMFA001.pas:492—tabPARMFATURST_FECHAORDEMCARREGNOTAS.AsString := 'N';(valor default noAfterInsert)source/MFA001/UdmMFA001.dfm:1212-1217— definição do TField (FieldNameST_FECHAORDEMCARREGNOTAS, FixedChar, Size 1)source/MFA001/UdmMFA001.dfm:2549— coluna do INSERT databPARMFATURsource/MFA001/UdmMFA001.dfm:2764— coluna do UPDATE databPARMFATURsource/MFA001/UMFA001.pas:316—cmbST_FECHAORDEMCARREGNOTAS: TwwDBComboBox;source/MFA001/UMFA001.dfm:7971-7984—TLabel Label24com Caption "Fecha Ordem Carregamento ao Emitir Notas" (Top=303, Width=211)source/MFA001/UMFA001.dfm:8719-8745— definição do ComboBox (DataField = 'ST_FECHAORDEMCARREGNOTAS',DataSource = dmMFA001.dsPARMFATUR,Style = csDropDownList,MapList = True) com os 2 itens:Sim→SNão→N
Consumo do parâmetro
source/MNF004/UMNF004.pas:490— após a gravação da nota, verifica o parâmetro e, se= 'S'e não há mais linhas da ordem pendentes, chamaAtendeOrdemCarregamento(iCdEmpEmbarque, iNrEmbarque)(linhas 490-529)source/MPD011/UdmMPD011.pas:1577— SELECT emBuscaParametros_MPD011que lêPF.ST_FECHAORDEMCARREGNOTASjunto com demais colunas da PARMFATUR (resultado é carregado emparmfatur: TStringList)source/MPD011/UMPD011.pas:1180— fluxo da emissão manual:if ( (Trim(parmfatur.values['ST_FECHAORDEMCARREGNOTAS']) = 'S' ) and (FechaOrdem) ) then btnFinalizar.Click;source/MPD011/UMPD011.pas:1509— mesma validação no fluxo do "Gerar Automático"source/MRC020/UMRC020.pas:1380—if (Trim(Parmfatur.Values['ST_FECHAORDEMCARREGNOTAS']) = 'S') and (temAConfirmar) then btnFinalizar.Click;source/MRC049/UMRC049.pas:1205—if (Trim(dmMRC049.Parmfatur.Values['ST_FECHAORDEMCARREGNOTAS']) = 'S') and (temAConfirmar) and (NrNotasFiscais <> '') then btnFinalizar.Click;
DDL
docs/schema/tables/PARMFATUR.sql:113—ST_FECHAORDEMCARREGNOTAS DOM_CHAR1 DEFAULT 'N' NOT NULL
Procedures impactadas
Nenhuma. O parâmetro é consumido apenas no código Delphi dos módulos MNF004, MPD011, MRC020 e MRC049 — o grep em Scripts/ retorna vazio.