Через столько лет пришлось озадачится, что же все таки делает метод setCurrent. И правильного ответа здесь не нашел. Но выяснил.
setCurrent пихает данные из текущего курсора FormDataSource в кэш данных FormDataSource. Пример для понимания. cliked на форме с датасорсом table1:
X++:
void clicked()
{
Table1 t1;
;
super();
info(strFmt("%1", table1.field1));
t1.data(table1);
t1.field1 = "новое значение";
table1.data(t1);
table1_DS.setCurrent();
info(strFmt("%1", table1.field1));
}
Замысловатое изменение field1 через data() делалось для того чтобы не сработал write на датасорсе. Метод table1.data(t1) не провоцирует форму автоматически сохранять запись.
И получается что этот код не меняет данных в БД, но форма будет отображать "новое значение" в поле "field1" на всех записях на которых вызовете clicked(). Пока не произойдет вызов executeQuery() или reread().
А без setCurrent() форма не хранит "новое значение" и сбрасывает, например, при переходе к другой записи.
Проверял на DAX2012.