1С 8.3 Удалить строки табличной части документа/справочника - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Удалить строки табличной части документа/справочника

Данные > Примеры кода 1С > 1С 8.3 Документы
Перейти в основной раздел:
Удалить строки (по условию) в табличной части в 1С 8.3:
&НаСервере
Процедура УдалитьСтрокиВТЧпоУсловию()

   ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
   МассивСтрокУдалить = Новый Массив;

   // Вариант 1
   Для Каждого Строка Из ОтгрузкаСсылка.Номенклатура Цикл
       Если НЕ ЗначениеЗаполнено(Строка.Номенклатура) Тогда
           МассивСтрокУдалить.Добавить(Строка);
       КонецЕсли;
   КонецЦикла;

   Для Каждого ЭлементМассив Из МассивСтрокУдалить Цикл
       Объект.Номенклатура.Удалить(ЭлементМассив); //удаляем нужную строку
   КонецЦикла;

   // Вариант 2
   //КоличествоСтрок  = ОтгрузкаСсылка.Номенклатура.Количество()-1;
   //ИндексСтроки = КоличествоСтрок;
   //Для А = 0 по КоличествоСтрок Цикл
   //    Строка = ОтгрузкаСсылка.Номенклатура.Получить(ИндексСтроки);
   //    Если НЕ ЗначениеЗаполнено(Строка.Номенклатура) Тогда
   //        ОтгрузкаСсылка.Номенклатура.Удалить(Строка);
   //    КонецЕсли;
   //    ИндексСтроки = ИндексСтроки - 1;
   //КонецЦикла;

КонецПроцедуры

Удалить строки (с отбором) в табличной части в 1С 8.3:
&НаСервере
Процедура УдалитьСтрокиВТЧпоОтбору()

   ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');
   ОтгрузкаТоваров = ОтгрузкаСсылка.ПолучитьОбъект();
   СтруктураДляПоиска = Новый Структура("Количество", 0);

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

КонецПроцедуры
Удалить строки через Таблицу Значений (с отбором) в табличной части в 1С 8.3:
&НаСервере
Процедура УдалитьСтрокиВТЧпоОтборуЧерезТЗ()

   ОтгрузкаСсылка = Документы.ОтгрузкаТоваров.НайтиПоНомеру("МРБ-000123", '20200430');

   // Укажем условия отбора: Нужно оставить только строки где СубконтоКт1 = РБПНаПФР
   ПараметрыОтбора = Новый Структура("СубконтоКт1", Справочники.РасходыБудущихПериодов.РБПНаПФР);

   //Теперь выгружаем табличную часть в таблицу значений
   ТЗисходн=ОтгрузкаСсылка.Номенклатура.Выгрузить();

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

   //Очистим табличную часть
   ОтгрузкаСсылка.Номенклатура.Очистить();

   //Загружем в табличную часть новую таблицу значений
   ОтгрузкаСсылка.Номенклатура.Загрузить(ТЗ);

КонецПроцедуры
1
комментарий
Валерий
29 ноя 2023
Удаляю строки по условию (как описано в первом варианте):
Собираю строки, которые нужно удалить, в массив, потом удаляю:

Для каждого Элемент из СтрокиКУдалению Цикл
ТаблицаНачислений.НачисленнаяЗарплатаИВзносы.Удалить(Элемент);
КонецЦикла;
На выходе каждый раз получаю ошибку: "Значение индекса выходит за границы диапазона"
Что я делаю не так?
____________________
Copyright©, «Программист 1С в г.Минске», 12.01.2023
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому