Не получается удалить строку в табличной части документа

1. Airat116 30.09.21 16:49 Сейчас в теме
Здравствуйте, помогите пожалуйста
как удалить строку в табличной части с обработкой

Сделал такую обработку
Команда 1 выполняет
заполнение табл/ч строк которые нужно удалить
Результат = Запрос.Выполнить();

	ВыборкаДетальныеЗаписи = Результат.Выбрать();

	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		НоваяСтрока = Данные.Добавить();
		НоваяСтрока.СсылкаНаБП			= ВыборкаДетальныеЗаписи.СсылкаНаБП;
		НоваяСтрока.СсылкаНаДокумент        = ВыборкаДетальныеЗаписи.СсылкаТТН;
		НоваяСтрока.ДокументПлатежка 	= ВыборкаДетальныеЗаписи.ПлатежкаДокумент;
		НоваяСтрока.Сумма 				= ВыборкаДетальныеЗаписи.Сумма;
	КонецЦикла;

Команда 2 удаляю у документа строку которая нужно удалить
Для каждого Строка Из Данные Цикл
		ДокОбъект = Строка.СсылкаНаДокумент.ПолучитьОбъект();
		СтрокаТабличнойЧасти = ДокОбъект.ТранспортныеУслуги.Получить(Строка.СсылкаНаБП);
		УдалитьСтрокуТабл = ДокОбъект.ТранспортныеУслуги.Удалить(СтрокаТабличнойЧасти);
		
		ДокОбъект.ОбменДанными.Загрузка = Истина;
		//ДокОбъект.Записать();
КонецЦикла;
Показать
По теме из базы знаний
Найденные решения
8. Release 30.09.21 21:03 Сейчас в теме
(1)
Для каждого Строка Из Данные Цикл
    ДокОбъект = Строка.СсылкаНаДокумент.ПолучитьОбъект();
    СтрокиТЧ = ДокОбъект.ТранспортныеУслуги.НайтиСтроки(Новый Структура("ПолеТЧ_СоСсылкой", Строка.СсылкаНаБП));
    Для каждого СтрокаТЧ из СтрокиТЧ Цикл
        ИндексСтроки = ДокОбъект.ТранспортныеУслуги.Индекс(СтрокаТЧ);
        ДокОбъект.ТранспортныеУслуги.Удалить(ИндексСтроки);
        // Или ДокОбъект.ТранспортныеУслуги.Удалить(ДокОбъект.ТранспортныеУслуги.Индекс(СтрокаТЧ));
    КонецЦикла;

    ДокОбъект.ОбменДанными.Загрузка = Истина;
    //ДокОбъект.Записать();
КонецЦикла; 
Показать

Или
Для каждого Строка Из Данные Цикл
    ДокОбъект = Строка.СсылкаНаДокумент.ПолучитьОбъект();
    
    Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Документ.ТТН.ТранспортныеУслуги КАК тчТранспортныеУслуги ГДЕ тчТранспортныеУслуги.Ссылка = &СсылкаТТН И тчТранспортныеУслуги.ПолеТЧ_СоСсылкой <> &СсылкаНаБП) УПОРЯДОЧИТЬ ПО тчТранспортныеУслуги.НомерСтроки");
    Запрос.УстановитьПараметр("СсылкаТТН ", Строка.СсылкаНаДокумент);
    Запрос.УстановитьПараметр("СсылкаНаБП", Строка.СсылкаНаБП);
    ДокОбъект.ТранспортныеУслуги.Загрузить(Запрос.Выполнить().Выгрузить());

    ДокОбъект.ОбменДанными.Загрузка = Истина;
    //ДокОбъект.Записать();
КонецЦикла; 
Показать

НО! Если в ВыборкаДетальныеЗаписи повторяются значения СсылкаТТН, то лучше оптимизировать, чтобы удалить все (не)нужные строки за одно обращение к объекту, а не "дёргать" объект документа по каждому значению.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. Release 30.09.21 21:03 Сейчас в теме
(1)
Для каждого Строка Из Данные Цикл
    ДокОбъект = Строка.СсылкаНаДокумент.ПолучитьОбъект();
    СтрокиТЧ = ДокОбъект.ТранспортныеУслуги.НайтиСтроки(Новый Структура("ПолеТЧ_СоСсылкой", Строка.СсылкаНаБП));
    Для каждого СтрокаТЧ из СтрокиТЧ Цикл
        ИндексСтроки = ДокОбъект.ТранспортныеУслуги.Индекс(СтрокаТЧ);
        ДокОбъект.ТранспортныеУслуги.Удалить(ИндексСтроки);
        // Или ДокОбъект.ТранспортныеУслуги.Удалить(ДокОбъект.ТранспортныеУслуги.Индекс(СтрокаТЧ));
    КонецЦикла;

    ДокОбъект.ОбменДанными.Загрузка = Истина;
    //ДокОбъект.Записать();
КонецЦикла; 
Показать

Или
Для каждого Строка Из Данные Цикл
    ДокОбъект = Строка.СсылкаНаДокумент.ПолучитьОбъект();
    
    Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ Документ.ТТН.ТранспортныеУслуги КАК тчТранспортныеУслуги ГДЕ тчТранспортныеУслуги.Ссылка = &СсылкаТТН И тчТранспортныеУслуги.ПолеТЧ_СоСсылкой <> &СсылкаНаБП) УПОРЯДОЧИТЬ ПО тчТранспортныеУслуги.НомерСтроки");
    Запрос.УстановитьПараметр("СсылкаТТН ", Строка.СсылкаНаДокумент);
    Запрос.УстановитьПараметр("СсылкаНаБП", Строка.СсылкаНаБП);
    ДокОбъект.ТранспортныеУслуги.Загрузить(Запрос.Выполнить().Выгрузить());

    ДокОбъект.ОбменДанными.Загрузка = Истина;
    //ДокОбъект.Записать();
КонецЦикла; 
Показать

НО! Если в ВыборкаДетальныеЗаписи повторяются значения СсылкаТТН, то лучше оптимизировать, чтобы удалить все (не)нужные строки за одно обращение к объекту, а не "дёргать" объект документа по каждому значению.
9. Airat116 01.10.21 10:08 Сейчас в теме
2. FatPanzer 30.09.21 16:57 Сейчас в теме
Строка.СсылкаНаБП - что там? Ссылка? Вот поэтому и не работает.
3. Airat116 30.09.21 17:01 Сейчас в теме
(2) Да, там ссылка была
Получается какой параметр мне туда нужно передавать?
4. FatPanzer 30.09.21 17:02 Сейчас в теме
(3) Правильный надо передавать. Для этого есть документация и СП.
5. Release 30.09.21 17:24 Сейчас в теме
(3)
Табличная часть (Tabular section)
Синтаксис:
Получить(<Индекс>)

Синтаксис:
Удалить(<Индекс>)

Синтаксис:
Индекс(<Строка>)

Синтаксис:
Найти(<Значение>, <Колонки>)

Синтаксис:
НайтиСтроки(<ПараметрыОтбора>)
Показать
6. provadyuga 99 30.09.21 19:39 Сейчас в теме
Удаляет текущую строку из ТЧ "Данные"
&НаКлиенте
Процедура УдалитьСтрокуТЧДанные(Команда)
	Объект.Данные.Удалить(Элементы.Данные.ТекущаяСтрока);
КонецПроцедуры
7. Release 30.09.21 20:34 Сейчас в теме
(6) В том то и дело, что автору не нужно удалить текущую строку, ему нужно удалить строки с определенными ссылками.
Т.е. нужно найти строки по ссылкам и получить индекс для каждой, а потом удалять.
Либо запросом выбрать строки ТЧ со всеми полями без этих ссылок, загрузить результат в эту ТЧ.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот