GetAutoGRLog com erro

Bom dia, GetAutoGRLog() esta vazio, mas o MostraErro() vem com informações, Já viram o problema ou sabe como resolver?

Olá Thiago. Para que a função GetAutoGRLog funcione, é preciso que os erros estejam em Array. Você faz isso declarando antes do ExecAuto esta variável:

private lAutoErrNoFile:= .T.

Eu costumo usar algo assim:


Local cDetalhe:= ""

Private lMsErroAuto   := .F.
Private lMsHelpAuto   := .F.
Private lAutoErrNoFile:= .T.

aDados:= FWVetByDic( aDados, "SA1", /*lItens*/, /*nCpoPos*/ )

MsExecAuto( {|x,y| MATA030(x,y) }, aDados, If(lIncCli, 3, 4) )

If lMsErroAuto
    cLog:= "Erro ao cadastrar/alterar o cliente " + cCodCli + "-" + cLojCli + ": " + CRLF
    aEval(GetAutoGrLog(), {|x| cDetalhe+= x + CRLF })
    lRet:= .F.
EndIf

aLog := GetAutoGRLog()
cErro := “”
For nY := 1 To Len(aLog)
conout(“entrou na geracao do log”)
If !Empty(cErro)
cErro += CRLF
EndIf
cErro += aLog[nY]
conout(cErro)
MemoWrite("C:\TEMP", aLog[nY])
Next nY*/

Estou tratando, mas a rotina retorna o array vazio, mesmo existindo o erro para o execauto do fina050

Mesmo colocando o lAutoErrNoFile:= .T. antes do ExecAuto?

A MostraErro só tem dados quando esta variável está .F. (comportamento padrão), já a GetAutoGrLog() só retorna alguma coisa quando está .T..

As duas se anulam. Tem que cuidar também pra não ter algum outro PE ou função padrão mesmo mexendo nessa variável durante o execauto, ou mesmo chamando uma das funções durante o processo. A MostraErro e a GetAutoGrLog não só exibem o erro, como também limpam o cache do mesmo, por isso não tem como usar em conjunto, nem usar duas vezes elas na mesma execução.

Já peguei casos de ponto de entrada que chama um outro execauto abaixo, e daí desconfigura as variáveis e limpa os caches destas rotinas de erro.