Bom dia Patrick.
É bem simples de fazer, pelo menos no meu teste foi... rs
- Defina uma variável global para armazenar a query do browser
- No evento "BEFORE-INITIALIZE" do objeto "CONTAINER", busque o browser e dele a query (colocando na variável global)
- A "mágica" toda acontece no evento "AFTER-OPEN-QUERY" do objeto "BROWSER". Você já tem a query. Aí é brincar com ela. Aqui eu reposicionei na segunda linha do browser quando for um determinado item num determinado lote. Mas eu poderia fazer por outros critérios. Posso, inclusive, fazer um loop em todos os registros do browser e ler os campos, deixando posicionado naquele que eu quiser.
Se quiser eu te mando o meu exemplo, mas eu uso uma include que me auxilia no tratamento de UPCs. Então o meu exemplo vai estar com o uso dela. Mas não é difícil de entender.
Basicamente eu busco o objeto "br-table" (que é o browse) e dele eu faço:
ASSIGN wh-qry-cq0609 = wh-brw:QUERY.
As duas variáveis ali são do tipo WIDGET-HANDLE, sendo que a "wh-qry-cq0609" é global.
No "AFTER-OPEN-QUERY" eu fiz:
IF wh-qry-cq0609:NUM-RESULTS > 2 THEN DO:
wh-qry-cq0609:REPOSITION-TO-ROW(2).
END.
Mas foi só para testar mesmo.
Pede um HELP no objeto "QUERY" para ver o que pode ser usado.
Lembrando que o browse é em cima da tabela "saldo-estoq" então se for reposicionar num ROWID específico, tem de certificar que o registro está sendo mostrado no browse.
Talvez (só talvez mesmo, rs) se você fizer um loop dentro dos registros mostrados no browse seja mais a prova de falhas. Um loop de 1 até o "NUM-RESULTS" da query. E aí sai reposicionando linha a linha.
Enfim, tem muitas possibilidades aí.
Se precisar de algo estou a disposição.
Abraço,
Marcelo Torres