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_AUDITAMNF017Valor padrão:N(Não audita) — campo não é inicializado noAfterInsertdeTdmMFA001.tabPARMFATURAfterInsertemUdmMFA001.pas, ficando nulo/vazio (tratado como "Não").
Telas impactadas
| Módulo | Código | Descrição |
|---|---|---|
| PDV / Caixa Rápido | MNF017 | Tela de caixa/PDV que consome este parâmetro. É a única tela cujo comportamento muda. |
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_AUDITAMNF017 | S = 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,BeforeDeleteetc. - 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 faz | Detalhe |
|---|---|
frmMNF017.stAudita | True após o FormShow |
| Efeito | Todas 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 arquivo | Data/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 performance | Escrita 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
- Vá em MFA001 → Parâmetros → Ambos → Opção 1 → "Auditar Operações de Venda [MNF017]" = Sim
- Salve os parâmetros (F6)
- Abra a MNF017 com um usuário qualquer
- Informe o consumidor final, adicione alguns produtos e finalize o cupom/nota
- Saia da tela
- Abra a pasta
<instalação>\Arquivos\Logs\no servidor/estação - Localize o arquivo
DD-MM-AAAA <CD_USUARIO> MNF017.file - 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 faz | Detalhe |
|---|---|
frmMNF017.stAudita | False após o FormShow |
| Efeito | Todos os if (frmMNF017.stAudita) falham — AuditaTela nunca é chamada |
| Arquivo gerado | Nenhum arquivo .file é criado por esta tela |
| Impacto em performance | Zero (execução normal do PDV) |
Simulação passo a passo
- Vá em MFA001 → Parâmetros → Ambos → Opção 1 → "Auditar Operações de Venda [MNF017]" = Não
- Salve os parâmetros (F6)
- Abra a MNF017 e execute uma venda completa
- 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ção | Descrição | frmMNF017.stAudita | Arquivo .file gerado? | Chamadas a AuditaTela? | Uso recomendado |
|---|---|---|---|---|---|
| S | Sim | True | Sim (1 por usuário/dia) | Sim | Apenas em diagnóstico / investigação de problema pontual no PDV |
| N (padrão) | Não | False | Não | Não | Operaçã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\Logsquando a auditoria estiver ligada. - O
TRY/EXCEPTdoAuditaTela(emjAuditoria.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
| Arquivo | Linha(s) | Uso |
|---|---|---|
source/MFA001/UMFA001.dfm | 3491-3517 | ComboBox cmbST_AUDITAMNF017 (Items Sim=S / Não=N, DataField = 'ST_AUDITAMNF017') |
source/MFA001/UMFA001.dfm | 2624 | Label Caption = 'Auditar Operações de Venda [MNF017]' |
source/MFA001/UMFA001.pas | 554 | Declaração cmbST_AUDITAMNF017: TwwDBComboBox |
source/MFA001/UdmMFA001.dfm | 290, 1969-1972, 2875, 3170 | SELECT/UPDATE do PARMFATUR e TStringField tabPARMFATURST_AUDITAMNF017 |
source/MFA001/UdmMFA001.pas | 282 | Declaração do campo persistente tabPARMFATURST_AUDITAMNF017 |
source/MFA001/UdmMFA001.pas | 434+ (tabPARMFATURAfterInsert) | Não inicializa o campo — padrão efetivo é nulo/vazio (= "Não") |
source/MNF017/UMNF017.pas | 91 | Declaração frmMNF017.stAudita: Boolean |
source/MNF017/UMNF017.pas | 166 | Parâmetro incluído no SELECT de parâmetros do faturamento (índice 35 do resultado) |
source/MNF017/UMNF017.pas | 209 | frmMNF017.stAudita := SeSenao(Resultado[35] = 'S', true, false); |
source/MNF017/UMNF017.pas | 520, 612, 622, 634, 677, 754, 768, 789, 808, 834, 893, 1624, 2419, 2608, 2690 | Verificaçõ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.pas | 3403, 3467, 3473, 3479, 3485, 3491, 3497 | Verificações nos eventos BeforePost/BeforeDelete de tabPARCELA, tabLOGIN, tabCABECALHO, Produto |
source/jCommon/jAuditoria.pas | 11-91 | Implementaçã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.