1с как удалить строку из табличной части

от admin

Как программно удалить текущую строку из табличной части документа?

Для этого следует воспользоваться методом Удалить() того интерфейсного объекта, который является источником данных для таблицы, отображающей табличную часть объекта.

Например, для документа ПриходнаяНакладная это будет интерфейсный объект ДанныеФормыКоллекция. В модуле формы этого документа удаление текущей строки табличной части будет выглядеть следующим образом:

В качестве параметра метода Удалить() передается текущая строка табличной части.

Обратите внимание, что для удаления (как и для добавления) строк табличной части документа следует использовать методы интерфейсного объекта, содержащего данные табличной части (Объект.Товары), а не методы таблицы, отображающей эту табличную часть (Элементы.Товары).

Как программно удалить строку в табличной части документа?

Корифеи, помогите кто может.
Казалось бы, простая задча — удалить строчки. но в 1С — невыполнимая просто! Что я делаю неправильно, посмотрите код, пожалуйста.

// Ссылка — это ссылка на нужный документ в базе
Док = Ссылка.ПолучитьОбъект();

Попытка
Док.Записать(РежимЗаписиДокумента.ОтменаПроведения);
Исключение
КонецПопытки;

// Пробовала так :
ТаблЧастьРазделы = ДокументОбъект.Разделы;
Разделы_Корр = ТаблЧастьРазделы.НайтиСтроки(новый Структура(«Контрагент,ДоговорКонтрагента»,СтрокаРаз.Контрагент,СтрокаРаз.Основание));
Для каждого СтрокаРаз_Корр из Разделы_Корр цикл
ТаблЧастьРазделы.Удалить(СтрокаРаз_Корр);
конеццикла;

// И так :
ТаблЧастьРазделы = Док.Разделы;
Разделы_Корр = ТаблЧастьРазделы.НайтиСтроки(новый Структура(«Контрагент,ДоговорКонтрагента»,СтрокаРаз.Контрагент,СтрокаРаз.Основание));
Для каждого СтрокаРаз_Корр из Разделы_Корр Цикл
НомерРаздела = СтрокаРаз_Корр.НомерРаздела;
КолВо = Разделы_Корр.Количество();
СтрокаРаз_Корр.УДалить();
Инд=0;
Пока Инд<КолВо Цикл
//Строка = Разделы_Корр[Инд];
Разделы_Корр.УдалитьСтроку(Инд);
Инд=Инд+1;
КонецЦикла;
КонецЦикла;

// И так :
мас = новый массив;
Для каждого СтрокаРаз_Корр из Разделы_Корр цикл
НомерРаздела = СтрокаРаз_Корр.НомерРаздела;
мас.Добавить(СтрокаРаз_Корр);
КонецЦикла;
Для каждого Строка_Корр из мас цикл
Разделы_Корр.Удалить(Строка_Корр);
КонецЦикла;

//Попытка
// Док.Записать(РежимЗаписиДокумента.Запись);
//Исключение
//КонецПопытки;

когда мне нужно было удалить строки в табличной части кроме выбранных я делал так (под себя переделать не проблема)

Пока ЧислоСтрок > 0 Цикл
ЧислоСтрок = ЧислоСтрок -1;
Для Каждого ТекСтрока Из ДокументОбъект.ДанныеПоставщика Цикл

Удалить = Истина;
Для Каждого СтрокаТаблицыМест Из ВыбранныеМеста Цикл

Если ТекСтрока.НомерМеста = СтрокаТаблицыМест.НомерМеста Тогда
Удалить = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;

Читать:
Nginx как посчитать req sitdf

Если Удалить Тогда
ДокументОбъект.ДанныеПоставщика.Удалить(ТекСтрока);
КонецЕсли;

КонецЦикла;
КонецЦикла;
Форма = ДокументОбъект.ПолучитьФорму(«ФормаДокумента»);
Форма.ЗаполнениеПрописей();
Модифицированность = Ложь;
КонецПроцедуры

(2)
Пока ЧислоСтрок > 0 Цикл
ЧислоСтрок = ЧислоСтрок -1;
Для Каждого ТекСтрока Из ДокументОбъект.ДанныеПоставщика Цикл
Удалить = Истина;
Для Каждого СтрокаТаблицыМест Из ВыбранныеМеста Цикл
Если ТекСтрока.НомерМеста = СтрокаТаблицыМест.НомерМеста Тогда
Удалить = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если Удалить Тогда
ДокументОбъект.ДанныеПоставщика.Удалить(ТекСтрока);
КонецЕсли;
КонецЦикла;
КонецЦикла;

А для чего нужно такое количество раз проходить табличную часть? за один раз не прокатит?
(0)
ТаблЧастьРазделы = ДокументОбъект.Разделы;
Разделы_Корр = ТаблЧастьРазделы.НайтиСтроки(новый Структура(«Контрагент,ДоговорКонтрагента»,СтрокаРаз.Контрагент,СтрокаРаз.Основание));
Для каждого СтрокаРаз_Корр из Разделы_Корр цикл
ТаблЧастьРазделы.Удалить(СтрокаРаз_Корр);
конеццикла;

это должно работать, что не получается?

Для бриллианта:
Сделала вот так:

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

1с как удалить строку из табличной части

Удаление строк из табличной части документа, все или по условию.

Удалить все строки табличного поля документа.
Код 1C v 8.х

ОтражениеВУчете . Очистить (); // ОтражениеВУчете — название табличного поля

Как в табличной части документа удалить строки только с нулевым значением реквизита "Количество"?
Код 1C v 8.х

//Получим документ и укажем параметры поиска

ОбъектДок = СсылкаДок . ПолучитьОбъект ();

СтруктураДляПоиска = Новый Структура ( "Количество" , 0 );

ТабличнаяЧастьДок = ОбъектДок . Товары ;

//Получаем список строк соответсвтвующих отбору, и перебором удаляем.

МассивПустыхСтрок = ТабличнаяЧастьДок . НайтиСтроки ( СтруктураДляПоиска );

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

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

Пример удаления элементов из массива циклом Пока.

Пример удаления элементов из массива обратным перебором.

Комментарии (0)

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

Related Posts