Você já precisou exibir mensagens de teste durante um programa? Conheça a função ShowLog.
Já vi alguns usuários testando exibindo mensagens durante o desenvolvimento de alguma rotina, ou até mesmo de alguma query.
No artigo de hoje, vou mostrar uma dica, de como exibir com a função ShowLog, e somente se for um administrador.
Então por exemplo, supondo que eu tenha uma query e use a função, o resultado seria similar a abaixo:
Abaixo o trecho desenvolvido:
//...
//Montagem da Query
cQuery := " SELECT * FROM " + RetSQLName("SBM") + " SBM WHERE BM_FILIAL = '" + FWxFilial("SBM") + "' AND SBM.D_E_L_E_T_ = ' '"
//Se o usuário estiver no grupo de administradores, mostra a query SQL
If FWIsAdmin()
ShowLog(cQuery)
EndIf
//...
Update Dezembro de 2022:
Pensando em facilitar, criamos uma função chamada zViewQry, onde basta você aciona-la logo após criar sua variável, por exemplo, u_zViewQry(cQuery), que ela já aciona o ShowLog e já faz os testes necessários se o usuário é administrador. Abaixo o código fonte completo:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zViewQry
Função para visualizar a query caso o usuário seja administrador
@type Function
@author Atilio
@since 10/10/2022
@param cQuery, Caractere, Consulta SQL que poderá ser exibida
/*/
User Function zViewQry(cQuery)
Default cQuery := ""
//Somente se
// #1 - Não estiver em execução automática
// #2 - A variável da query tiver dados
// #3 - For usuário Administrador
// #4 - For confirmado a pergunta para visualizar a query
If ! IsBlind() .And. ! Empty(cQuery) .And. FWIsAdmin() .And. FWAlertYesNo("Deseja visualizar a query?", "Atenção (" + FunName() + ")")
ShowLog(cQuery)
EndIf
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.

Também existe a função AtShowLog, que possuí alguns parâmetros a mais.
@param cTexto, caracter: (LOG a ser exibido)
@param cTitulo, caracter: Título da tela de LOG de processamento
@param lVScroll, lógico: habilita ou não a barra de scroll vertical
@param lHScroll, lógico: habilita ou não a barra de scroll horizontal
@param lPermiteCancelar, lógico: habilita a quebra de linha automática ou não, obedecendo ao tamanho da caixa de texto do log
@return retorna .T. se usuário clicou no botão confirmar, retorna .F. se clicou em cancelar
AtShowLog(cTexto,cTitulo,lVScroll,lHScroll,lWrdWrap,lPermiteCancelar)
Fala Sully, tudo joia?
Opa, obrigado pelo comentário e adendo.
Essa AtShowLog, interessante ela ter mais parâmetros e recursos, depois vou fazer alguns testes com ela.
Tenha uma ótima e abençoada sexta feira.
Um forte abraço.