Удаление строк из табличной части документа

Удаление строк из табличной части документа

Сегодня в работе столкнулся с неверным вводом остатков, нужно было по определенному отбору удалить строки из табличной части документа. В этой заметке разберу как очистить табличную часть, как удалить определенные строки с отбором.

Удалить все из табличной части

Начу с самого простого, бывают случаи когда нужно полностью очистить табличную часть документ. Для этого необходимо использовать команду Очистить()

ОбъектДокумент = СсылкаДокумент.ПолучитьОбъект();	// Получаем документ
ОбъектДокумент.Товары.Очистить();					// Очищаем табличную часть товары
ОбъектДокумент.Записать();							// Записываем изменения

Удаление строк из табличной части с отбором

В этом примере удалим из документа ввода остатков все взаимоотношения с партнерами меньше 1 рубля.

Запрос = Новый Запрос("ВЫБРАТЬ
	|	ВводОстатковРасчетыСПартнерами.Ссылка КАК Ссылка,
	|	ВводОстатковРасчетыСПартнерами.ОбъектРасчетов КАК ОбъектРасчетов
	|ИЗ
	|	Документ.ВводОстатков.РасчетыСПартнерами КАК ВводОстатковРасчетыСПартнерами
	|ГДЕ
	|	ВводОстатковРасчетыСПартнерами.СуммаУпр < 1");
	
	Выборка = Запрос.Выполнить().Выбрать(); // выбераем все строки во всех вводе остатков с суммой меньше 1 рубля
	
	Пока Выборка.Следующий() Цикл			
		Д = Выборка.Ссылка.ПолучитьОбъект();	// Получаем документ ввода остатков
		
		СДП = Новый Структура("ОбъектРасчетов",Выборка.ОбъектРасчетов);
		ТабЧастьДок = Д.РасчетыСПартнерами;
		МассивСтрокДляУдаления = ТабЧастьДок.НайтиСтроки(СДП); // Находим нужную строку по объекту расчетов
		
		Для каждого Строка Из МассивСтрокДляУдаления Цикл 
			ТабЧастьДок.Удалить(Строка);	// удаляем все строки меньше 1 рубля
		КонецЦикла;
		Д.Записать();
	КонецЦикла;

Удалить строки из табличной части которые не соответствуют отбору

Иногда ситуация складывается так, что мы точно знаем какие строки нужно оставить, а правил для удаления строк слишком много. В этом случае удалим все строки из табличной части которые не соответствуют отбору.

  // Укажем условия отбора: Нужно оставить только строки где Вид = ТелефонМобильныйФизическиеЛица	
ПараметрыОтбора = Новый Структура("Вид", Справочники.ВидыКонтактнойИнформации.ТелефонМобильныйФизическиеЛица);	
//Теперь выгружаем табличную часть в таблицу значений
ТЗисходн = КонтактнаяИнформация.Выгрузить();
//Скопируем ТЗ с заданным отбором в новую ТЗ
ТЗнов = ТЗисходн.Скопировать(ПараметрыОтбора);
//Очистим табличную часть
КонтактнаяИнформация.Очистить();
//Загружем в табличную часть новую таблицу значений
КонтактнаяИнформация.Загрузить(ТЗнов);  

Как не надо удалять записи из табличной части

В этом коде мы видим как программист решил выполнить удаление строк из табличной части перебором табличной части.

Для Каждого СтрокаТЧ ИЗ ТабличнаяЧастьОбъекта Цикл
	Если УсловиеУдаленияВыполнено = Истина Тогда
 		ТабличнаяЧастьОбъекта.Удалить(СтрокаТЧ);
	КонецЕсли;
КонецЦикла; 

Перебирает табличную часть, по ходу проверяя условия удаления и сразу удаляет если условие выполняется, но в этом примере не учтено что при удалении строки изменится индекс у строкиТЧ и часть строк будет пропущена.

Материала по программированию на языке 1с и про табличные части на ИТС:

  • Больше примеров про программирование 1с — тут.
  • Больше про табличные части в практическом пособии разработчика — тут.

Опубликовано

в

от

Комментарии

Добавить комментарий