No artigo de hoje, vamos ver uma tela que criamos, onde é possível resetar a senha de outros usuários, ideal para quem perdeu a senha do Administrador.
No artigo de ontem, citamos 2 situações envolvendo as senhas do Protheus, e demonstramos até em como resetar uma senha.
Mas pensando em facilitar ainda mais, criamos uma tela, onde é possível resetar senhas de usuários.
Então para rodar essa tela é bem simples, faça o seguinte procedimento:
- Baixe o fonte zAtuSenha, disponível no link citado alguns parágrafos acima (no artigo de ontem)
- Baixe o fonte abaixo (zNovSenha)
- Revise a linha do RPCSetEnv, coloque a empresa, filial, um usuário com privilégio de administrador e a senha desse usuário
- Compile os fontes, e no programa inicial executa u_zNovSenha, sem parênteses nem nada
- Será aberto uma tela, onde você pode digitar o login do usuário e a nova senha (se atente, que para o usuário Administrador, não irá funcionar se você colocar apenas admin ou Admin, tem que ser por extenso)
Abaixo um gif demonstrando como que ficou o funcionamento da tela (uma demonstrando falha e uma demonstrando sucesso):
E abaixo o código fonte da tela de redefinição de senhas (zNovSenha):
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} zNovSenha
Função para reset de senhas
@type function
@author Atilio
@since 04/11/2023
@version 1.0
@obs
O design dela foi baseada na clássica zLogin, disponível para download em https://terminaldeinformacao.com/2016/03/15/tela-de-autenticacao-customizada-protheus/
Verifique a empresa, a filial, o usuário e senha informados no RPCSetEnv
/*/
User Function zNovSenha()
//Se o ambiente não estiver preparado ainda
If Select("SX2") <= 0
//Faz o login
RPCSetEnv("99", "01", "daniel", "tst123", "", "")
//Aciona a tela do reset de senhas
fMontaTela()
//Senão, mostra mensagem de falha
Else
FWAlertError("Abra a função u_zNovSenha no programa inicial do sistema!", "Falha")
EndIf
Return
Static Function fMontaTela()
Local aArea := GetArea()
Local oGrpLog
Local oBtnConf
Private oDlgPvt
//Says e Gets
Private oSayUsr
Private oGetUsr, cGetUsr := Space(25)
Private oSayPsw
Private oGetPsw, cGetPsw := Space(20)
Private oGetObs, cGetObs := ""
//Dimensões da janela
Private nJanLarg := 200
Private nJanAltu := 200
//Criando a janela
DEFINE MSDIALOG oDlgPvt TITLE "Redinir Senha" FROM 000, 000 TO nJanAltu, nJanLarg COLORS 0, 16777215 PIXEL
//Grupo de Login
@ 003, 001 GROUP oGrpLog TO (nJanAltu/2)-1, (nJanLarg/2)-3 PROMPT "Informações: " OF oDlgPvt COLOR 0, 16777215 PIXEL
//Label e Get de Usuário
@ 013, 006 SAY oSayUsr PROMPT "Usuário:" SIZE 030, 007 OF oDlgPvt PIXEL
@ 020, 006 MSGET oGetUsr VAR cGetUsr SIZE (nJanLarg/2)-12, 007 OF oDlgPvt COLORS 0, 16777215 PIXEL
//Label e Get da Senha
@ 033, 006 SAY oSayPsw PROMPT "Senha:" SIZE 030, 007 OF oDlgPvt PIXEL
@ 040, 006 MSGET oGetPsw VAR cGetPsw SIZE (nJanLarg/2)-12, 007 OF oDlgPvt COLORS 0, 16777215 PIXEL PASSWORD
//Get de Log, pois se for Say, não da para definir a cor
@ 060, 006 MSGET oGetObs VAR cGetObs SIZE (nJanLarg/2)-12, 007 OF oDlgPvt COLORS 0, 16777215 NO BORDER PIXEL
oGetObs:lActive := .F.
//Botões
@ (nJanAltu/2)-18, 006 BUTTON oBtnConf PROMPT "Confirmar" SIZE (nJanLarg/2)-12, 015 OF oDlgPvt ACTION (fVldUsr()) PIXEL
oBtnConf:SetCss("QPushButton:pressed { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #dadbde, stop: 1 #f6f7fa); }")
ACTIVATE MSDIALOG oDlgPvt CENTERED
RestArea(aArea)
Return
Static Function fVldUsr()
Local lDeuCerto := .F.
Local cUsrAux := Alltrim(cGetUsr)
Local cPswAux := Alltrim(cGetPsw)
//Aciona a redefinição de senha
lDeuCerto := u_zAtuSenha(cUsrAux, cPswAux)
//Se deu tudo certo, o texto ficará em azul, senão ficará em vermelho
If lDeuCerto
cGetObs := "Senha redefinida com sucesso!"
oGetObs:setCSS("QLineEdit{color:#0000FF; background-color:#FEFEFE;}")
Else
cGetObs := "Falha ao definir a senha!"
oGetObs:setCSS("QLineEdit{color:#FF0000; background-color:#FEFEFE;}")
EndIf
oGetObs:Refresh()
Return
Pessoal, apenas uma observação importante, tentem utilizar o Configurador para redefinir senhas, pois lá estará toda a integridade dos dados. Esse procedimento citado no artigo, é apenas para simulações, por exemplo, em uma base de testes. Inclusive se você precisar redefinir a senha do Admin, a TOTVS recomenda seguir o procedimento nesse link – https://centraldeatendimento.totvs.com/hc/pt-br/articles/360031739273-MP-FRAME-Reset-de-Senha-do-Admin-com-Dicion%C3%A1rio-no-Banco
Bom pessoal, por hoje é só.
Abraços e até a próxima.

Faltou essa rotina -> U_ZATUSENHA
Bom dia Breno, tudo joia?
Conforme citado no tópico 1, logo no começo desse artigo, nessa parte aqui: “No artigo de ontem, cit…”, a parte do “artigo de ontem”, esta o link que contém a função zAtuSenha para download.
Um grande abraço.
Eu criei… só que mudei o nome para U_FATUSENHA. Criei usando o fonte que disponibilizou no link (https://terminaldeinformacao.com/2023/11/17/conheca-brechas-de-seguranca-do-protheus-e-como-preveni-las/?unapproved=7874&moderation-hash=9ac517796a46e710930a225e94aa60e4#comment-7874), Assunto 2
Bom dia Breno, tudo joia?
Ah sim, entendi.
Quanto ao mudar o nome, pode modificar sim ^^.
Tenha um ótimo e abençoado feriado e fim de semana.
Um grande abraço.
Ainda funcionando, muito obrigado Atilio!
Bom dia Bruno, tudo joia?
Opa, obrigado pelo feedback.
Tenha uma ótima e abençoada terça feira.
Um forte abraço.
Bom dia, como faço na versão 24.10, via web?
Bom dia Fábio, tudo joia?
Segue um vídeo de exemplo, funcionando na 2410: https://terminaldeinformacao.com/2025/08/26/como-fazer-para-que-a-senha-de-um-usuario-nunca-expire-no-protheus-ti-responde-0180/
Tenha uma ótima e abençoada sexta feira.
Um forte abraço.