Удаление из коллекции внутри цикла по коллекции
Не рекомендуется удалять элементы из коллекции при выполнении обхода коллекции. Такое поведение, как правило, небезопасно и может приводить к неявным эффектам.
Важно учитывать, что нет единого определенного принципа работы итераторов после удаления и добавления элементов коллекций. Поведение для разных коллекций может быть разным.
Соответственно не рекомендуется пользоваться итераторами "Для каждого ..." после добавления и удаления элементов коллекций, если итераторы инициированы до выполнения этих действий.
Для выполнения удаления элементов можно рекомендовать или использовать индексы, или запоминать предварительно в массиве элементы коллекции подлежащие удалению, а потом выполнять их удаление.
В текущем правиле анализируются любые коллекции 1С - Массивы, Структуры, Соответствия, Таблицы значений и т.п.
Пример небезопасного кода
Для Каждого Элемент Из Коллекция Цикл
Коллекция.Очистить();
КонецЦикла;
Для Каждого Элемент Из Коллекция.Значения Цикл
Коллекция.Значения.Удалить(Элемент);
Коллекция.Значения.Удалить(ДругойЭлемент);
КонецЦикла;
См. также
Экранирование кода
// sonar:IllegalDeletionFromCollection:off
// sonar:IllegalDeletionFromCollection:on