Типовые примеры кода для правильного удаления строк при обходе циклами.


Проблема — 1С при удалении элемента индекс смещается на -1 и при обходе проскакивают элементы удовлетворяющие услови.

Решение — использовать обход по индексам (вместо Для каждого)

Пример 1 

КоличествоСтрок = Объект.Товары.Количество();

Для Счетчик = 0 По КоличествоСтрок - 1 Цикл
	
	ТекущаяСтрока = Объект.Товары[КоличествоСтрок - Счетчик - 1];
	
	Если ВашеУсловие Тогда //укажите ваше условие
		Объект.Товары.Удалить(ТекущаяСтрока);
	КонецЕсли;
	
КонецЦикла;

Пример 2

КоличествоСтрок = Объект.Товары.Количество();
Индекс = 0;

Пока Индекс < КоличествоСтрок Цикл
	
	ТекущаяСтрока = Объект.Товары(Индекс);
	
	Если ВашеУсловие Тогда //укажите ваше условие
		Объект.Товары.Удалить(Индекс);
		КоличествоСтрок = КоличествоСтрок - 1;
	Иначе
		Индекс = Индекс + 1;
	КонецЕсли;
	
КонецЦикла;

ПРИНЯТЫЙ ЭТАЛОН:

	КоличествоСтрок = ТаблицаЗначений.Количество();
	Индекс = 0;
	
	Пока Индекс < КоличествоСтрок Цикл
		 Строка = ТаблицаЗначений[Индекс]; 
	   	Если "ВАШЕ УСЛОВИЕ" Тогда
			ТаблицаЗначений.Удалить(Строка);
			КоличествоСтрок = КоличествоСтрок - 1;
		Иначе 
			Индекс = Индекс + 1;	
		КонецЕсли;
	КонецЦикла;