Типовые примеры кода для правильного удаления строк при обходе циклами.
Проблема — 1С при удалении элемента индекс смещается на -1 и при обходе проскакивают элементы удовлетворяющие услови.
Решение — использовать обход по индексам (вместо Для каждого)
Пример 1
КоличествоСтрок = Объект.Товары.Количество();
Для Счетчик = 0 По КоличествоСтрок - 1 Цикл
ТекущаяСтрока = Объект.Товары[КоличествоСтрок - Счетчик - 1];
Если ВашеУсловие Тогда //укажите ваше условие
Объект.Товары.Удалить(ТекущаяСтрока);
КонецЕсли;
КонецЦикла;
Пример 2
КоличествоСтрок = Объект.Товары.Количество();
Индекс = 0;
Пока Индекс < КоличествоСтрок Цикл
ТекущаяСтрока = Объект.Товары(Индекс);
Если ВашеУсловие Тогда //укажите ваше условие
Объект.Товары.Удалить(Индекс);
КоличествоСтрок = КоличествоСтрок - 1;
Иначе
Индекс = Индекс + 1;
КонецЕсли;
КонецЦикла;
ПРИНЯТЫЙ ЭТАЛОН:
КоличествоСтрок = ТаблицаЗначений.Количество();
Индекс = 0;
Пока Индекс < КоличествоСтрок Цикл
Строка = ТаблицаЗначений[Индекс];
Если "ВАШЕ УСЛОВИЕ" Тогда
ТаблицаЗначений.Удалить(Строка);
КоличествоСтрок = КоличествоСтрок - 1;
Иначе
Индекс = Индекс + 1;
КонецЕсли;
КонецЦикла;