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.