Comparativo de campos

Bom dia!

Estou escrevendo um fonte que faz o comparativo dos valores salvos em tabela, e o valor de memória. Esse fonte só é usado em pontos de entrada chamados antes de salvar os valores no banco de dados, para efeito de comparativo de alteração e montagem de e-mail notificando gestores sobre o que de fato foi alterado.

Porém, durante o desenvolvimento me deparei com uma mensagem: "macro of type &xx->&zz at line 40". Ja procurei em varios fóruns e não encontrei nada sobre o assunto.

O código é bem simples:

User Function CHECKALT(cAlias)
    Local cQuery    := ""
    Local cChanges  := ""
    Local nX        := 1
    Local aFields   := {}

    Local cQuery := ChangeQuery(" SELECT X3_CAMPO, X3_TIPO, X3_TITULO FROM SX3010 WHERE X3_ARQUIVO = '"+cAlias+"' AND X3_TIPO <> 'M' AND X3_CONTEXT IN ('R', '') ")
    TCQUERY cQuery NEW ALIAS "X3"

    While X3->(!EOF())
        aAdd(aFields, {X3->X3_CAMPO, X3->X3_TIPO, X3->X3_TITULO})
        X3->(DbSkip())
    End
    X3->(DbCloseArea())

    For nX := 1 to len(aFields)
        If aFields[nX][2] == 'N' .or. aFields[nX][2] == 'D'
            If &(cAlias)->&(aFields[nX][1]) != M->&(aFields[nX][1]) // <------------ Erro aqui
                cChanges += "Campo "+aFields[nX][3]+" alterado: "+&(cAlias)->&(aFields[nX][1])+"  >>  "+M->&(aFields[nX][1])+"" + CRLF
            EndIf
        Else 
            If AllTrim(&(cAlias)->&(aFields[nX][1])) != Alltrim(M->&(aFields[nX][1]))
                cChanges += "Campo "+aFields[nX][3]+" alterado: "+Alltrim(&(cAlias)->&(aFields[nX][1]))+"  >>  "+Alltrim(M->&(aFields[nX][1]))+"" + CRLF
            EndIf
        EndIf
    Next

Return cChanges

É possível usar a função &() da forma que eu especifiquei, ou tenho que de fato passar um alias fixado no fonte para que o mesmo funcione conforme o esperado?

compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags errocompilacao erro protheus customizacao ou faça a sua própria pergunta.