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