Pular para o conteúdo principal

Permite Alteração do Cabeçalho da Nota Fiscal (MRC020)

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Faturamento → aba Opção 2 → grupo "Parâmetros Comum a Notas Fiscais / Pedido" → label "Permite Alteração Cabeçalho Nota [MRC020]" (UMFA001.dfm Label92 linha 3907-3919 / combo cmbST_ALTERACABECALHONOTA linhas 4533-4560) Tabela: PARMFATUR.ST_ALTERACABECALHONOTA Valor padrão: N (Não — cabeçalho bloqueado ao gerar NF pela Ordem) — definido em UdmMFA001.pas linha 558 (AfterInsert)

Define o comportamento dos campos de cabeçalho da Nota Fiscal (Pessoa/Cliente, Endereço, Vendedor, Condição de Pagamento, Forma de Pagamento, Fator, Data de Vencimento, Data do Fornecedor) quando a nota é gerada a partir da Ordem de Carregamento da Recapadora na tela MRC020 via o formulário UMRC020NFORDEM.pas.

Controla se o operador pode alterar livremente esses campos herdados da ordem, se precisa de autorização (senha) para confirmar as alterações, ou se o cabeçalho fica totalmente bloqueado (ReadOnly + cor cinza). A verificação ocorre no momento em que a NF é aberta para geração (MontaItemNota) e no momento em que ela é gravada (SalvaNota), comparando o estado atual com um snapshot (notaBackup) capturado na abertura.

O parâmetro foi introduzido pelo Chamado 153197 (ver comentário //Kévin - Chamado: 153197 em UMRC020NFORDEM.pas linhas 945 e 979 e UdmMRC020NFORDEM.pas linhas 945, 979, 1553).

Telas impactadas​

MóduloCódigoArquivoDescrição
Parâmetros FaturamentoMFA001UMFA001.dfm, UdmMFA001.pasConfiguração do parâmetro
NF pela Ordem da RecapadoraMRC020UMRC020NFORDEM.pas, UdmMRC020NFORDEM.pasÚnico consumidor — aplica o bloqueio ou exige autorização ao gerar NF a partir da Ordem de Carregamento

Importante — escopo restrito: este parâmetro só é consumido pelo formulário UMRC020NFORDEM (geração de Nota Fiscal pela Ordem de Carregamento da Recapadora). Não afeta MNF001, MNF002, MNF008 nem a geração de NF padrão pelo MPD011 — para esses fluxos, o bloqueio de alteração é feito pelo parâmetro ST_ALTERANOTA (documento separado), que tem propósito diferente (bloqueia a grade de itens em vez do cabeçalho).

Procedures impactadas​

Nenhuma stored procedure, view ou trigger do diretório Scripts/ consome PARMFATUR.ST_ALTERACABECALHONOTA. Toda a regra está no código Delphi de UMRC020NFORDEM (cliente).

Campos envolvidos​

Campo / VariávelOrigemDescrição
ST_ALTERACABECALHONOTAPARMFATURParâmetro principal (este documento)
ParmFatur.Values['ST_ALTERACABECALHONOTA']TStringList em memóriaChave usada em tempo de execução no MRC020NFORDEM
NOTA.CD_PESSOAtabela NOTACliente — bloqueado quando valor = 'N'
NOTA.CD_ENDERECOtabela NOTAEndereço — bloqueado quando valor = 'N'
NOTA.CD_VENDEDORtabela NOTAVendedor — bloqueado quando valor = 'N'
NOTA.CD_CONDPAGTOtabela NOTACondição de Pagamento — bloqueada quando valor = 'N'
NOTA.CD_FORMAPAGTOtabela NOTAForma de Pagamento — bloqueada quando valor = 'N'
NOTA.VL_FATOR / PC_FATORtabela NOTAFator (valor e percentual) — bloqueados quando valor = 'N'
NOTA.DT_VENCIMENTOtabela NOTAData de Vencimento — bloqueada quando valor = 'N'
NOTA.DT_FORNECEDORtabela NOTAData do Fornecedor — bloqueada quando valor = 'N'
dicionarioCamposconstante em UdmMRC020NFORDEM.pas linhas 17-19Lista dos campos que são monitorados: CD_PESSOA, CD_ENDERECO, CD_VENDEDOR, CD_CONDPAGTO, CD_FORMAPAGTO, VL_FATOR, PC_FATOR, DT_VENCIMENTO, DT_FORNECEDOR
notaBackup: TStringsUdmMRC020NFORDEM.pas linha 455Snapshot do cabeçalho capturado na abertura da NF (usado quando valor = 'A' para detectar alterações)
dsAutorizacao: Stringvariável em UMRC020NFORDEM.pasAcumula os rótulos dos campos que foram alterados pelo operador (separados por #10) — usado para montar a mensagem da tela de autorização
NOTA.CD_AUTORIZADORtabela NOTALogin do usuário que autorizou a alteração — gravado por UPDATE NOTA SET CD_AUTORIZADOR = :LOGIN após confirmação em frmAUTORIZACAO
TfrmAUTORIZACAOform modalTela de digitação de senha/confirmação chamada quando valor = 'A' e o operador alterou ao menos um campo monitorado

Opções disponíveis​

Valores do combo (DFM UMFA001.dfm linhas 4552-4555): Sim → S, Sim (Com Autorização) → A, Não → N

S - Sim​

O que fazDetalhe
Campos do cabeçalho (Pessoa, Endereço, Vendedor, Cond. Pagto, Forma Pagto, Fator, Vencimento, Data Fornecedor) em MRC020Permanecem editáveis sem qualquer restrição
Snapshot notaBackupNão é preenchido (o if das linhas 1556/1583 de UdmMRC020NFORDEM.pas só executa quando o valor é 'A')
Chamada a DesabilitaCamposNão ocorre (UdmMRC020NFORDEM.pas linhas 946, 980 — só executa quando valor = 'N')
Chamada a VerificaAlteracaoNotaNão ocorre (UMRC020NFORDEM.pas linha 946 — só executa quando valor = 'A')
Tela de autorização (TfrmAUTORIZACAO)Não é exibida
Gravação de CD_AUTORIZADOR na NOTANão ocorre

Simulação passo a passo​

  1. Em MFA001 → Faturamento → aba "Opção 2" → "Permite Alteração Cabeçalho Nota [MRC020]" = "Sim"
  2. Salve (F6)
  3. Em MRC020 abra uma Ordem de Carregamento e acione a geração de NF pela Ordem (abre UMRC020NFORDEM)
  4. Altere livremente o Cliente, a Condição de Pagamento, o Vendedor, a Data de Vencimento etc. — os campos permanecem com fundo branco e editáveis
  5. Clique em Salvar → a NF é gerada imediatamente, sem pedir senha e sem gravar CD_AUTORIZADOR

Resultado esperado: O operador tem total liberdade para ajustar o cabeçalho da NF da Recapadora antes de gravar. É a configuração mais flexível; recomendada apenas quando não há necessidade de rastreabilidade sobre quem alterou o cabeçalho.


A - Sim (Com Autorização)​

O que fazDetalhe
Campos do cabeçalhoPermanecem editáveis (não são colocados ReadOnly)
Snapshot notaBackupÉ preenchido na abertura da NF com os valores de todos os campos do tabNOTA (UdmMRC020NFORDEM.pas linhas 1556-1564)
Ao clicar SalvarChama VerificaAlteracaoNota() (UMRC020NFORDEM.pas linha 948) que percorre dicionarioCampos (CD_PESSOA, CD_ENDERECO, CD_VENDEDOR, CD_CONDPAGTO, CD_FORMAPAGTO, VL_FATOR, PC_FATOR, DT_VENCIMENTO, DT_FORNECEDOR) e monta em dsAutorizacao a lista de DisplayLabel de cada campo cujo valor atual difere do snapshot
Quando dsAutorizacao <> ''Abre TfrmAUTORIZACAO em modo modal (ShowModal)
Se o operador cancelar (mrCancel)Dispara JException W-0000 com mensagem "Confirmação Cancelada!" e aborta a gravação da NF
Se o operador confirmarExecuta UPDATE NOTA SET CD_AUTORIZADOR = :LOGIN WHERE CD_EMPRESA = :CD_EMPRESA AND NR_LANCAMENTO = :NR_LANCAMENTO AND CD_SERIE = :CD_SERIE AND TP_NOTA = :TP_NOTA (UMRC020NFORDEM.pas linhas 959-965) registrando quem autorizou
Se nenhum campo de dicionarioCampos foi alteradodsAutorizacao permanece vazio e a NF é salva sem pedir senha

Simulação passo a passo​

  1. Em MFA001 → Faturamento → aba "Opção 2" → "Permite Alteração Cabeçalho Nota [MRC020]" = "Sim (Com Autorização)"
  2. Salve (F6)
  3. Em MRC020 abra a Ordem de Carregamento e acione a geração de NF pela Ordem
  4. Na abertura, o sistema preenche notaBackup (snapshot invisível com os valores originais vindos da Ordem)
  5. Altere a Condição de Pagamento e o Vendedor nos campos do cabeçalho (os campos continuam editáveis visualmente)
  6. Clique em Salvar
  7. O sistema compara campo a campo contra notaBackup → detecta que Cond. Pagto e Vendedor mudaram → monta mensagem com DisplayLabel de ambos e abre TfrmAUTORIZACAO
  8. Se o supervisor digitar senha e confirmar → a NF grava normalmente E o campo NOTA.CD_AUTORIZADOR recebe o login do autorizador
  9. Se clicar em Cancelar → exceção "Confirmação Cancelada!" e a NF não é gravada
  10. Repita: abra outra Ordem e não altere nenhum campo do cabeçalho → ao salvar, dsAutorizacao fica vazio e a tela de autorização não aparece

Resultado esperado: Liberdade de alteração para agilidade, combinada com rastreabilidade: qualquer mudança nos dados principais do cabeçalho exige autorização e fica registrada em CD_AUTORIZADOR. Recomendado para empresas que precisam auditar alterações feitas por usuários operacionais.


N - Não​

O que fazDetalhe
Campos do cabeçalho (Pessoa, Endereço, Vendedor, Cond. Pagto, Forma Pagto, Fator, Vencimento, Data Fornecedor)Bloqueados (ReadOnly := True) via DesabilitaCampos em UdmMRC020NFORDEM.pas linhas 5871-5913
Aparência dos edits no formulárioCor de fundo $00EEEEEE (cinza claro) e cor da letra $009D6A00 — indicação visual de campo bloqueado
Cursor dos edits bloqueadoscrDefault (não mostra seta de I-beam ao passar o mouse)
Campos ReadOnly ativostabNOTACD_PESSOA, tabNOTACD_VENDEDOR, tabNOTACD_ENDERECO, tabNOTACD_CONDPAGTO, tabNOTACD_FORMAPAGTO, tabNOTAPC_FATOR, tabNOTAVL_FATOR, tabNOTADT_FORNECEDOR, tabNOTADT_VENCIMENTO
Chamada a VerificaAlteracaoNota / TfrmAUTORIZACAONão ocorre (a grade já está bloqueada, não há o que autorizar)
Momento do bloqueioExecuta em ambos os caminhos da montagem da NF (UdmMRC020NFORDEM.pas linha 946 e linha 980) — independente do fluxo (com ou sem pedido original)

Simulação passo a passo​

  1. Em MFA001 → Faturamento → aba "Opção 2" → "Permite Alteração Cabeçalho Nota [MRC020]" = "Não"
  2. Salve (F6)
  3. Em MRC020 abra a Ordem de Carregamento e acione a geração de NF pela Ordem
  4. Todos os campos do cabeçalho aparecem com fundo cinza (Pessoa, Endereço, Vendedor, Cond. Pagto, Forma Pagto, Fator, Vencimento, Data do Fornecedor)
  5. Tente clicar em qualquer um → não recebe foco; tentar digitar não tem efeito (o TField está ReadOnly)
  6. Clique em Salvar → a NF é gravada com os dados herdados da Ordem, sem qualquer alteração
  7. Importante: os campos de itens (grade) não são afetados por este parâmetro — somente o cabeçalho. Para bloquear itens use ST_ALTERANOTA

Resultado esperado: O cabeçalho da NF da Recapadora reflete integralmente o que foi informado na Ordem de Carregamento. Qualquer correção precisa ser feita na própria ordem antes de gerar a nota. É o valor padrão ao criar um novo registro no MFA001 (UdmMFA001.pas linha 558 — AfterInsert atribui 'N').


Tabela Comparativa Resumida​

OpçãoDescriçãoCampos do Cabeçalho (MRC020) editáveis?Exige senha/autorização?Grava CD_AUTORIZADOR?Snapshot notaBackup criado?
SSimSim (livre)NãoNãoNão
ASim (Com Autorização)SimSim (somente se algum campo de dicionarioCampos foi alterado)Sim (quando confirmado)Sim
NNãoNão (ReadOnly + cor cinza)Não (nada a alterar)NãoNão

Interação com ST_ALTERANOTA​

ST_ALTERACABECALHONOTA e ST_ALTERANOTA parecem semelhantes mas atuam em camadas e módulos diferentes:

AspectoST_ALTERACABECALHONOTA (este documento)ST_ALTERANOTA
AlcanceSomente formulário UMRC020NFORDEM (geração de NF pela Ordem da Recapadora)MNF001, MNF002, MNF008, MPD011, MRC020NFORDEM (FormShow)
O que bloqueiaCampos do cabeçalho da NOTA (Pessoa, Endereço, Vendedor, Cond. Pagto, Forma Pagto, Fator, datas)Grade de itens (ITEMNOTA.CD_ITEM, QT_ITEMNOTA, VL_UNITARIO, VL_TOTAL, PC_DESCONTO etc.) e totais (despesa, desconto geral, comissão geral)
Critério de disparoSempre — qualquer NF gerada via UMRC020NFORDEMApenas quando a NF foi gerada a partir de Pedido
ValoresS (livre), A (com autorização), N (bloqueado)S (somente venda), E (somente compra), T (ambos), N (livre)
AutorizaçãoPossui modo 'A' com TfrmAUTORIZACAO e gravação de CD_AUTORIZADORNão tem modo com autorização — é apenas "liga/desliga"

Os dois parâmetros são independentes e podem coexistir: em MRC020 a grade de itens pode ficar ReadOnly (pelo ST_ALTERANOTA) enquanto o cabeçalho pode estar livre (pelo ST_ALTERACABECALHONOTA = 'S'), ou o inverso. Para bloquear tudo (cabeçalho + itens) na NF da Recapadora configure ST_ALTERACABECALHONOTA = 'N' E ST_ALTERANOTA ∈ ('S','T').


Referências no Código Fonte​

Tela MFA001 (configuração)​

  • source/MFA001/UMFA001.dfm linhas 3907-3919 — Label92 com caption "Permite Alteração Cabeçalho Nota [MRC020]"
  • source/MFA001/UMFA001.dfm linhas 4533-4560 — combo cmbST_ALTERACABECALHONOTA: TwwDBComboBox (items 'Sim' → S, 'Sim (Com Autorização)' → A, 'Não' → N)
  • source/MFA001/UMFA001.pas linha 500 — declaração cmbST_ALTERACABECALHONOTA: TwwDBComboBox
  • source/MFA001/UMFA001.pas linha 499 — declaração Label92: TLabel
  • source/MFA001/UdmMFA001.pas linha 264 — tabPARMFATURST_ALTERACABECALHONOTA: TStringField
  • source/MFA001/UdmMFA001.pas linha 558 — AfterInsert: valor padrão 'N'
  • source/MFA001/UdmMFA001.dfm linhas 1866-1871 — FieldName = 'ST_ALTERACABECALHONOTA', FixedChar = True, Size = 1
  • source/MFA001/UdmMFA001.dfm linha 278 — SELECT principal da PARMFATUR incluindo o campo
  • source/MFA001/UdmMFA001.dfm linha 2436 — INSERT com coluna ST_ALTERACABECALHONOTA
  • source/MFA001/UdmMFA001.dfm linha 2608 — INSERT com parâmetro :ST_ALTERACABECALHONOTA
  • source/MFA001/UdmMFA001.dfm linha 2858 — UPDATE ST_ALTERACABECALHONOTA = :ST_ALTERACABECALHONOTA
  • source/MFA001/UdmMFA001.dfm linha 3158 — SELECT alternativo (refresh) incluindo o campo

MRC020 - NF pela Ordem da Recapadora (único consumidor)​

  • source/MRC020/UdmMRC020NFORDEM.pas linhas 17-19 — constante dicionarioCampos = 'CD_PESSOA, CD_ENDERECO, CD_VENDEDOR, CD_CONDPAGTO, CD_FORMAPAGTO, VL_FATOR, PC_FATOR, DT_VENCIMENTO, DT_FORNECEDOR'
  • source/MRC020/UdmMRC020NFORDEM.pas linha 455 — declaração notaBackup: TStrings (snapshot do cabeçalho para o modo 'A')
  • source/MRC020/UdmMRC020NFORDEM.pas linha 791 — notaBackup := TStringList.Create
  • source/MRC020/UdmMRC020NFORDEM.pas linhas 945-947 — //Kévin - Chamado: 153197 + if (ParmFatur.Values['ST_ALTERACABECALHONOTA'] = 'N') then DesabilitaCampos; (primeiro caminho de montagem da NF)
  • source/MRC020/UdmMRC020NFORDEM.pas linhas 979-981 — mesma verificação no caminho alternativo
  • source/MRC020/UdmMRC020NFORDEM.pas linhas 1553-1566 — if (ParmFatur.Values['ST_ALTERACABECALHONOTA'] = 'A') then → preenche notaBackup.Values[FieldName] com os valores atuais de tabNOTA (tratando string vazia como ' ')
  • source/MRC020/UdmMRC020NFORDEM.pas linhas 5871-5913 — procedure DesabilitaCampos: define ReadOnly := True em todos os TField do cabeçalho, cor de fundo $00EEEEEE e cor de letra $009D6A00 nos TDBEdit (edtCD_PESSOA, edtCD_VENDEDOR, edtCD_ENDERECO, edtCD_CONDPAGTO, edtCD_FORMAPAGTO, edtVL_FATOR, edtDT_FORNECEDOR, edtDT_VENCIMENTO)
  • source/MRC020/UMRC020NFORDEM.pas linha 362 — declaração Procedure VerificaAlteracaoNota no contexto da classe
  • source/MRC020/UMRC020NFORDEM.pas linha 841 — declaração frmAUTORIZACAO : TfrmAUTORIZACAO
  • source/MRC020/UMRC020NFORDEM.pas linhas 945-967 — bloco do botão Salvar: if (ParmFatur.Values['ST_ALTERACABECALHONOTA'] = 'A') then VerificaAlteracaoNota(); → se dsAutorizacao <> '' cria TfrmAUTORIZACAO, chama ShowModal, em mrCancel dispara JException W-0000 'Confirmação Cancelada!', caso contrário executa UPDATE NOTA SET CD_AUTORIZADOR = :LOGIN
  • source/MRC020/UMRC020NFORDEM.pas linhas 2783-2803 — procedure VerificaAlteracaoNota: percorre dicionarioCampos, compara tabNOTA.FieldList.Fields[i].AsString contra notaBackup.Values[Name] e acumula DisplayLabel dos campos alterados em dsAutorizacao (separador #10)
  • source/MRC020/UMRC020NFORDEM.pas linha 1383 — FreeAndNil(dmMRC020NFORDEM.notaBackup) após o commit da transação