Приходилось решать задачку в подобной не-БэстПрактисной постановке. Решением, конечно, не горжусь, но оно как-то работает и выручает. Сделал примерно так:
X++:
FormDataSource formDataSource;
Common common;
int i;
.............
// неявный цикл по строкам грида (явный - по датасорсу)
i = 0;
for ( common = formDataSource.getFirst() ? formDataSource.getFirst() : formDataSource.cursor();
common ;
common = formDataSource.getNext() )
{
if (i==0)
formDataSource.first();
else
formDataSource.next();
// bla-bla-bla
formDataSource.write();
formDataSource.reread();
formDataSource.refresh();
i++;
}
P.S. Упс! Про выделенные речь? Для них не сработает по понятным причинам

P.P.S. Если только не попробовать быстренько отфильтровать выделенные записи (чтобы в гриде остались только они), пробежаться по ним, восстановить фильтрацию перед пробежкой и восстановить выделение...

(не более, чем на уровне реплики мозгового штурма)