Изменение коллекции во время обхода
Добавлять или удалять элементы коллекции прямо во время Для Каждого по ней же — исключение времени выполнения. Правило общее для всех коллекций 1С, детали и обходной путь — в Для Каждого и удалении данных из массива (обход Пока с конца).
У Для нет параметра шага
В отличие от циклов со счётчиком во многих других языках, у Для Счётчик = НачЗнач По КонЗнач Цикл шаг всегда +1 — ни задать шаг 2, ни пойти в обратную сторону нельзя. Для этого — Пока с ручным изменением переменной. Подробнее — Для.
Переменная счётчика не имеет собственной области видимости
Счётчик в Для и Элемент в Для Каждого — обычные переменные процедуры/функции, а не переменные, ограниченные телом цикла. После КонецЦикла они не исчезают и хранят последнее значение — переиспользование того же имени в другом месте кода может по ошибке подхватить это старое значение:
Для Индекс = 0 По 4 Цикл
// ...
КонецЦикла;
Сообщить(Индекс); // 4, а не ошибка "переменная не определена"Если после цикла нужно точно знать, выполнился ли он хотя бы раз, — не полагаться на итоговое значение счётчика (он останется прежним и после нулевого числа итераций, если завести его заранее), а явно завести отдельный булев флаг.
Пока не подстраховывает от бесконечного цикла
Платформа не ограничивает число итераций Пока — забытое или пропущенное в ветке Если изменение переменной условия зациклит выполнение навсегда, подробнее и пример — Пока.
← Циклы