FISMNTNFE.PRW
Ponto de entrada do monitor de NF-e SEFAZ - auditoria de consultas e controle de "Refresh"
Dados da customização
Analista responsável: Jonathan Torioni
Especificação da customização
Esta customização é um ponto de entrada disparado pelo monitor de NF-e SEFAZ logo após uma consulta de chave de acesso. Tem dois objetivos:
- Auditar a consulta gravando o retorno da SEFAZ (código + mensagem) na tabela
LEGBRANCA, utilizada para evitar a rejeição 656 - Consumo Indevido. Quando o registro já existe, é apenas atualizado o timestamp e os campos de retorno. - Controlar o uso do botão Refresh no browse do monitor, impedindo que o usuário acione consultas em intervalos inferiores a 60 segundos. Caso o usuário tente, é exibido um diálogo modal com aviso e contador de 60 segundos.
Especificação de tabelas e índices
- LEGBRANCA - Tabela customizada de auditoria de consultas SEFAZ (consultada e gravada via
U_INS656,U_CON656,U_STMPUPD).
Especificação de parâmetros
- ES_AUDLEG - Parâmetro lógico que habilita a auditoria/gravação na tabela
LEGBRANCA. Quando.F., o ponto de entrada retorna sem fazer nada.
Especificação das funções
-
U_FISMNTNFE - Ponto de entrada principal disparado pelo monitor
nfesefaz. Recebe viaPARAMIXBa chave consultada (doc/série) e o retorno da SEFAZ (cCodRet,cRetSef). CasoES_AUDLEGesteja habilitado, valida viaU_CON656se o registro já existe naLEGBRANCA. Em caso negativo grava o registro comU_INS656; em caso positivo atualiza comU_STMPUPD. Em seguida, identifica viaProcName()se a chamada veio do botão Refresh e, em caso afirmativo, valida o intervalo de 60 segundos entre cliques. Se a janela tiver sido aberta dentro do intervalo, exibe o modal de aguardo (fismntmg). -
fismntmg - Função estática que exibe um
FWDialogModal()modal não fechável pelo usuário com a mensagem de aguardo. O modal é encerrado automaticamente apósnSegundosviaSetTimer. Recebe parâmetros opcionaiscMensagem,cTituloenSegundos(default 3).
Este ponto de entrada utiliza a variável Static cUltTempo para manter o controle do último clique do Refresh entre execuções sucessivas dentro da mesma sessão.
A identificação do clique no botão Refresh é feita inspecionando a pilha de execução via ProcName() procurando pela string "ALISTBOX:=GETLISTBOX(".