Erro na lib: 25-02-24-LIB_LABEL_24022025_P12_ONCA

Após atualizar para a lib, 25-02-24-LIB_LABEL_24022025_P12_ONCA ocorre o erro abaixo ao cadastrar produtos: (voltei a versão da lib e o erro não ocorreu mais).

THREAD ERROR ([14848], Jalielison Alves, TATICCASPNB0021) 26/02/2025 11:54:15
DBRUnlock cannot be called in a transaction on MSRUNLOCK(APLIB060.PRW) 20/02/2025 09:42:44 line : 1068

[TOTVS build: 7.00.240223P-20241115]
Called from MPUSERCOMMIT(PROTHEUSFUNCTIONMVC.PRX) 20/02/2025 09:42:51 line : 6216
Called from FWUSERACCOUNT:COMMONAUTHENTICATION(FWUSERACCOUNT.PRX) 20/02/2025 09:42:43 line : 1951
Called from MPUSERACCOUNT:COMMONAUTHENTICATION(MPUSERACCOUNT.PRX) 20/02/2025 09:42:49 line : 1855
Called from FWUSERACCOUNT:AUTHENTICATION(FWUSERACCOUNT.PRX) 20/02/2025 09:42:43 line : 571
Called from MPUSERACCOUNT:AUTHENTICATION(MPUSERACCOUNT.PRX) 20/02/2025 09:42:49 line : 186
Called from FWGETMNUFILE(FWGETMNUFILE.PRW) 20/02/2025 09:42:51 line : 24
Called from U_XXLOG(BKLOGS.PRW) 27/01/2025 10:51:37 line : 143
Called from U_MSGLOG(BKLOGS.PRW) 27/01/2025 10:51:37 line : 73
Called from U_LOGMVC(BKLOGS.PRW) 27/01/2025 10:51:37 line : 383
Called from HISTLOG(MATA010_PE.PRW) 26/04/2024 15:30:51 line : 195
Called from MYFTTSPRE(MATA010_PE.PRW) 26/04/2024 15:30:51 line : 170
Called from U_ITEM(MATA010_PE.PRW) 26/04/2024 15:30:51 line : 137
Called from EXECBLOCK(APLIB190.PRW) 20/02/2025 09:42:44 line : 179
Called from EXFORMCOMMIT(PROTHEUSFUNCTIONMVC.PRX) 20/02/2025 09:42:51 line : 2040
Called from FWFORMCOMMIT(PROTHEUSFUNCTIONMVC.PRX) 20/02/2025 09:42:51 line : 1791
Called from {||FWFORMCOMMIT(SELF)}(MPFORMMODEL.PRX) 20/02/2025 09:42:49 line : 119
Called from FWFORMMODEL:COMMITDATA(FWFORMMODEL.PRX) 20/02/2025 09:42:49 line : 2304
Called from FWFORMVIEW:BUTTONOKACTION(FWFORMVIEW.PRW) 20/02/2025 09:42:49 line : 2234
Called from {||SELF:BUTTONOKACTION( LISOWNERDLG )}(FWFORMVIEW.PRW) 20/02/2025 09:42:49 line : 2091
Called from SAFEEVAL(MSLIB.PRW) 20/02/2025 09:42:49 line : 7086
Called from {|| SAFEEVAL( {||SELF:BUTTONOKACTION( LISOWNERDLG )} ) }(FWFORMVIEW.PRW) 20/02/2025 09:42:49 line : 2091
Called from {|| EVAL(BOK,SELF:OFWFORMVIEW) }(FWFORMBAR.PRW) 20/02/2025 09:42:49 line : 416
Called from ::MSDIALOG:ACTIVATE
Called from FWMVCWINDOW:SHOW(FWMVCPRW) 20/02/2025 09:42:49 line : 189
Called from FWMVCWINDOW:ACTIVATE(FWMVCPRW) 20/02/2025 09:42:49 line : 215
Called from FWVIEWEXEC:OPENVIEW(FWVIEWEXEC.PRW) 20/02/2025 09:42:49 line : 488
Called from FWEXECVIEW(PROTHEUSFUNCTIONMVC.PRX) 20/02/2025 09:42:51 line : 4527
Called from MA010INCLU(MATA010M.PRX) 31/07/2024 14:24:50 line : 841
Called from A010INCLUI(MATA010.PRX) 16/10/2024 20:18:42 line : 1131
Called from FWFORMBROWSE:EXECUTE(FWFORMBROWSE.PRW) 20/02/2025 09:42:49 line : 1148
Called from {|| OSELF:EXECUTE(“A010INCLUI”, 3, 0,“INCLUIR”, 3,“”,“INCLUIR”,“”, 3) }(FWFORMBROWSE.PRW) 20/02/2025 09:42:49 line : 580
Called from ::MSDIALOG:ACTIVATE
Called from FWMBROWSE:ACTIVATE(FWMBROWSE.PRW) 20/02/2025 09:42:49 line : 696
Called from MATA010M(MATA010M.PRX) 31/07/2024 14:24:50 line : 76
Called from MATA010(MATA010.PRX) 16/10/2024 20:18:42 line : 96
Called from __EXECUTE(APLIB090.PRW) 20/02/2025 09:42:44 line : 735
Called from MDIEXECUTE(APLIB260.PRW) 20/02/2025 09:42:44 line : 931

1 curtida

Boa tarde @MAbrahao parece que está dando erro em um fonte customizado.

U_XXLOG

Tem algum msunlock que está passando por fora de alguma transação ou você está criando uma transação dentro de outra.

Abraço

O ponto de entrada de entrada u_ITEM está chamando fazendo uma serie de outras funções até chegar na U_XXLOG que está tendo um comportamento estranho, se tiver como compartilhar ele, facilita para entender o erro.

1 curtida

User Function xxLog(cArqLog,cMens,cTxt)
Local nPosFim := 0
Local nHandle := 0
Local cBuffer := “”

Default cTxt := “”

Set(_SET_DATEFORMAT, ‘dd/mm/yyyy’)

cMens := STRTRAN( cMens, CRLF, " “)
If Type(“cEmpAnt”) == “U”
cMens := DtoC(Date())+”|“+Time()+”||||||“+cMens+”|"
Else
cMens := DtoC(Date())+“|”+Time()+“|”+cEmpAnt+“|”+__cUserId+“-”+cUserName+“|”+cValToChar(nModulo)+“|”+FWGetMnuFile()+“|”+FunName()+“|”+GetEnvServer()+“-”+cPorta+“|”+cMens+“|”
EndIf

If !Empty(cTxt)
cMens += CRLF+cTxt+CRLF
EndIf

If !File(cArqLog)
nHandle:=fCreate(cArqLog,0)
If nHandle==-1
If !IsBlind()
FWAlertError("LOG ERROR: "+STR(nHandle),“Nao foi possivel criar o arquivo”+cArqLog)
EndIf
Return(.f.)
EndIf
fClose(nHandle)
EndIf

nHandle := fOpen(cArqLog,2)

If fError() <> 0
If !IsBlind()
FWAlertError("LOG ERROR: "+fError(),"Nao foi possivel abrir o arquivo "+cArqLog)
EndIf
Return(.f.)
EndIf

cBuffer := cMens + CRLF

nPosFim := fSeek(nHandle,0,2) //Posiciona no Fim do Arquivo

fWrite(nHandle,cBuffer,Len(cBuffer))

If fError() <> 0
If !IsBlind()
FWAlertError("LOG ERROR: "+fError(),"Nao foi possivel gravar o arquivo "+cArqLog)
EndIf
fClose(nHandle)
Return(.f.)
EndIf

nPosFim:=fSeek(nHandle,0,2) //Posiciona no Fim do Arquivo

fClose(nHandle)

Return(.t.)

Amigo pelo que dá para entender do erro você está dentro de uma transação, faz o seguinte, como é um erro grave, antes de tentar gravar o error log via customização desarma a transação, isso vai resolver o problema, de toda forma ia dar erro e não gravaria os dados.

If inTransaction()
	DisarmTransaction()
EndIf
1 curtida

#Include “Protheus.ch”
//{Protheus.doc} MATA010_PE
BK - Ponto de entrada MVC - Cadastro de Produtos
@Return
@author Marcos Bispo Abrahão
@since 24/08/2022
@version P12.33
/
/

User Function ITEM()
Local aParam := PARAMIXB
Local xRet := .T.
Local oObj := Nil
Local cIdPonto := “”
Local cIdModel := “”
Local nOper := 0
Local cEvento := ‘’
Local cCampo := ‘’
Local cConteudo := ‘’

//Se tiver parâmetros
If aParam != Nil 
    //ConOut("> "+aParam[2]) 

    //Pega informações dos parâmetros
    oObj := aParam[1] 
    cIdPonto := aParam[2] 
    cIdModel := aParam[3] 

    If cIDPonto == 'FORMPRE'

        cEvento     := aParam[4]
        cCampo      := aParam[5]
        cConteudo   := If( ValType(aParam[6]) == 'C',;
                        "'" + aParam[6] + "'",;
                        If( ValType(aParam[6]) == 'N',;
                            AllTrim(Str(aParam[6])),;
                            If( ValType(aParam[6]) == 'D',;
                                DtoC(aParam[6]),;
                                If(ValType(aParam[4]) == 'L',;
                                    If(aParam[4], '.T.', '.F.'),;
                                    ''))))
        cIDForm     := oObj:GetID()

    ElseIf cIDPonto == 'FORMPOS'

        cIDForm     := oObj:GetID()

    ElseIf cIDPonto == 'FORMCOMMITTTSPRE' .OR. cIDPonto == 'FORMCOMMITTTSPOS'

        cConteudo   := If( ValType(aParam[4]) == 'L',;
                        If( aParam[4], '.T.', '.F.'),;
                        '')

    EndIf


    //Valida a abertura da tela
    If cIdPonto == "MODELVLDACTIVE"
        xRet := .T. 
        //nOper := oObj:nOperation

        //Pré configurações do Modelo de Dados
    ElseIf cIdPonto == "MODELPRE"
        xRet := .T. 

        //Pré configurações do Formulário de Dados
    ElseIf cIdPonto == "FORMPRE"
        xRet := .T. 

        //nOper := oObj:GetModel(cIdPonto):nOperation
        //cTipo := aParam[4]
        //cCampo := aParam[5]

        //Se for Alteração
        //If nOper == 4
        //Não permite alteração dos campos
        //    If cTipo == "CANSETVALUE" .And. Alltrim(cCampo) $ ("CAMPO1;CAMPO2;CAMPO3")
        //        xRet := .F.
        //    EndIf
        //EndIf

        //Adição de opções no Ações Relacionadas dentro da tela

        // Copy
        /*
        If cIdModel == "SB1MASTER"
            oModelX := FwModelActive()// Instancia modelo ativo
            //oModelB1 := oModelX:GetModel("SB1MASTER") //Instancia sub-modelo SB1
            
            If oModelX:IsCopy() //Verifica se é uma operação de copia
            
                // CUSTOMIZAÇÕES DO USUÁRIO (VALIDAÇÃO DE CAMPO, INSERÇÃO DE VALORES E ETC)
            
                //MsgInfo("FORMPRE - Operação de cópia","MATA010_PE")
                Public B1_XXCODCP := SB1->B1_COD
                xRet := .T.//Mantem o retorno para validação FORMPOS como .T., alterar se for necessário 
            EndIf
        EndIf
        */

    ElseIf cIdPonto == "BUTTONBAR"
        xRet := {}
        If __cUserID == "000000"
            aAdd(xRet, {"Substituição de Produto", "", {|| u_BKCOMA01()}, "Somente produtos de compras"})
        EndIf

        //aAdd(xRet, {"* Titulo 2", "", {|| Alert("Botão 2")}, "Tooltip 2"})
        //aAdd(xRet, {"* Titulo 3", "", {|| Alert("Botão 3")}, "Tooltip 3"})

        //Pós configurações do Formulário
    ElseIf cIdPonto == "FORMPOS"
        nOper := oObj:GetModel(cIdPonto):nOperation

        xRet := .T. 
        /*
        If nOper == 3 .OR. nOper == 4
            //Validação ao clicar no Botão Confirmar
            oModel		:= FwModelActivate()
            oModelSB1	:= oModel:GetModel('SB1MASTER') 

            cPrefix    	:= ALLTRIM(oModelSB1:GetValue('B1_XPREFIX'))
            cEstruc    	:= ALLTRIM(oModelSB1:GetValue('B1_XESTRUC'))

            If cPrefix == "TOD" .AND. Empty(cEstruc)
                MsgStop("Para produtos TOD, é obrigatório informar a Estrutura",cIdPonto)
                xRet := .F.
            EndIf
        EndIf
        */
    ElseIf cIdPonto == "MODELPOS"
        xRet := .T. 

        //Pré validações do Commit
    ElseIf cIdPonto == "FORMCOMMITTTSPRE"

        MyFTTSPre(oObj, cIDPonto, cIDModel, cConteudo)

        //Pós validações do Commit
    ElseIf cIdPonto == "FORMCOMMITTTSPOS"

        //Commit das operações (antes da gravação)
    ElseIf cIdPonto == "MODELCOMMITTTS"

        //Commit das operações (após a gravação)
    ElseIf cIdPonto == "MODELCOMMITNTTS"
        //Mostrando mensagens no fim da operação
       
    EndIf 
EndIf 

Return xRet

//-------------------------------------------------------------------
//{Protheus.doc} MyFTTSPre
Função específica que será executada no momento FORM COMMIT TTS PRE
@param oObj, cIDPonto, cIDModel, cConteudo
@return NIL
@author Faturamento
@version 12.1.17 / Superior
@since Mai/2021
/
/
//-------------------------------------------------------------------
Static Function MyFTTSPre(oObj, cIDPonto, cIDModel, cConteudo)
Local oModel := FwModelActive()
Local nOper := oObj:GetOperation()

//ApMsgInfo(“Esta é a minha função específica que será executada no momento ‘FORM COMMIT TTS PRE’.”)

HistLog(oModel, nOper)

Return NIL

//{Protheus.doc} HistLog
Realiza gravação de histórico de log das informações do cliente.
@type Static Function
@author Josuel Silva
@since 07/06/2022
@version 12.1.033
@param oModel, objeto, modelo de dados utilizado
@param nOperation, numerico, operação realizada.
@return Nil
/
/
Static Function HistLog(oModel, nOper)
Local aArea := GetArea()
Local aNoFields := {}
Local oModelSB1 := oModel:GetModel(“SB1MASTER”)
Local cId := “”

cId := "Produto "+TRIM(FwFldGet(‘B1_COD’)) + “-”+TRIM(FwFldGet(‘B1_DESC’))

U_LogMvc(“MATA010_PE”,“SB1”,nOper,oModelSB1,cID,aNoFields)

RestArea(aArea)

Return

Estou dentro de um MVC, será que posso fazer isso?

Static Function MyFTTSPre(oObj, cIDPonto, cIDModel, cConteudo)
Local oModel := FwModelActive()
Local nOper := oObj:GetOperation()

//ApMsgInfo(“Esta é a minha função específica que será executada no momento ‘FORM COMMIT TTS PRE’.”)

HistLog(oModel, nOper)

Return NIL

Se essa gravação é apenas um Log de auditoria do que foi feito, é melhor então usar outro P.E. fora da transação, acho que o MODELCOMMITNTTS seria mais interessante, é após todas as gravações e fora da transação.

Bom dia! Vou alterar para ver se dá certo! Gratidão.

Não adiantou, mas o erro estava onde você me falou mesmo:

A função FWGetMnuFile() que eu chamo na gravação do log que está causando este problema na nova lib.

Tive que alterar esta linha:

cMens := DtoC(Date())+"|"+Time()+"|"+cEmpAnt+"|"+__cUserId+"-"+cUserName+"|"+cValToChar(nModulo)+"|"+IIF(!FWIsInCallStack("HISTLOG"),FWGetMnuFile(),"HISTLOG")+"|"+FunName()+"|"+GetEnvServer()+"-"+cPorta+"|"+cMens+"|" 

Para:

cMens := DtoC(Date())+"|"+Time()+"|"+cEmpAnt+"|"+__cUserId+"-"+cUserName+"|"+cValToChar(nModulo)+"|"+FWGetMnuFile()+"|"+FunName()+"|"+GetEnvServer()+"-"+cPorta+"|"+cMens+"|" 

Gratidão!

Estou com um erro parecido, após atualizar a LIB para esta versão, tenho uma tela POUI que quando chamada via ProtheusWeb da esse erro, toda vez que as APIs que eu uso chama a função fwXFilial ou xfilial dentro de uma transação. Se eu executo via smartclient o erro não acontece.

THREAD ERROR ([29270], TP|SD|HTTP@01|TRUE, 3AEB4836241047318819EA1C379FB397) 18/03/2025 18:49:05
DBRUnlock cannot be called in a transaction on MSRUNLOCK(APLIB060.PRW) 20/02/2025 09:43:51 line : 1068

[build: 7.00.210324P-20250211]

  • SVN Revision: 43815
    [platform: x64]
    [appversion: 20.3.2.19]
    [environment: CMRVDP_PROD]
    [thread: 29270]
    [dbthread: 29199]
    [dbversion: 23.1.1.7]
    [dbapibuild: 20230303-20240901]
    [dbapiversion: 23.1.1.7]
    [dbarch: 64]
    [dbso: LINUX]
    [rpodb: top]
    [localfiles: CTREE]
    [remark: TLPPREST init function: RestEnvironment()|Emp :01/0101Logado: SIGAFAT Obj :]
    [stack: 107877 bytes]
    [memory: 38433744 bytes]
    [peak memory: 38439864 bytes]
    [threadtype: JobThread]
    Called from MPUSERCOMMIT(PROTHEUSFUNCTIONMVC.PRX) 20/02/2025 09:43:59 line : 6216
    Called from FWUSERACCOUNT:COMMONAUTHENTICATION(FWUSERACCOUNT.PRX) 20/02/2025 09:43:51 line : 1951
    Called from MPUSERACCOUNT:COMMONAUTHENTICATION(MPUSERACCOUNT.PRX) 20/02/2025 09:43:57 line : 1855
    Called from FWUSERACCOUNT:CREDENTIALAUTHENTICATION(FWUSERACCOUNT.PRX) 20/02/2025 09:43:51 line : 1268
    Called from FWUSERAUTHENTIC(FWAPP.PRW) 20/02/2025 09:43:57 line : 1921
    Called from FWLOADSM0(FWFILIAL.PRW) 20/02/2025 09:43:59 line : 1348
    Called from FWSM0LAYOUT(FWFILIAL.PRW) 20/02/2025 09:43:59 line : 1551
    Called from FILLAYOUT(FWFILIAL.PRW) 20/02/2025 09:43:59 line : 2898
    Called from FWARRFILATU(FWFILIAL.PRW) 20/02/2025 09:43:59 line : 1882
    Called from FWXFILIAL(FWFILIAL.PRW) 20/02/2025 09:43:59 line : 1636
    Called from XFILIAL(MATXFUNA.PRX) 21/01/2025 09:29:57 line : 267
    Called from CTBQTDENTD(CTBXCTB.PRW) 18/12/2024 18:02:13 line : 4531
    Called from CTB105MVC(CTBA105.PRW) 31/01/2025 10:15:13 line : 13
    Called from MATA410(MATA410.PRX) 19/12/2024 14:53:36 line : 137
    Called from {|X, Y,Z| MATA410(X,Y,Z)}(LPJ.FAT.CONFERENCE.ORDERS.SERVICE.TLPP) 18/03/2025 15:37:45 line : 670
    Called from MSEXECAUTO(MATXFUNB.PRX) 18/11/2024 10:44:27 line : 3148
    Called from LPJ.FAT.CONFERENCE.UPDATEORDER(LPJ.FAT.CONFERENCE.ORDERS.SERVICE.TLPP) 18/03/2025 15:37:45 line : 670
    Called from LPJ.FAT.CONFERENCE.ORDERSSERVICE:FINISHED(LPJ.FAT.CONFERENCE.ORDERS.SERVICE.TLPP) 18/03/2025 15:37:45 line : 537
    Called from LPJ.FAT.CONFERENCE.ORDERSCONTROLLER:PUTFINISHED(LPJ.FAT.CONFERENCE.ORDERS.CONTROLLER.TLPP) 04/02/2025 15:07:33 line : 320
    Called from TLPP.REST.REST:HTTPCALLCLASS(CLASSREST.TLPP) 11/02/2025 08:38:17 line : 1326
    Called from TLPP.REST.REST:HTTPCALL(CLASSREST.TLPP) 11/02/2025 08:38:17 line : 1207
    Called from TLPP.REST.REST:HANDLE(CLASSREST.TLPP) 11/02/2025 08:38:17 line : 845
    Called from TLPP.REST.HANDLEREST(FUNCTIONREST.TLPP) 11/02/2025 08:38:17 line : 121