Pular para o conteúdo principal

Auditar Operações de Venda [MNF017]

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Ambos → Opção 1 → "Auditar Operações de Venda [MNF017]" Tabela: PARMFATUR.ST_AUDITAMNF017 Valor padrão: N (Não audita) — campo não é inicializado no AfterInsert de TdmMFA001.tabPARMFATURAfterInsert em UdmMFA001.pas, ficando nulo/vazio (tratado como "Não").

Telas impactadas​

MóduloCódigoDescrição
PDV / Caixa RápidoMNF017Tela de caixa/PDV que consome este parâmetro. É a única tela cujo comportamento muda.

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_AUDITAMNF017S = habilita geração de arquivo de log de auditoria da tela MNF017; qualquer outro valor (inclusive N ou vazio) = desabilita
frmMNF017.stAudita (memória)Flag booleana carregada no FormShow a partir de ST_AUDITAMNF017 (= 'S'); controla chamadas a AuditaTela

Onde e como é carregado​

No FormShow da MNF017, o parâmetro é lido junto com os demais parâmetros de faturamento e convertido em booleana:

// source\MNF017\UMNF017.pas (linha 166)
' P.ST_IMPORTACAOMRE005MNF017, P.ST_UTILIZABALANCA, P.ST_AUDITAMNF017, ...'

// source\MNF017\UMNF017.pas (linha 209)
frmMNF017.stAudita := SeSenao(Resultado[35] = 'S', true, false);

A flag stAudita é então verificada em dezenas de pontos da MNF017 antes de cada chamada a AuditaTela (definida em source/jCommon/jAuditoria.pas), que grava um arquivo texto em <sessao.path>\Arquivos\Logs\<DD-MM-AAAA> <CD_USUARIO> MNF017.file.

Conteúdo registrado por AuditaTela (quando ativo):

  • Clique em botões (TToolButton/TButton/TBitBtn/TSpeedButton) da tela
  • Abertura/destruição do form (FormClose, FormDestroy)
  • Estado de datasets (TFDQuery/TClientDataSet) — dump de todos os campos do registro corrente antes de BeforePost, BeforeDelete etc.
  • Marcos do processo de venda: "Inicio Nova Insercao", "Iniciando Gravacao no Banco de Dados", "Nota Salva com Sucesso!", alterações em itens

Opções disponíveis​

S - Sim (Auditar operações da MNF017)​

O que fazDetalhe
frmMNF017.stAuditaTrue após o FormShow
EfeitoTodas as chamadas if (frmMNF017.stAudita) then AuditaTela(...) passam a gravar linhas no arquivo de log
Arquivo gerado<sessao.path>\Arquivos\Logs\<DD-MM-AAAA> <CD_USUARIO> MNF017.file (criado no 1º evento do dia por usuário e anexado a partir daí)
Conteúdo do arquivoData/hora + nome do componente clicado ou classe do form + ação + dump de campos dos datasets nos eventos BeforePost/BeforeDelete de tabPARCELA, tabLOGIN, tabCABECALHO, produto e item da nota
Impacto em performanceEscrita de arquivo texto síncrona em quase todo clique e toda alteração de grid — use apenas em diagnóstico

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Ambos → Opção 1 → "Auditar Operações de Venda [MNF017]" = Sim
  2. Salve os parâmetros (F6)
  3. Abra a MNF017 com um usuário qualquer
  4. Informe o consumidor final, adicione alguns produtos e finalize o cupom/nota
  5. Saia da tela
  6. Abra a pasta <instalação>\Arquivos\Logs\ no servidor/estação
  7. Localize o arquivo DD-MM-AAAA <CD_USUARIO> MNF017.file
  8. Abra com qualquer editor de texto

Resultado esperado: O arquivo contém linhas cronológicas como:

16/04/2026 10:32:15 TfrmMNF017 FormShow
16/04/2026 10:32:28 Clicado: btnNovo Inicio Nova Insercao
16/04/2026 10:32:45 Dados (Metodo: ProdutoBeforePost): CD_ITEM = 1501, QT_ITEM = 2, VL_UNITARIO = 25.00, ...
16/04/2026 10:33:02 Clicado: btnSalvar
16/04/2026 10:33:04 Clicado: btnSalvar Nota Salva com Sucesso!
16/04/2026 10:33:10 TfrmMNF017 Destroy

N - Não (Não auditar)​

O que fazDetalhe
frmMNF017.stAuditaFalse após o FormShow
EfeitoTodos os if (frmMNF017.stAudita) falham — AuditaTela nunca é chamada
Arquivo geradoNenhum arquivo .file é criado por esta tela
Impacto em performanceZero (execução normal do PDV)

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Ambos → Opção 1 → "Auditar Operações de Venda [MNF017]" = Não
  2. Salve os parâmetros (F6)
  3. Abra a MNF017 e execute uma venda completa
  4. Abra a pasta <instalação>\Arquivos\Logs\

Resultado esperado: Nenhum arquivo <data> <usuario> MNF017.file é criado pela operação. Esta é a configuração recomendada para uso rotineiro em produção.


Tabela Comparativa Resumida​

OpçãoDescriçãofrmMNF017.stAuditaArquivo .file gerado?Chamadas a AuditaTela?Uso recomendado
SSimTrueSim (1 por usuário/dia)SimApenas em diagnóstico / investigação de problema pontual no PDV
N (padrão)NãoFalseNãoNãoOperação normal em produção

Observações técnicas​

  • O parâmetro só tem efeito dentro da MNF017. Nenhum outro módulo (MNF002, MPD002, MPD018, etc.) consulta ST_AUDITAMNF017. Para auditar outras telas é necessário implementar suporte específico em cada uma.
  • A escrita é feita linha a linha em arquivo texto, sem rotação nem compactação. Em dias de uso intenso o arquivo pode crescer bastante — avalie limpeza periódica da pasta Arquivos\Logs quando a auditoria estiver ligada.
  • O TRY/EXCEPT do AuditaTela (em jAuditoria.pas) engole todas as exceções silenciosamente — se a pasta estiver sem permissão de escrita, a auditoria falha sem avisar o usuário, mas também não derruba a venda.
  • O valor é lido apenas no FormShow. Alterar o parâmetro no MFA001 com a MNF017 já aberta não muda o comportamento da instância corrente — é preciso fechar e reabrir a MNF017.

Referências no Código Fonte​

ArquivoLinha(s)Uso
source/MFA001/UMFA001.dfm3491-3517ComboBox cmbST_AUDITAMNF017 (Items Sim=S / Não=N, DataField = 'ST_AUDITAMNF017')
source/MFA001/UMFA001.dfm2624Label Caption = 'Auditar Operações de Venda [MNF017]'
source/MFA001/UMFA001.pas554Declaração cmbST_AUDITAMNF017: TwwDBComboBox
source/MFA001/UdmMFA001.dfm290, 1969-1972, 2875, 3170SELECT/UPDATE do PARMFATUR e TStringField tabPARMFATURST_AUDITAMNF017
source/MFA001/UdmMFA001.pas282Declaração do campo persistente tabPARMFATURST_AUDITAMNF017
source/MFA001/UdmMFA001.pas434+ (tabPARMFATURAfterInsert)Não inicializa o campo — padrão efetivo é nulo/vazio (= "Não")
source/MNF017/UMNF017.pas91Declaração frmMNF017.stAudita: Boolean
source/MNF017/UMNF017.pas166Parâmetro incluído no SELECT de parâmetros do faturamento (índice 35 do resultado)
source/MNF017/UMNF017.pas209frmMNF017.stAudita := SeSenao(Resultado[35] = 'S', true, false);
source/MNF017/UMNF017.pas520, 612, 622, 634, 677, 754, 768, 789, 808, 834, 893, 1624, 2419, 2608, 2690Verificações if (frmMNF017.stAudita) then AuditaTela(...) em botões (Salvar, Excluir, Novo, Procurar, Limpar, Sair, Importação MRE005), FormClose, FormDestroy e gravação
source/MNF017/UdmMNF017.pas3403, 3467, 3473, 3479, 3485, 3491, 3497Verificações nos eventos BeforePost/BeforeDelete de tabPARCELA, tabLOGIN, tabCABECALHO, Produto
source/jCommon/jAuditoria.pas11-91Implementação de AuditaTela — gera <sessao.path>\Arquivos\Logs\<data> <usuario> <tela>.file

SQL/Procedures: Nenhuma referência encontrada em Scripts/ — o parâmetro é consumido exclusivamente no lado Delphi/cliente, não há stored procedure que dependa dele.