MSExecAuto em loop

Ola!

Fiz um MsExecAuto da rotina fina100, no qual ela é alimentada com dados de uma tabela customizada. O Execauto funciona bem o problema é que ele não finaliza, entra em loop e fica incluindo vários registros sem parar. Debuguei e vi que ele passa pelo exec, vai pro return e volta pra função novamente, a que chama o exec. Quem puder ajudar agradeço muito.

segue o fonte:

include 'protheus.ch'

user function ESFINA03()

local aArea := GetArea()

Private cCadastro := "Movimentos Bancarios" Private aRotina := {} Private aCores := {}

AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2}) AADD(aRotina,{"Revisado" ,"U_REVISADO01",0,3}) AADD(aRotina,{"Legenda" ,"U_LEGENDA" ,0,6})

AADD(aCores, {"ZZB_STATUS = 'R'","BR_PRETO"}) AADD(aCores, {"ZZB_TIPOOP = 'P'","BR_AZUL"}) AADD(aCores, {"ZZB_TIPOOP = 'R'","BR_VERDE"})

DbSelectArea("ZZB") ZZB->(DbSetOrder(1))

mBrowse( 6,1,22,75,"ZZB",,,,,,aCores)

ZZB->(DbCloseArea()) RestArea(aArea)

return

User Function LEGENDA()

local aLegenda := {}

AADD(aLegenda, {"BR_VERDE" ,"A Receber"}) AADD(aLegenda, {"BR_AZUL" ,"A Pagar"}) AADD(aLegenda, {"BR_PRETO" ,"Revisado"})

BrwLegenda("Checagem","Legenda",aLegenda)

return

User Function REVISADO01() Local nRecno := ZZB->(RecNo()) Local aRotAuto := {} Local nOpc := 3 Local filial Local ddata Local moeda Local valor Local natur Local banc Local agen Local conta Local docm Local histo Local loja

Private lMsHelpAuto := .t. Private lMsErroAuto := .f.

ZZB->(DbGoTo(nRecNo))

filial := ZZB->ZZB_FILIAL ddata := ZZB->ZZB_DATA moeda := ZZB->ZZB_MOEDA valor := ZZB->ZZB_VALOR natur := ZZB->ZZB_NATUR banc := ZZB->ZZB_BANC agen := ZZB->ZZB_AGEN conta := ZZB->ZZB_CONTA docm := ZZB_DOCM histo := ZZB_HISTO loja := ZZB_LOJA

nOpc := iif(ZZB->ZZB_TIPOOP == "P", 3, 4 )

Begin Transaction aRotAuto:= {{'E5_FILIAL' ,filial ,Nil},; {'E5_DATA' ,ddata ,Nil},; {'E5_MOEDA' ,moeda ,Nil},; {'E5_VALOR' ,valor ,Nil},; {'E5_NATUREZ' ,natur ,Nil},; {'E5_VENCTO' ,ddata ,Nil},; {'E5_BANCO' ,banc ,Nil},; {'E5_AGENCIA' ,agen ,Nil},; {'E5_CONTA' ,conta ,Nil},; {'E5_DOCUMEN' ,docm ,Nil},; {'E5_HISTOR' ,histo ,Nil},; {'E5_LOJA' ,loja ,Nil} }

MSExecAuto({|x,y,z| FINA100(x,y,z)},0,aRotAuto,nOpc)

If lMsErroAuto DisarmTransaction() Mostraerro() else ZZB->(RecLock("ZZB", .F.) ) ZZB->ZZB_STATUS := "R" ZZB->ZZB_DTREV := dDataBase ZZB->(MsUnlock()) EndIf

End Transaction

Return

Conseguiu resolver esse caso? Caso não, tenta adicionar no fonte o break e um return. Todos execautos que achei desse fonte que tenho, estão dessa forma:


Begin Transaction
    MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,3) //movimento pagar
    If  lMsErroAuto
        DisarmTransaction()
        Mostraerro()
        break
        Return(.f.)
    EndIf
End Transaction


Begin Transaction
    MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,4) //movimento receber
    If  lMsErroAuto
        DisarmTransaction()
        Mostraerro()
        break

        Return(.f.)
    EndIf
End Transaction

Talvez resolva..

Olá,

Caso o MsExecAuto da rotina FINA100 esteja entrando em loop, é necessário entrar em contato com a TOTVS, para que a equipe de manutenção do produto avalie e corrija essa situação.

Uma possibilidade é que exista algum ponto de entrada chamado pelo processamento do execauto da fina100 que esteja chamando qualquer rotina de usuário cujo nome comece com "REVISADO" e que vai acabar chamando a sua REVISADO01 pois contando com o U_ do começo dá 10 caracteres, então se chamar U_REVISADO78 por exemplo, vai acabar chamando a sua U_REVISADO01 pois são todas U_REVISADO para o advpl devido ao limite de 10 caracteres para nome de função.