Atualizar automaticamente datas na NFe SEFAZ no Protheus (sem retrabalho)

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.

Index

Categorias

Sobre o Autor

Foto do Autor
Fábio Hayama

Apaixonado por gestão, tecnologia e inovação, Fábio Hayama possui mais de 15 anos de experiência no universo do ERP Protheus, estratégia empresarial e automação de processos.

Leia mais sobre o Fábio

Entre em contato conosco

Veja mais artigos relacionados

TES Protheus: 7 erros fiscais
O Tipo de Entrada e Saída (TES) no Protheus é o principal apontador lógico que determina como uma operação será tratada do pont...
Como impedir o faturamento de cliente bloqueado no Protheus
Protheus
Protheus lento: 8 pontos que você deve verificar antes de culpar o servidor
Quando o Protheus fica lento a primeira reação de muita gente é apontar o dedo para o servidor: “É o servidor que está pesado”. Antes de abrir chamado e bate...
Estoque negativo no Protheus: onde procurar o problema?
Estoque negativo é um sintoma — não a causa — que indica divergência entre saldo contabilizado pelo sistema e o estoque lógico/operacional esperado. No Proth...