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.dfmLabel92linha 3907-3919 / combocmbST_ALTERACABECALHONOTAlinhas 4533-4560) Tabela:PARMFATUR.ST_ALTERACABECALHONOTAValor padrão:N(Não — cabeçalho bloqueado ao gerar NF pela Ordem) — definido emUdmMFA001.paslinha 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ódulo | Código | Arquivo | Descrição |
|---|---|---|---|
| Parâmetros Faturamento | MFA001 | UMFA001.dfm, UdmMFA001.pas | Configuração do parâmetro |
| NF pela Ordem da Recapadora | MRC020 | UMRC020NFORDEM.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âmetroST_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ável | Origem | Descrição |
|---|---|---|
ST_ALTERACABECALHONOTA | PARMFATUR | Parâmetro principal (este documento) |
ParmFatur.Values['ST_ALTERACABECALHONOTA'] | TStringList em memória | Chave usada em tempo de execução no MRC020NFORDEM |
NOTA.CD_PESSOA | tabela NOTA | Cliente — bloqueado quando valor = 'N' |
NOTA.CD_ENDERECO | tabela NOTA | Endereço — bloqueado quando valor = 'N' |
NOTA.CD_VENDEDOR | tabela NOTA | Vendedor — bloqueado quando valor = 'N' |
NOTA.CD_CONDPAGTO | tabela NOTA | Condição de Pagamento — bloqueada quando valor = 'N' |
NOTA.CD_FORMAPAGTO | tabela NOTA | Forma de Pagamento — bloqueada quando valor = 'N' |
NOTA.VL_FATOR / PC_FATOR | tabela NOTA | Fator (valor e percentual) — bloqueados quando valor = 'N' |
NOTA.DT_VENCIMENTO | tabela NOTA | Data de Vencimento — bloqueada quando valor = 'N' |
NOTA.DT_FORNECEDOR | tabela NOTA | Data do Fornecedor — bloqueada quando valor = 'N' |
dicionarioCampos | constante em UdmMRC020NFORDEM.pas linhas 17-19 | Lista 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: TStrings | UdmMRC020NFORDEM.pas linha 455 | Snapshot do cabeçalho capturado na abertura da NF (usado quando valor = 'A' para detectar alterações) |
dsAutorizacao: String | variável em UMRC020NFORDEM.pas | Acumula 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_AUTORIZADOR | tabela NOTA | Login do usuário que autorizou a alteração — gravado por UPDATE NOTA SET CD_AUTORIZADOR = :LOGIN após confirmação em frmAUTORIZACAO |
TfrmAUTORIZACAO | form modal | Tela 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.dfmlinhas 4552-4555):Sim → S,Sim (Com Autorização) → A,Não → N
S - Sim
| O que faz | Detalhe |
|---|---|
| Campos do cabeçalho (Pessoa, Endereço, Vendedor, Cond. Pagto, Forma Pagto, Fator, Vencimento, Data Fornecedor) em MRC020 | Permanecem editáveis sem qualquer restrição |
Snapshot notaBackup | Não é preenchido (o if das linhas 1556/1583 de UdmMRC020NFORDEM.pas só executa quando o valor é 'A') |
Chamada a DesabilitaCampos | Não ocorre (UdmMRC020NFORDEM.pas linhas 946, 980 — só executa quando valor = 'N') |
Chamada a VerificaAlteracaoNota | Nã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 NOTA | Não ocorre |
Simulação passo a passo
- Em MFA001 → Faturamento → aba "Opção 2" → "Permite Alteração Cabeçalho Nota [MRC020]" = "Sim"
- Salve (F6)
- Em MRC020 abra uma Ordem de Carregamento e acione a geração de NF pela Ordem (abre
UMRC020NFORDEM) - 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
- 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 faz | Detalhe |
|---|---|
| Campos do cabeçalho | Permanecem 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 Salvar | Chama 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 confirmar | Executa 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 alterado | dsAutorizacao permanece vazio e a NF é salva sem pedir senha |
Simulação passo a passo
- Em MFA001 → Faturamento → aba "Opção 2" → "Permite Alteração Cabeçalho Nota [MRC020]" = "Sim (Com Autorização)"
- Salve (F6)
- Em MRC020 abra a Ordem de Carregamento e acione a geração de NF pela Ordem
- Na abertura, o sistema preenche
notaBackup(snapshot invisível com os valores originais vindos da Ordem) - Altere a Condição de Pagamento e o Vendedor nos campos do cabeçalho (os campos continuam editáveis visualmente)
- Clique em Salvar
- O sistema compara campo a campo contra
notaBackup→ detecta que Cond. Pagto e Vendedor mudaram → monta mensagem comDisplayLabelde ambos e abreTfrmAUTORIZACAO - Se o supervisor digitar senha e confirmar → a NF grava normalmente E o campo
NOTA.CD_AUTORIZADORrecebe o login do autorizador - Se clicar em Cancelar → exceção "Confirmação Cancelada!" e a NF não é gravada
- Repita: abra outra Ordem e não altere nenhum campo do cabeçalho → ao salvar,
dsAutorizacaofica 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 faz | Detalhe |
|---|---|
| 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ário | Cor de fundo $00EEEEEE (cinza claro) e cor da letra $009D6A00 — indicação visual de campo bloqueado |
| Cursor dos edits bloqueados | crDefault (não mostra seta de I-beam ao passar o mouse) |
| Campos ReadOnly ativos | tabNOTACD_PESSOA, tabNOTACD_VENDEDOR, tabNOTACD_ENDERECO, tabNOTACD_CONDPAGTO, tabNOTACD_FORMAPAGTO, tabNOTAPC_FATOR, tabNOTAVL_FATOR, tabNOTADT_FORNECEDOR, tabNOTADT_VENCIMENTO |
Chamada a VerificaAlteracaoNota / TfrmAUTORIZACAO | Não ocorre (a grade já está bloqueada, não há o que autorizar) |
| Momento do bloqueio | Executa 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
- Em MFA001 → Faturamento → aba "Opção 2" → "Permite Alteração Cabeçalho Nota [MRC020]" = "Não"
- Salve (F6)
- Em MRC020 abra a Ordem de Carregamento e acione a geração de NF pela Ordem
- Todos os campos do cabeçalho aparecem com fundo cinza (Pessoa, Endereço, Vendedor, Cond. Pagto, Forma Pagto, Fator, Vencimento, Data do Fornecedor)
- Tente clicar em qualquer um → não recebe foco; tentar digitar não tem efeito (o TField está ReadOnly)
- Clique em Salvar → a NF é gravada com os dados herdados da Ordem, sem qualquer alteração
- 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ção | Descrição | Campos do Cabeçalho (MRC020) editáveis? | Exige senha/autorização? | Grava CD_AUTORIZADOR? | Snapshot notaBackup criado? |
|---|---|---|---|---|---|
| S | Sim | Sim (livre) | Não | Não | Não |
| A | Sim (Com Autorização) | Sim | Sim (somente se algum campo de dicionarioCampos foi alterado) | Sim (quando confirmado) | Sim |
| N | Não | Não (ReadOnly + cor cinza) | Não (nada a alterar) | Não | Não |
Interação com ST_ALTERANOTA
ST_ALTERACABECALHONOTA e ST_ALTERANOTA parecem semelhantes mas atuam em camadas e módulos diferentes:
| Aspecto | ST_ALTERACABECALHONOTA (este documento) | ST_ALTERANOTA |
|---|---|---|
| Alcance | Somente formulário UMRC020NFORDEM (geração de NF pela Ordem da Recapadora) | MNF001, MNF002, MNF008, MPD011, MRC020NFORDEM (FormShow) |
| O que bloqueia | Campos 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 disparo | Sempre — qualquer NF gerada via UMRC020NFORDEM | Apenas quando a NF foi gerada a partir de Pedido |
| Valores | S (livre), A (com autorização), N (bloqueado) | S (somente venda), E (somente compra), T (ambos), N (livre) |
| Autorização | Possui modo 'A' com TfrmAUTORIZACAO e gravação de CD_AUTORIZADOR | Nã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.dfmlinhas 3907-3919 —Label92com caption "Permite Alteração Cabeçalho Nota [MRC020]"source/MFA001/UMFA001.dfmlinhas 4533-4560 — combocmbST_ALTERACABECALHONOTA: TwwDBComboBox(items'Sim' → S,'Sim (Com Autorização)' → A,'Não' → N)source/MFA001/UMFA001.paslinha 500 — declaraçãocmbST_ALTERACABECALHONOTA: TwwDBComboBoxsource/MFA001/UMFA001.paslinha 499 — declaraçãoLabel92: TLabelsource/MFA001/UdmMFA001.paslinha 264 —tabPARMFATURST_ALTERACABECALHONOTA: TStringFieldsource/MFA001/UdmMFA001.paslinha 558 —AfterInsert: valor padrão'N'source/MFA001/UdmMFA001.dfmlinhas 1866-1871 —FieldName = 'ST_ALTERACABECALHONOTA',FixedChar = True,Size = 1source/MFA001/UdmMFA001.dfmlinha 278 — SELECT principal da PARMFATUR incluindo o camposource/MFA001/UdmMFA001.dfmlinha 2436 — INSERT com colunaST_ALTERACABECALHONOTAsource/MFA001/UdmMFA001.dfmlinha 2608 — INSERT com parâmetro:ST_ALTERACABECALHONOTAsource/MFA001/UdmMFA001.dfmlinha 2858 — UPDATEST_ALTERACABECALHONOTA = :ST_ALTERACABECALHONOTAsource/MFA001/UdmMFA001.dfmlinha 3158 — SELECT alternativo (refresh) incluindo o campo
MRC020 - NF pela Ordem da Recapadora (único consumidor)
source/MRC020/UdmMRC020NFORDEM.paslinhas 17-19 — constantedicionarioCampos = 'CD_PESSOA, CD_ENDERECO, CD_VENDEDOR, CD_CONDPAGTO, CD_FORMAPAGTO, VL_FATOR, PC_FATOR, DT_VENCIMENTO, DT_FORNECEDOR'source/MRC020/UdmMRC020NFORDEM.paslinha 455 — declaraçãonotaBackup: TStrings(snapshot do cabeçalho para o modo'A')source/MRC020/UdmMRC020NFORDEM.paslinha 791 —notaBackup := TStringList.Createsource/MRC020/UdmMRC020NFORDEM.paslinhas 945-947 —//Kévin - Chamado: 153197+if (ParmFatur.Values['ST_ALTERACABECALHONOTA'] = 'N') then DesabilitaCampos;(primeiro caminho de montagem da NF)source/MRC020/UdmMRC020NFORDEM.paslinhas 979-981 — mesma verificação no caminho alternativosource/MRC020/UdmMRC020NFORDEM.paslinhas 1553-1566 —if (ParmFatur.Values['ST_ALTERACABECALHONOTA'] = 'A') then→ preenchenotaBackup.Values[FieldName]com os valores atuais detabNOTA(tratando string vazia como' ')source/MRC020/UdmMRC020NFORDEM.paslinhas 5871-5913 —procedure DesabilitaCampos: defineReadOnly := Trueem todos os TField do cabeçalho, cor de fundo$00EEEEEEe cor de letra$009D6A00nosTDBEdit(edtCD_PESSOA,edtCD_VENDEDOR,edtCD_ENDERECO,edtCD_CONDPAGTO,edtCD_FORMAPAGTO,edtVL_FATOR,edtDT_FORNECEDOR,edtDT_VENCIMENTO)source/MRC020/UMRC020NFORDEM.paslinha 362 — declaraçãoProcedure VerificaAlteracaoNotano contexto da classesource/MRC020/UMRC020NFORDEM.paslinha 841 — declaraçãofrmAUTORIZACAO : TfrmAUTORIZACAOsource/MRC020/UMRC020NFORDEM.paslinhas 945-967 — bloco do botão Salvar:if (ParmFatur.Values['ST_ALTERACABECALHONOTA'] = 'A') then VerificaAlteracaoNota();→ sedsAutorizacao <> ''criaTfrmAUTORIZACAO, chamaShowModal, emmrCanceldisparaJException W-0000 'Confirmação Cancelada!', caso contrário executaUPDATE NOTA SET CD_AUTORIZADOR = :LOGINsource/MRC020/UMRC020NFORDEM.paslinhas 2783-2803 —procedure VerificaAlteracaoNota: percorredicionarioCampos, comparatabNOTA.FieldList.Fields[i].AsStringcontranotaBackup.Values[Name]e acumulaDisplayLabeldos campos alterados emdsAutorizacao(separador#10)source/MRC020/UMRC020NFORDEM.paslinha 1383 —FreeAndNil(dmMRC020NFORDEM.notaBackup)após o commit da transação