Pode fazer este tipo de operação no userinterface sim !
Tem bons exemplos na entidade da ATItem.userinterface, seguem abaixo algumas dicas:
a) Separar a lógica de preenchimento do campo num método para que possa ser acionado em todos os pontos necessários
b) O exemplo que foi citado tem apenas um campo (Abatimento) que afeta o valor de outro campo (Desconto), então este método citado acima precisa ser chamado no changed do campo Abatimento, não pode ser chamado no Loaded. Muitas vezes o valor do campo é afetado por vários outros campos, então precisa chamar o método em todos os changes. E tem ainda outros casos onde um campo afeta o valor de vários campos, então no changed dele vai chamar vários métodos... enfim, todos estes exemplos podem ser encontrados na ATItem.userinterface.
c) Outra dica de ouro é usar bastantes caches nos códigos de presentation, como este, pois a performance é crucial nestes pontos, na ATItem também tem exemplos de usos de caches.