Bloquear a alteração do campo C7_PRECO quando o campo C7_CODTAB estiver prenchido

Boa tarde! Estou tentando bloquear o a alteração do campo C7_PRECO quando o campo C7_CODTAB estiver preenchidoSC7.jpg . Isso no pedido de compras. Eu fiz como a imagem em anexo. porém o campo continua editável.

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Boa tarde Arthur,

A função Empty já retorna um tipo boolean, então não precisa colocar o IIF, apenas negar o seu retorno conforme necessidade, dessa forma o código fica mais limpo e objetivo.

Tente colocar apenas Empty(M->C7_CODTAB) e faça o teste preenchendo o campo C7_CODTAB, assim como o teste inverso, deixando o mesmo em branco, caso não bloquear em nenhum dos casos, significa que o alias em memória (M->) não está sendo preenchido ou a rotina não respeitou o valor do X3_WHEN.

Boa tarde Daniel!
Fiz o processo e não deu certo. Acredito que seja como você informou, que a rotina não respeitou a X3_WHEN.
Você saberia outra maneira de resolver este problema?

Você pode tentar utilizar o valid ou utilizar de algum ponto de entrada para a validação da linha ou do formulário, como o MT120LOK: MT120LOK - Validações Específicas de Usuário - Linha Microsiga Protheus - TDN

Arruma a chamada para um fonte customizado e faça a validação dentro dentro retornando um boolean ou dentro do cfg mesmo. Ex:

User Function VCOM006() Local aArea := GetArea() Local _lRet := .F. Local _xCampo := GdFieldGet( "C7_CODTAB", n )

If !Empty( _xCampo )

_lRet := .F.

Else

_lRet := .T.

EndIf

RestArea( aArea ) Return( _lRet )

Bom dia!

Já faz tempo, mas se ainda precisar colocar a informação no X3_WHEN sem precisar usar um fonte customizado, você pode tentar desta forma:

!Empty(GdFieldGet("C7_CODTAB"))

Fiz algo semelhante na C6_QTDVEN e funcionou perfeitamente.