Estou com um problema parecido, Creio que seja simples mais não estou conseguindo concluir. Estou tentando alterar um campo e que esse o valor deste campo faça o calculo quando eu altero e passe o valor deste calculo para o BD.
Por exemplo, eu estou alterando o campo {hora_final_atendimento}, de uma OS que ja está gravada. Ao alterar esse campo, coloquei nos eventos ONBEFOREUPDATE e ONAFTERUPDATE, o seguinte lookup:
sc_lookup(HORAF, "SELECT SUBTIME(adm_os.hora_final_atendimento,adm_clientes.hora_final_atendimento_m) AS total_horas FROM adm_os INNER JOIN adm_clientes ON (adm_os.id_cliente = adm_clientes.ClienteId) WHERE adm_os.id = ‘{id}’ AND adm_os.id_unidade = ‘2’ AND adm_os.tipo_contrato_m = ‘F’ AND adm_clientes.qtde_contrato_m <> ‘(NULL)’ ");
if (sc_changed({hora_final_atendimento})) { {hora_adic_atendimento} = ($HORAF[0][0]);
Mais o que acontece e que ele so faz o calculo se eu apertar o botão ATUALIZAR 2 vezes, ou seja, ele faz no UPDATE primeiro com o valor anteriormente gravado, DEPOIS ele pega o valor que gravou e refaz o calculo correto.
Onde eu deveria colocar esse evento (ja tentei tb o OnValidade e OnScriptInit) e tb não deu certo.
Se alguem tiver uma luz, eu agradeço !!!