Особенности использования итераторов "Для каждого ..."

В 1С:Предприятии 8 существует универсальный способ обхода коллекций – итератор "Для каждого ...". Он может применяться для обхода большинства коллекций. Итератор позволяет получать в переменной с указанным именем поочередно все элементы коллекции.

К элементам некоторым коллекций в 1С:Предприятии 8 можно обращаться с помощью числового индекса. Для таких коллекций перебор элементов может осуществляться и итератором, и с помощью индекса. Примером такой коллекции является Массив.

Однако для некоторых коллекций обращение по индексу недоступно, так как коллекция не имеет определенной последовательности. В этих случаях итератор "Для каждого..." позволяет обойти коллекцию. Однако это не значит, что порядок выдачи элементов при обходе коллекции будет являться порядком элементов в коллекции. Если коллекция неупорядочена, то порядок обхода итератором "Для каждого..." в общем виде не определен, то есть может быть любым. Соответственно, для таких коллекций нельзя опираться на этот порядок в алгоритмах использующих коллекцию. Примером такой коллекции является Соответствие.

Кроме того, важно учитывать, что нет единого определенного принципа работы итераторов после удаления и добавления элементов коллекций. Поведение для разных коллекций может быть разным. Соответственно не рекомендуется пользоваться итераторами "Для каждого ...", после добавления и удаления элементов коллекций, если итераторы инициированы до выполнения этих действий. Для выполнения удаления элементов можно рекомендовать или использовать индексы, или запоминать предварительно в массиве элементы коллекции подлежащие удалению, а потом выполнять их удаление.