Se você usa o Protheus no dia a dia, já sabe como funciona.
Você abre a tela da NFe SEFAZ…
E lá vai você ajustar data manualmente de novo.
Pode parecer detalhe, mas isso acontece todos os dias.
E quando soma no tempo da operação, vira retrabalho puro.
Foi exatamente esse cenário que vimos em um cliente.
E a pergunta foi direta:
“Tem como abrir a tela já com as datas atualizadas automaticamente?”
A resposta é: tem sim.
E sem gambiarra.
O problema por trás disso
A rotina padrão da NFe SEFAZ não traz inteligência nos parâmetros.
Ou seja:
- Cada usuário define o filtro do jeito que quiser
- Datas ficam desatualizadas
- Consultas podem sair inconsistentes
- E o time perde tempo ajustando sempre a mesma coisa
Agora imagina isso rodando em escala.
Você começa a ter:
- Falta de padrão
- Erro humano
- Perda de produtividade
A ideia da solução
Aqui a lógica foi simples:
Interceptar a execução da rotina e já entrar com os parâmetros certos.
No nosso caso:
- Sempre buscar os últimos 3 dias
- Sem depender do usuário lembrar disso
Ou seja, a tela já abre pronta para uso.
Como fizemos isso
Usamos o ponto de entrada ChkExec, que é acionado quando o usuário executa uma rotina.
A lógica é:
- Identificar se a rotina chamada é a NFe SEFAZ (SPEDNFE)
- Se for, rodar uma função que ajusta os parâmetros automaticamente
Código do ChkExec
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function ChkExec
Ponto de Entrada acionado ao clicar em alguma opção no menu
@type Function
@author Atilio
@since 16/10/2025
@see https://tdn.totvs.com/display/public/framework/CHKEXEC+-+Dispara+ponto+de+entrada
/*/
User Function ChkExec()
Local lContinua := .T.
Local cFuncao := Upper(ParamIXB)
//Se for a função NFE Sefaz
If ("SPEDNFE" $ cFuncao) .And. ! IsBlind()
u_zAtuParNfe()
EndIf
Return lContinua
O que esse trecho faz
Aqui não tem mistério:
- Captura a função executada
- Verifica se é a SPEDNFE
- Se for, chama a customização
Sem impacto em outras rotinas.
Sem risco de efeito colateral.
A customização
Aqui é onde realmente resolvemos o problema.
A função abaixo define os parâmetros automaticamente antes da tela abrir.
Código da zAtuParNfe
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} zAtuParNfe
Função para atualizar as datas de emissão de/até na tela de parâmetros da tela NFe Sefaz
@type user function
@author Atilio
@since 02/03/2026
@obs Similar ao SetMvValue, mas usando ParamSave pois é um ParamBox
/*/
User Function zAtuParNfe()
Local aArea := FWGetArea()
Local cGrupo := FWGrpCompany()
Local cFil := FWCodFil()
Local cLoadName := "SPEDNFE" + cGrupo + cFil
Local aRespostas := {}
Local aBackup := NgSalvaMvPa()
//Define as respostas
aRespostas := Array(5)
aRespostas[01] := "1-Saída " //Tipo NFe
aRespostas[02] := "2-Sem filtro " //Filtra
aRespostas[03] := "1 " //Série
aRespostas[04] := DaySub(Date(), 3) //Data De
aRespostas[05] := Date() //Data Até
//Define agora nos MV_PAR
MV_PAR01 := aRespostas[01]
MV_PAR02 := aRespostas[02]
MV_PAR03 := aRespostas[03]
MV_PAR04 := aRespostas[04]
MV_PAR05 := aRespostas[05]
//Atualiza os parâmetros em memória
ParamSave(cLoadName, aRespostas, "1")
NgRetAuMVPa(aBackup)
FWRestArea(aArea)
Return
O que isso resolve na prática
Não é só sobre automatizar data.
Você passa a ter:
- Padronização no uso da rotina
- Menos erro humano
- Mais agilidade no dia a dia
- Mais confiabilidade nas consultas
E isso escala muito rápido dentro da operação.
Um detalhe importante
Aqui usamos ParamSave — e isso faz diferença.
Como a tela trabalha com ParamBox, essa é a forma correta de persistir os valores.
Se fizer diferente, pode ter comportamento inconsistente.
Onde você pode aplicar isso
Esse padrão não serve só para NFe.
Dá pra aplicar em:
- Pedido de venda
- Financeiro
- Relatórios
- Integrações
- Qualquer rotina com ParamBox
Ou seja, você começa com um ajuste simples…
E quando vê, melhorou a operação inteira.
O ponto que pouca gente fala
Isso aqui não é sobre código.
É sobre maturidade.
Operação que cresce:
- Não depende de usuário lembrar processo
- Não aceita retrabalho como padrão
- Automatiza o que é repetitivo
E o Protheus permite isso — só precisa usar direito.




