Ao executar sem depuração um relatório no VSCODE, surge erro na chamada da função pergunte()

Olá pessoal, Estou tentando pela primeira vez executar sem depuração (Ctrl+F5) no VSCODE um relatório desenvolvido em ADVPL. Aparece pra mim o erro quando chega na função pergunte():

variable does not exist CACESSO on VERSENHA(MSLIB.PRW)

Só encontrei no site da TOTVS algo relacionado, mas é pra quando se usa Schedule, o que não é o meu caso. https://centraldeatendimento.totvs.com/hc/pt-br/articles/360021145991-MP-ADVPL-Variable-does-not-exist-CACESSO-on-VERSENHA

Alguém já se deparou com isso e sabe a soluçãoerro chamada funcao pergunte.png ?

Boa tarde Vicente,

O erro está bem claro, a variável cAcesso não existe, é uma variável criada quando o ambiente é aberto, trata-se de uma variável já bem antiga do legado do Protheus.

Tente colocar o seu relatório dentro de um menu no Protheus para que o ambiente já esteja aberto, com todas as variáveis criadas e setadas, conexão com o banco etc.

Obs.: Esse erro não tem nenhuma relação com a utilização do VSCode.

Olá Daniel, então não é possível executar com ou sem depuração tais fontes via VSCODE ? Pergunto isso pois existe um legado que usa esta função. Como acabo de instalar o VSCODE, penso ser algo que falta configurar no mesmo.

Funções que fazem uso de dicionários, variáveis públicas, conexão com o banco de dados etc, todas precisam que o ambiente esteja aberto para funcionarem, logo precisam estar no menu de algum módulo ou que o ambiente seja aberto via RpcSetEnv, porém essa função deve ser utilizada quando não existe interface, ou seja, em threads de JOB. Você consegue executar essa função ou depurá-la normalmente ao colocar a mesma dentro de um menu do Protheus, só não conseguirá fazer a chamada dela diretamente, como função principal.

Ok Daniel. Esta é uma função antiga, funciona há tempos no menu do Protheus. Pelo que você explicou, a rotina de debug ou execução sem debug via VSCODE só será útil em poucos casos, certo ?

A execução pelo VSCode é a mesma coisa que chamada via Smartclient, logo, se a função só funciona dentro de um menu do Protheus, isso continuará sendo assim, a execução via VSCode não prepara o ambiente para execução, ela apenas executa o Smartclient com parâmetros para que a função seja executada sem exibir a telinha de confirmação do Smartclient, também envia parâmetros a mais quando é uma thread de debug.

Daniel, então até um relatório com classe TREPORT não funcionará, certo ?! Este foi o erro que recebi após tentar executar um outro relatório que possui a classe TREPORT: variable does not exist __AIMPRESS on GETIMPRESS(PROTHEUSFUNCTIONREPORT.PRW) 20/01/2020 17:01:16 line : 656

Quero entender o que está faltando pra poder usar a execução do smartclient com ou sem debug via VSCODE. Sem que seja para um código “Hello World!”, entende?!

Sim, um relatório não funcionaria, um fonte MVC, um AxCadatro… Nenhum deles, o que funcionaria seria uma função que exibe algo no console por exemplo… Pense que qualquer coisa que tenha dependências do Protheus, não vai funcionar.