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