Dicas de como identificar um problema intermitente no Protheus

No artigo de hoje, vamos trazer 3 dicas de como identificar um problema intermitente no Protheus.

Muitas das vezes, nos deparamos com problemas no ERP, e pode ser alguma customização ou pode ser algo no padrão. Os 3 procedimentos abaixo, visam identificar o que pode estar ocasionando esse tipo de problema, existem ainda alguns outros, mas geralmente esses já dão um caminho legal para descobrir.

Então vamos ao primeiro.

 

1. Desativar customizações com IXBLOG

O primeiro passo é descobrir se é algo no padrão ou customização, para isso, existe o recurso IXBLOG, onde nós podemos dizer para não executar as customizações (NORUN) ou executar e gravar um log por onde esta passando (LOGRUN).

 

Para ativar esse recurso, no seu appserver.ini, na seção do ambiente em questão, adicione o IXBLOG e na frente, qual comando NORUN ou LOGRUN, similar ao trecho abaixo:

 

[AMBTST]
SourcePath=C:\TOTVS\ERP\Protheus\apo
RootPath=C:\TOTVS\ERP\Protheus_Data
StartPath=\system\
RPOCustom=C:\TOTVS\ERP\Protheus\apo\mycustom.rpo
RpoDb=top
RpoLanguage=Portuguese
RpoVersion=120
Trace=0
TopMemoMega=1
DBAlias=PROTHEUS
DBServer=localhost
DBDatabase=MSSQL
DBPort=7890
StartSysInDB=1
IXBLOG=NORUN

 

Se o problema sanar, ai é customização. Rode com o IXBLOG=LOGRUN, e dentro da Protheus Data, terá uma pasta chamada ixblog, analise as funções chamadas e corrija suas customizações.

 

Já se o problema continuar, ai pode ser algo no padrão, então vamos seguir para o segundo procedimento.

 

2. Atualize LIB, acumulados, etc

Pode ser que o problema que você está passando já tenha correção, para isso, faça uma base de testes baseada na que esta dando o problema e aplique as atualizações mais recentes.

 

Aplique por exemplo a LIB, patchs acumuladas de módulos e faça uma bateria de testes.

 

Se mesmo assim o problema persistir, ainda tem um terceiro procedimento.

 

3. Grave log do que deseja monitorar

Se já foi isolado customização com o IXBLOG e já foi foi isolado o padrão com atualização, pode ser os dados das rotinas que estejam impactando.

 

Para esse caso, podemos monitorar de um modo simples, gravando o log de onde os registros estão posicionados ou qual é o conteúdo dos parametros.

 

Supondo que nós queremos monitorar as tabelas SF2, SA2, SD2 e SE1 e o parâmetro MV_ESTNEG, então iremos montar uma função que grava uma mensagem na protheus data, com esses conteúdos:

User Function zGravaLog(cOnde)
    Local aArea := FWGetArea()
    Local cMensagem := ""
 
    //Grava um log com dados da rotina
    cMensagem := "Data:     " + dToC(Date())            + CRLF
    cMensagem += "Hora:     " + Time()                  + CRLF
    cMensagem += "Usuário:  " + UsrRetName(RetCodUsr()) + CRLF
    cMensagem += "Ambiente: " + GetEnvServer()          + CRLF
    cMensagem += "--" + CRLF
 
    //Monta a mensagem com as tabelas posicionadas e com os parametros
    cMensagem += "SF2: " + cValToChar(SF2->(RecNo())) + CRLF
    cMensagem += "SA1: " + cValToChar(SA1->(RecNo())) + CRLF
    cMensagem += "SD2: " + cValToChar(SD2->(RecNo())) + CRLF
    cMensagem += "SE1: " + cValToChar(SE1->(RecNo())) + CRLF
    cMensagem += "MV_ESTNEG: " + GetMV("MV_ESTNEG")   + CRLF
 
    //Grava a mensagem
    MemoWrite("\_pasta_dentro_da_pdata\" + cOnde + "_" + dToS(Date()) + "_" + StrTran(Time(), ":", "-") + ".txt", cMensagem)
     
    FWRestArea(aArea)
Return

Agora, você terá que criar pontos de entrada, e o ideal é acionar essa função de logo, sempre no começo do fonte e no final, por exemplo:

User Function M460FIM()
    Local aArea := ...
 
    //Aciona para gravar o log no começo
    u_zGravaLog(SF2->F2_DOC, "M460FIM_COMECO")
 
    //sua customização
 
    //Aciona para o gravar o log no fim
    u_zGravaLog(SF2->F2_DOC, "M460FIM_TERMINO")
 
    FWRestArea(....
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação