Boa tarde, Guilherme!
Tive o mesmo problema em minha empresa, porém ao utilizar o ponto de entrada MA450MNU. Tive que efetuar a seguinte correção, buscando a posição da minha função no aRotina e passando para o AxAltera.
If(Type('aRotina') == 'A')
nOpc := aScan(aRotina, {|x| Alltrim(x[2]) == 'U_ELFINA08'})
Endif
DbSelectArea('SA1')
SA1->(DbSetOrder(1))
If(SA1->(DbSeek(xFilial('SA1') + SC9->C9_CLIENTE + SC9->C9_LOJA)))
AxAltera('SA1',SA1->(RecNo()),nOpc,,,,,'MA030TudOk(4)',,,)
Else
MsgAlert('Não foi possível posicionar no cliente do pedido ' + SC9->C9_PEDIDO + '!', 'Cadastro de Clientes')
Endif
Verifiquei na documentação que o parâmetro nOpc da função AxAltera, na verdade, é a linha do aRotina no qual a AxAltera irá executar a ação. Confuso, não? Eu sempre achei que era simplesmente o tipo de operação.
A seguir estarei demonstrando um exemplo prático.
Digamos que o meu aRotina esteja composto da seguinte maneira (ou o aRotina da função padrão):
ADD OPTION aRotina TITLE 'Pesquisar' ACTION 'PesqBrw' OPERATION 1 ACCESS 0
ADD OPTION aRotina TITLE 'Visualizar' ACTION 'VIEWDEF.MATA450' OPERATION 2 ACCESS 0
ADD OPTION aRotina TITLE 'Incluir' ACTION 'VIEWDEF.MATA450' OPERATION 3 ACCESS 0
ADD OPTION aRotina TITLE 'Alterar' ACTION 'VIEWDEF.MATA450' OPERATION 4 ACCESS 0
ADD OPTION aRotina TITLE 'Excluir' ACTION 'VIEWDEF.MATA450' OPERATION 5 ACCESS 0
Ao informar o parâmetro nOpc igual a 4 para o AxAltera, ele irá executar a função em modo alteração, pois a quarta linha do aRotina possui a operação alteração.
Mas, se por algum motivo o meu aRotina esteja dessa forma:
ADD OPTION aRotina TITLE 'Pesquisar' ACTION 'PesqBrw' OPERATION 1 ACCESS 0
ADD OPTION aRotina TITLE 'Visualizar' ACTION 'VIEWDEF.MATA450' OPERATION 2 ACCESS 0
ADD OPTION aRotina TITLE 'Detalhes' ACTION 'U_DETALHE()' OPERATION 2 ACCESS 0
ADD OPTION aRotina TITLE 'Cliente' ACTION 'U_CLIENTE()' OPERATION 2 ACCESS 0
ADD OPTION aRotina TITLE 'Incluir' ACTION 'VIEWDEF.MATA450' OPERATION 3 ACCESS 0
ADD OPTION aRotina TITLE 'Alterar' ACTION 'VIEWDEF.MATA450' OPERATION 4 ACCESS 0
ADD OPTION aRotina TITLE 'Excluir' ACTION 'VIEWDEF.MATA450' OPERATION 5 ACCESS 0
E eu mesmo assim informar o nOpc igual a 4, ele irá executar uma ação de visualização. Pois a quarta linha do meu aRotina está com uma função com operação visualização.
Sendo assim, você precisa buscar por uma linha do aRotina onde a operação seja 4 (alteração) e então passar o número dessa linha para o AxAltera. No meu caso, como eu adicionei a ELFINA08 no aRotina da MATA450, eu simplesmente busco pela posição dela. Como é uma customização minha, eu tenho certeza que a operação dela é 4, independente da posição onde ela se encontre no aRotina (6, 7, 8, etc).
Documentação: https://tdn.totvs.com/pages/viewpage.action?pageId=23889132