Boa tarde,
precisei disso recentemente e a solução que encontrei foi a seguinte:
no programa principal
declarei uma handle global que vai receber o próprio programa
define new global shared variable h-fb_t029 as handle no-undo.
no local-initialize populo ela:
assign h-fb_t029 = this-procedure.
no local-destroy removo da memória:
if valid-handle(h-fb_t029) then do:
delete procedure h-fb_t029.
end.
então crio uma procedure para reposicionar a query, assim faz o refresh da tela, o adm-open-query força o refresh dos brosers:
PROCEDURE pi-reposiciona-query :
define variable row-orcamento as rowid no-undo.
run pi-posicao-query in h_dm029q04 (output row-orcamento).
for first dm-orcamento
where rowid(dm-orcamento) = row-orcamento
no-lock. end.
if not available dm-orcamento then do:
message
"Não tem orçamento disponível para atualização"
VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
return "adm-error".
end.
assign row-orcamento = rowid(dm-orcamento).
run pi-reposiciona-query in h_dm029q04 (input row-orcamento).
run
adm-open-query in h_dm030b011 no-error.
run adm-open-query in h_dm030b08 no-error.
END PROCEDURE.
Por fim, nos browsers e views eu carrego a variável global:
define new global shared variable h-fb_t029 as handle no-undo.
então executar a procedure para forçar o refresh
if avail dm-orcamento
and valid-handle(h-fb_t029) then do:
run pi-reposiciona-query in h-fb_t029.
end.
essa foi a solução que encontrei, se souberem uma forma mais simples seria bem vinda.