Pular para o conteúdo principal

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 NULL Valor 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óduloCódigoPapel
Parâmetros de FaturamentoMFA001Tela onde o parâmetro é configurado (ComboBox Sim/Não)
Emissão de NFMNF004Consumidor — 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 CarregamentoMPD011Consumidor 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)MRC020Consumidor — após emitir notas do embarque, dispara clique automático em btnFinalizar se temAConfirmar = True
Emissão de NF de Embarque (variação MRC049)MRC049Consumidor — mesma lógica do MRC020, porém também exige NrNotasFiscais <> '' (garante que pelo menos uma nota foi efetivamente emitida)

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_FECHAORDEMCARREGNOTASO parâmetro em si (DOM_CHAR1, default 'N', NOT NULL). Valores: 'S' ou 'N'
ORDEMCARREG.NR_LANCAMENTOVí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_ORDEMCARREGStatus da linha da ordem. A checagem só considera linhas com ST_ORDEMCARREG = 'N' (não atendidas/não canceladas)
NOTA.ST_NOTAEm 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 fazDetalhe
Regra geralApó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 é encerradaO 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​

  1. MFA001 → aba "Pedidos / O.S." → sub-aba "Opção 1" → campo "Fecha Ordem Carregamento ao Emitir Notas" = Sim
  2. Salve (F6)
  3. Cadastre uma Ordem de Carregamento contendo 3 pedidos que resultarão em 3 notas fiscais
  4. Abra o MPD011, selecione o embarque e clique em "Emitir NF"
  5. Após a emissão da última nota (todas as 3 prontas, nenhuma pendente), o sistema:
    • Conta linhas da ORDEMCARREG com NR_LANCAMENTO IS NULL → retorna 0
    • Seta FechaOrdem := true
    • Ao final do loop, executa btnFinalizar.Click automaticamente
  6. 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
  7. 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 fazDetalhe
Regra geralA 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 manualApó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ípicoEmpresas 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çõesAs 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​

  1. MFA001 → "Fecha Ordem Carregamento ao Emitir Notas" = Não (default)
  2. Salve (F6)
  3. Cadastre uma Ordem de Carregamento com 3 pedidos e emita todas as 3 notas pelo MPD011
  4. Resultado: as 3 notas são emitidas com sucesso, mas a ordem permanece em aberto (nenhum btnFinalizar.Click é disparado)
  5. 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 em ST_VENDALIBERADA). ST_FECHAORDEMCARREGNOTAS atua 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 o ST_FECHAORDEMCARREGNOTAS, pois nenhuma nota é gerada.

Tabela Comparativa Resumida​

ValorNomeConta notas pendentes da ordemAção quando todas as notas foram geradasEncerramento da ordem
SSim (fecha)SimDispara btnFinalizar.Click ou AtendeOrdemCarregamento(...)Automático ao final da emissão
NNão (default)Sim (mas resultado não aciona nada)Nenhuma açãoManual — 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 TField tabPARMFATURST_FECHAORDEMCARREGNOTAS: TStringField
  • source/MFA001/UdmMFA001.pas:492 — tabPARMFATURST_FECHAORDEMCARREGNOTAS.AsString := 'N'; (valor default no AfterInsert)
  • source/MFA001/UdmMFA001.dfm:1212-1217 — definição do TField (FieldName ST_FECHAORDEMCARREGNOTAS, FixedChar, Size 1)
  • source/MFA001/UdmMFA001.dfm:2549 — coluna do INSERT da tabPARMFATUR
  • source/MFA001/UdmMFA001.dfm:2764 — coluna do UPDATE da tabPARMFATUR
  • source/MFA001/UMFA001.pas:316 — cmbST_FECHAORDEMCARREGNOTAS: TwwDBComboBox;
  • source/MFA001/UMFA001.dfm:7971-7984 — TLabel Label24 com 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 → S
    • Nã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, chama AtendeOrdemCarregamento(iCdEmpEmbarque, iNrEmbarque) (linhas 490-529)
  • source/MPD011/UdmMPD011.pas:1577 — SELECT em BuscaParametros_MPD011 que lê PF.ST_FECHAORDEMCARREGNOTAS junto com demais colunas da PARMFATUR (resultado é carregado em parmfatur: 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.