Раздел: Программирование > РаботаСБазойДанных
BestPractices рекомендует следующий способ обойти все строки FormDataSource, выделенные в Grid (раздел «Traversing multi selected records in a data source»):
void clicked() { xRefReferences xRefReferencesEdit; // есть ли выделенные строки - for (xRefReferencesEdit = xRefReferences_ds.getFirst(1) ? xRefReferences_ds.getFirst(1) : //если есть, получаем первую xRefReferences; //иначе используем текущую запись // продолжаем, пока получаем записи xRefReferencesEdit; // выбираем следующую запись xRefReferencesEdit = xRefReferences_ds.getNext()) { // обработка xRefReferencesEdit ... } }
К данной записи приложен Sys_FormDataSourceSelectionEnumerator.7z, который инкапсулирует этот алгоритм перебора
SYS_FormDataSourceSelectionEnumerator i = new SYS_FormDataSourceSelectionEnumerator(EmplTable_ds) while (i.moveNext()) info(int2str(i.current().recID));
Если надо перебирать набор записей в классе, вызванным из MenuItem, FormDataSource можно получить так:
static void main(Args _args) { FormDataSource ds=_args.record().dataSet(); EmplTable empl; ; // есть ли выделенные строки - for (empl = ds.getFirst(1) ? ds.getFirst(1) : _args.record(); empl; empl = ds.getNext()) { // обработка empl ... } }