1С 8.3 Удалить строки табличной части документа/справочника
Данные > Примеры кода 1С > 1С 8.3 Документы
Перейти в основной раздел:
Удалить строки (по условию) в табличной части в 1С 8.3:
&НаСервере
Процедура УдалитьСтрокиВТЧпоУсловию()
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
МассивСтрокУдалить = Новый Массив;
// Вариант 1
Для Каждого Строка Из ОтгрузкаСсылка.Номенклатура Цикл
Если НЕ ЗначениеЗаполнено(Строка.Номенклатура) Тогда
МассивСтрокУдалить.Добавить(Строка);
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементМассив Из МассивСтрокУдалить Цикл
Объект.Номенклатура.Удалить(ЭлементМассив); //удаляем нужную строку
КонецЦикла;
// Вариант 2
//КоличествоСтрок = ОтгрузкаСсылка.Номенклатура.Количество()-1;
//ИндексСтроки = КоличествоСтрок;
//Для А = 0 по КоличествоСтрок Цикл
// Строка = ОтгрузкаСсылка.Номенклатура.Получить(ИндексСтроки);
// Если НЕ ЗначениеЗаполнено(Строка.Номенклатура) Тогда
// ОтгрузкаСсылка.Номенклатура.Удалить(Строка);
// КонецЕсли;
// ИндексСтроки = ИндексСтроки - 1;
//КонецЦикла;
КонецПроцедуры
Процедура УдалитьСтрокиВТЧпоУсловию()
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
МассивСтрокУдалить = Новый Массив;
// Вариант 1
Для Каждого Строка Из ОтгрузкаСсылка.Номенклатура Цикл
Если НЕ ЗначениеЗаполнено(Строка.Номенклатура) Тогда
МассивСтрокУдалить.Добавить(Строка);
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементМассив Из МассивСтрокУдалить Цикл
Объект.Номенклатура.Удалить(ЭлементМассив); //удаляем нужную строку
КонецЦикла;
// Вариант 2
//КоличествоСтрок = ОтгрузкаСсылка.Номенклатура.Количество()-1;
//ИндексСтроки = КоличествоСтрок;
//Для А = 0 по КоличествоСтрок Цикл
// Строка = ОтгрузкаСсылка.Номенклатура.Получить(ИндексСтроки);
// Если НЕ ЗначениеЗаполнено(Строка.Номенклатура) Тогда
// ОтгрузкаСсылка.Номенклатура.Удалить(Строка);
// КонецЕсли;
// ИндексСтроки = ИндексСтроки - 1;
//КонецЦикла;
КонецПроцедуры
Удалить строки (с отбором) в табличной части в 1С 8.3:
&НаСервере
Процедура УдалитьСтрокиВТЧпоОтбору()
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
ОтгрузкаТоваров = ОтгрузкаСсылка.ПолучитьОбъект();
СтруктураДляПоиска = Новый Структура("Количество", 0);
//Получаем список строк соответсвтвующих отбору, и перебором удаляем.
МассивСтрокУдалить = ОтгрузкаТоваров.Номенклатура.НайтиСтроки(СтруктураДляПоиска);
Для Каждого Строка Из МассивСтрокУдалить Цикл
ОтгрузкаТоваров.Номенклатура.Удалить(Строка);
КонецЦикла;
ОтгрузкаТоваров.Записать(); // Записываем изменения в документ
КонецПроцедуры
Процедура УдалитьСтрокиВТЧпоОтбору()
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
ОтгрузкаТоваров = ОтгрузкаСсылка.ПолучитьОбъект();
СтруктураДляПоиска = Новый Структура("Количество", 0);
//Получаем список строк соответсвтвующих отбору, и перебором удаляем.
МассивСтрокУдалить = ОтгрузкаТоваров.Номенклатура.НайтиСтроки(СтруктураДляПоиска);
Для Каждого Строка Из МассивСтрокУдалить Цикл
ОтгрузкаТоваров.Номенклатура.Удалить(Строка);
КонецЦикла;
ОтгрузкаТоваров.Записать(); // Записываем изменения в документ
КонецПроцедуры
Удалить строки через Таблицу Значений (с отбором) в табличной части в 1С 8.3:
&НаСервере
Процедура УдалитьСтрокиВТЧпоОтборуЧерезТЗ()
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
// Укажем условия отбора: Нужно оставить только строки где СубконтоКт1 = РБПНаПФР
ПараметрыОтбора = Новый Структура("СубконтоКт1", Справочники.РасходыБудущихПериодов.РБПНаПФР);
//Теперь выгружаем табличную часть в таблицу значений
ТЗисходн=ОтгрузкаСсылка.Номенклатура.Выгрузить();
//Скопируем ТЗ с заданным отбором в новую ТЗ
ТЗ = ТЗисходн.Скопировать(ПараметрыОтбора);
//Очистим табличную часть
ОтгрузкаСсылка.Номенклатура.Очистить();
//Загружем в табличную часть новую таблицу значений
ОтгрузкаСсылка.Номенклатура.Загрузить(ТЗ);
КонецПроцедуры
Процедура УдалитьСтрокиВТЧпоОтборуЧерезТЗ()
ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
// Укажем условия отбора: Нужно оставить только строки где СубконтоКт1 = РБПНаПФР
ПараметрыОтбора = Новый Структура("СубконтоКт1", Справочники.РасходыБудущихПериодов.РБПНаПФР);
//Теперь выгружаем табличную часть в таблицу значений
ТЗисходн=ОтгрузкаСсылка.Номенклатура.Выгрузить();
//Скопируем ТЗ с заданным отбором в новую ТЗ
ТЗ = ТЗисходн.Скопировать(ПараметрыОтбора);
//Очистим табличную часть
ОтгрузкаСсылка.Номенклатура.Очистить();
//Загружем в табличную часть новую таблицу значений
ОтгрузкаСсылка.Номенклатура.Загрузить(ТЗ);
КонецПроцедуры
1
комментарий
Валерий
29 ноя 2023
Удаляю строки по условию (как описано в первом варианте):
Собираю строки, которые нужно удалить, в массив, потом удаляю:
Для каждого Элемент из СтрокиКУдалению Цикл
ТаблицаНачислений.НачисленнаяЗарплатаИВзносы.Удалить(Элемент);
КонецЦикла;
На выходе каждый раз получаю ошибку: "Значение индекса выходит за границы диапазона"
Что я делаю не так?
Собираю строки, которые нужно удалить, в массив, потом удаляю:
Для каждого Элемент из СтрокиКУдалению Цикл
ТаблицаНачислений.НачисленнаяЗарплатаИВзносы.Удалить(Элемент);
КонецЦикла;
На выходе каждый раз получаю ошибку: "Значение индекса выходит за границы диапазона"
Что я делаю не так?
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник