Dúvida sobre a manipulação de um campo com o Ponto de entrada MT103UPC

Com o ponto de entrada: MT103UPC Preciso fazer com esse ponto de entrada que no momento que for gravar uma entrada ele não atualize o campo B1_UPRC quando o valor do fornecedor (D1_FORNECE) for igual a '000306' Seria possível? Recebi uma possível solução, mas não sei como aplica-la:

"É possível, porém como o PE sempre vai atualizar o campo (B1_UPRC ou BZ_UPRC) você precisa pegar o conteúdo atual do campo e retornar ele novamente caso seja o fornecedor 000306, dessa forma o conteúdo será o mesmo para esse fornecedor"

tentei fazer esta aplicação mas não tive sucesso:

User Function MT103UPC()

Local cFornecedor := SD1->D1_FORNECE

Local nAux := 0

Local nPreco := 0

//Retorna último preço de compra calculado.

nPreco:= SD1->D1_VUNIT + SD1->D1_VALFRE + (SF1->F1_DESPESA / SD1->D1_QUANT)

nAux := nPreco // armazena o valor do ultimo preço de compra

// Verifica se o fornecedor é igual a '000306'

If cFornecedor = '000306'

RecLock("SB1",.F.)

SB1->B1_UPRC := nAux //atribui o valor que foi armazenado na variável nAux (valor da ultima compra antes de atualizar)

//o valor da ultima compra volta a ser o mesmo quando atualiza os campos

EndIf

Return

Olá Andreas, segue o exemplo.

Durante esse PE a SB1 já está posicionar e dentro do reclock, basta retornar o custo que deseja


/*/{Protheus.doc} User Function MT103UPC
    (long_description)
    @type  Function
    @author Leandro Lemos
    @since 26/09/2023
    @version version
    @param param_name, param_type, param_descr
    @return return_var, return_type, return_description
    @example
    (examples)
    @see (https://tdn.totvs.com/pages/releaseview.action?pageId=6085706)
    /*/
User function MT103UPC()
    Local nPreco :=0

    if SD1->D1_FORNECE == '000306'
        nPreco := SB1->B1_UPRC
    else
        nPreco:= SD1->D1_VUNIT + SD1->D1_VALFRE + (SF1->F1_DESPESA / SD1->D1_QUANT)
    endif

Return nPreco

Nesse exemplo no if está retornando o valor que o campo tem antes de atualizar e se não ele faz a soma do ultimo valor de compra como seria normalmente?

só para ficar claro por favor

Pois essa expressão para retornar o ultimo preço de compra não sei se está correta:
//Retorna último preço de compra calculado.
nPreco:= SD1->D1_VUNIT + SD1->D1_VALFRE + (SF1->F1_DESPESA / SD1->D1_QUANT)

se o fornecedor for o 000036 vai manter o valor da B1_UPRC, se for outro atualiza o custo, essa formula ai é como está na documentação desse PE
https://tdn.totvs.com/pages/releaseview.action?pageId=6085706

Muito Obrigado, deu certo!