$ ForEachStatement = FOR EACH ident1 IN ident2 DO StatementSequence END FOR ";"
Оператор For Each обеспечивает циклическое повторение вложенной в него последовательности операторов для каждого элемента коллекции. Цикл For Each выполняется, если в коллекции есть хотя бы один элемент. После начала выполнения цикла, операторы выполняются для первого элемента коллекции ident2, значение которого помещается в переменную ident1; если в коллекции существуют еще элементы, операторы в цикле выполняются последовательно для всех элементов. Когда элементов более нет, цикл прекращается и управление передается оператору, расположенному непосредственно после оператора End For.
Данный оператор оптимизирован для работы с массивом элементов справочников, реализуемым интерфейсом IDimElementArray. В результате работы в цикле будут возвращаться номера элементов справочников, содержащихся в коллекции.
Sub ForEachSample;
Var
d: Double;
Arr: Array Of Double;
TabSheetBox1: TabSheetBox;
Begin
Arr := TabSheetBox1.Source.GetTabSheet.ParseRange("А0:К0").ToDoubleArray(True);
For Each d In Arr Do
Debug.Write(d.ToString + " ");
End For;
End Sub ForEachSample;
После выполнения примера в консоль будут выведены значения всех не пустых ячеек в диапазоне "А0:К0".
Sub ForEachDimArray;
Var
MB: IMetabase;
DimInst: IDimInstance;
Elem: IDimElementArray;
i: Integer;
Begin
MB := MetabaseClass.Active;
DimInst := MB.ItemById("D_TO").Open(Null) As IDimInstance;
Elem := DimInst.RootElements;
For Each i In Elem Do
Debug.Write(i.ToString + " ");
End For;
End Sub ForEachDimArray;
После выполнения примера в консоль будут выведены индексы всех корневых элементов справочника с идентификатором "D_TO".
См. также: