Удаляет элемент из коллекции.
Синтаксис
Удалить(<Элемент>)Полное описание, параметры и ограничения
ВложенныеСхемыКомпоновкиДанных.Удалить (NestedDataCompositionSchemas.Delete)
ВложенныеСхемыКомпоновкиДанных (NestedDataCompositionSchemas)
Удалить (Delete)
Доступен, начиная с версии 8.1.
Синтаксис:
Удалить(<Элемент>)
Параметры:
<Элемент> (обязательный)
Тип: ВложеннаяСхемаКомпоновкиДанных.
Удаляемый элемент.
Описание:
Удаляет элемент из коллекции.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Вложенные схемы СКД: собственные запросы, readonly объекты и выбор полей
Родитель с буквальным ROOT/0 содержит два настоящих вложенных описания A01/3 и B02/5. Заполняем возвращённые readonly объекты схемы/настроек, выбираем реальные поля, временно выключаем Количество, редактируем порядок/состав каталога и полностью восстанавливаем независимо от копии.
Где и как запускать
Полный серверный общий модуль УчебныеЗадачи новой пустой конфигурации УчебныеВложенные85; собственная модель, здесь не запускался.
Подготовка
НОВАЯ отдельная учебная база, не копия рабочей: точно8.5.1.1343, конфигурация УчебныеВложенные85, совместимость Не использовать. Нет справочников, документов, регистров, расширений, подписок и заданий. Модули вручную пустые, кроме этого общего модуля.
Конфигуратор → Общие → Общие модули → УчебныеЗадачи: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставить ВЕСЬ основной код. Своя внешняя обработка УчебныеВложенные85 → управляемая Форма: команда/кнопка Выполнить с действием Выполнить. Полный модуль формы дан отдельно ниже; реквизиты не нужны.
Будущая ручная подготовка вне опыта: завершить прежний свой сеанс, сохранить, Конфигурация → Обновить конфигурацию базы данных (F7), открыть свежий свой клиент и свою обработку. Здесь ни F7, ни 1С, ни запросы/компоновка не запускались.
Записи базы не нужны: три собственных Local-источника принадлежат трём своим схемам, а не одному общему каталогу. У каждого набора свой полный буквальный запрос, явные поля Код Строка/Количество Число и AutoFields=Ложь. Настройки вложенных описаний получают два собственных выбранных поля.
Процедура ВыполнитьПример() Экспорт
ПроверитьСвойПустойСтенд();
Если ПривилегированныйРежим() Тогда
ВызватьИсключение "Привилегированный режим в своём опыте не нужен";
КонецЕсли;
Пусто = Новый Массив;
Имена = СтрРазделить("ПерваяВложенная85,ВтораяВложенная85", ",");
Корень = СоздатьСвойКорень();
Каталог = Корень.ВложенныеСхемыКомпоновкиДанных;
ПроверитьСвоиВложения(Корень, Пусто, Истина);
Первая = Каталог.Добавить();
ЗаполнитьСвоюВложенную(Корень, Первая, "ПерваяВложенная85");
ПроверитьСвоиВложения(Корень, СтрРазделить("ПерваяВложенная85", ","), Истина);
Вторая = Каталог.Вставить(0);
ЗаполнитьСвоюВложенную(Корень, Вторая, "ВтораяВложенная85");
ПроверитьСвоиВложения(Корень, СтрРазделить("ВтораяВложенная85,ПерваяВложенная85", ","), Истина);
Каталог.Сдвинуть(Вторая, 1);
ПроверитьСвоиВложения(Корень, Имена, Истина);
Копия = СоздатьСвойКорень();
ВосстановитьСвоиВложения(Копия);
ПроверитьСвоиВложения(Копия, Имена, Истина);
ПолеКоличество = Первая.Настройки.Выбор.Элементы.Получить(1);
Если ТипЗнч(ПолеКоличество) <> Тип("ВыбранноеПолеКомпоновкиДанных") Тогда
ВызватьИсключение "Нужно собственное поле выбора количества первой вложенной";
КонецЕсли;
ПолеКоличество.Использование = Ложь;
ПроверитьСвоиВложения(Корень, Имена, Ложь);
ПроверитьСвоиВложения(Копия, Имена, Истина);
ПолеКоличество.Использование = Истина;
ПроверитьСвоиВложения(Корень, Имена, Истина);
Каталог.Удалить(Первая);
ПроверитьСвоиВложения(Корень, СтрРазделить("ВтораяВложенная85", ","), Истина);
ПроверитьСвоиВложения(Копия, Имена, Истина);
НоваяПервая = Каталог.Вставить(0);
ЗаполнитьСвоюВложенную(Корень, НоваяПервая, "ПерваяВложенная85");
ПроверитьСвоиВложения(Корень, Имена, Истина);
Каталог.Очистить();
ПроверитьСвоиВложения(Корень, Пусто, Истина);
ПроверитьСвоиВложения(Копия, Имена, Истина);
ВосстановитьСвоиВложения(Корень);
ПроверитьСвоиВложения(Корень, Имена, Истина);
ПроверитьСвоиВложения(Копия, Имена, Истина);
Сообщить("Две собственные вложенные схемы и выбранные поля полностью восстановлены");
КонецПроцедуры
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедуры
Функция СвоеПолеВXML(Поле)
Если ТипЗнч(Поле) <> Тип("ПолеКомпоновкиДанных") Тогда
ВызватьИсключение "Сериализуется только собственное поле СКД, не объект или записи базы";
КонецЕсли;
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Попытка
СериализаторXDTO.ЗаписатьXML(Запись, Поле);
Возврат Запись.Закрыть();
Исключение
Запись.Закрыть();
ВызватьИсключение;
КонецПопытки;
КонецФункции
Функция СвойЗапросСхемы(Маркер)
Если Маркер = "Основы" Тогда
Возврат "ВЫБРАТЬ ""ROOT"" КАК Код, 0 КАК Количество";
ИначеЕсли Маркер = "Первой" Тогда
Возврат "ВЫБРАТЬ ""A01"" КАК Код, 3 КАК Количество";
ИначеЕсли Маркер = "Второй" Тогда
Возврат "ВЫБРАТЬ ""B02"" КАК Код, 5 КАК Количество";
КонецЕсли;
ВызватьИсключение "В собственном опыте только три известных буквальных схемы";
КонецФункции
Функция МаркерСвоегоВложения(Имя)
Если Имя = "ПерваяВложенная85" Тогда
Возврат "Первой";
ИначеЕсли Имя = "ВтораяВложенная85" Тогда
Возврат "Второй";
КонецЕсли;
ВызватьИсключение "В каталоге только два собственных вложенных описания";
КонецФункции
Процедура ЗаполнитьСвоюСхему(Схема, Маркер)
Запрос = СвойЗапросСхемы(Маркер);
Если ТипЗнч(Схема) <> Тип("СхемаКомпоновкиДанных") Или Схема.ИсточникиДанных.Количество() <> 0
Или Схема.НаборыДанных.Количество() <> 0 Или Схема.ВложенныеСхемыКомпоновкиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Заполняется только свой пустой возвращённый объект схемы";
КонецЕсли;
Источник = Схема.ИсточникиДанных.Добавить();
Источник.Имя = "Источник" + Маркер + "85";
Источник.ТипИсточникаДанных = "Local";
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
Если ТипЗнч(Набор) <> Тип("НаборДанныхЗапросСхемыКомпоновкиДанных") Тогда
ВызватьИсключение "Нужен собственный набор запроса";
КонецЕсли;
Набор.Имя = "Данные" + Маркер + "85";
Набор.ИсточникДанных = Источник.Имя;
Набор.АвтоЗаполнениеДоступныхПолей = Ложь;
Набор.Запрос = Запрос;
Имена = СтрРазделить("Код,Количество", ",");
Типы = СтрРазделить("Строка,Число", ",");
Для Индекс = 0 По 1 Цикл
Поле = Набор.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
Если ТипЗнч(Поле) <> Тип("ПолеНабораДанныхСхемыКомпоновкиДанных") Тогда
ВызватьИсключение "Нужно своё явно типизированное простое поле";
КонецЕсли;
Поле.Поле = Имена[Индекс];
Поле.ПутьКДанным = Имена[Индекс];
Поле.ТипЗначения = Новый ОписаниеТипов(Типы[Индекс]);
КонецЦикла;
ПроверитьСвоюСхему(Схема, Маркер);
КонецПроцедуры
Процедура ПроверитьСвоюСхему(Схема, Маркер)
ОжидаемыйЗапрос = СвойЗапросСхемы(Маркер);
Если ТипЗнч(Схема) <> Тип("СхемаКомпоновкиДанных") Или Схема.ИсточникиДанных.Количество() <> 1
Или Схема.НаборыДанных.Количество() <> 1 Тогда
ВызватьИсключение "Не совпал полный свой состав источника и набора";
КонецЕсли;
Источник = Схема.ИсточникиДанных.Получить(0);
Если ТипЗнч(Источник) <> Тип("ИсточникДанныхСхемыКомпоновкиДанных")
Или Источник.Имя <> "Источник" + Маркер + "85" Или Источник.ТипИсточникаДанных <> "Local" Тогда
ВызватьИсключение "Не совпал свой источник текущей схемы";
КонецЕсли;
Набор = Схема.НаборыДанных.Получить(0);
Если ТипЗнч(Набор) <> Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")
Или Набор.Имя <> "Данные" + Маркер + "85" Или Набор.ИсточникДанных <> Источник.Имя
Или Набор.Запрос <> ОжидаемыйЗапрос Или Набор.АвтоЗаполнениеДоступныхПолей
Или Набор.Поля.Количество() <> 2 Или Схема.НаборыДанных.Найти(Набор.Имя) <> Набор Тогда
ВызватьИсключение "Не совпали полный собственный запрос, флаг, состав полей и поиск";
КонецЕсли;
Имена = СтрРазделить("Код,Количество", ",");
Типы = СтрРазделить("Строка,Число", ",");
Для Индекс = 0 По 1 Цикл
Поле = Набор.Поля.Получить(Индекс);
Если ТипЗнч(Поле) <> Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")
Или Поле.Поле <> Имена[Индекс] Или Поле.ПутьКДанным <> Имена[Индекс]
Или ТипЗнч(Поле.ТипЗначения) <> Тип("ОписаниеТипов") Тогда
ВызватьИсключение "Не совпали полные свои поля, порядок, пути и типы";
КонецЕсли;
ПолныеТипы = Поле.ТипЗначения.Типы();
Если ПолныеТипы.Количество() <> 1 Или ПолныеТипы[0] <> Тип(Типы[Индекс]) Тогда
ВызватьИсключение "Не совпал единственный полный тип собственного поля";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьСвойВыбор(Настройки)
Если ТипЗнч(Настройки) <> Тип("НастройкиКомпоновкиДанных") Или Настройки.Выбор.Элементы.Количество() <> 0 Тогда
ВызватьИсключение "Заполняется собственный пустой возвращённый объект настроек";
КонецЕсли;
Имена = СтрРазделить("Код,Количество", ",");
Для Каждого Имя Из Имена Цикл
Элемент = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Если ТипЗнч(Элемент) <> Тип("ВыбранноеПолеКомпоновкиДанных") Тогда
ВызватьИсключение "Нужно своё явно выбранное поле, не группа или автоэлемент";
КонецЕсли;
Элемент.Поле = Новый ПолеКомпоновкиДанных(Имя);
Элемент.Использование = Истина;
КонецЦикла;
ПроверитьСвойВыбор(Настройки, Истина);
КонецПроцедуры
Процедура ПроверитьСвойВыбор(Настройки, КоличествоВключено)
Если ТипЗнч(Настройки) <> Тип("НастройкиКомпоновкиДанных")
Или ТипЗнч(Настройки.Выбор) <> Тип("ВыбранныеПоляКомпоновкиДанных")
Или ТипЗнч(Настройки.Выбор.Элементы) <> Тип("КоллекцияВыбранныхПолейКомпоновкиДанных")
Или Настройки.Выбор.Элементы.Количество() <> 2 Тогда
ВызватьИсключение "Нужен полный свой выбор двух полей";
КонецЕсли;
Имена = СтрРазделить("Код,Количество", ",");
Для Индекс = 0 По 1 Цикл
Элемент = Настройки.Выбор.Элементы.Получить(Индекс);
ОжидаемоеИспользование = Истина;
Если Индекс = 1 Тогда
ОжидаемоеИспользование = КоличествоВключено;
КонецЕсли;
Если ТипЗнч(Элемент) <> Тип("ВыбранноеПолеКомпоновкиДанных")
Или ТипЗнч(Элемент.Поле) <> Тип("ПолеКомпоновкиДанных")
Или ТипЗнч(Элемент.Использование) <> Тип("Булево") Или Элемент.Использование <> ОжидаемоеИспользование Тогда
ВызватьИсключение "Не совпали тип и точный флаг собственного выбранного поля";
КонецЕсли;
Если СвоеПолеВXML(Элемент.Поле) <> СвоеПолеВXML(Новый ПолеКомпоновкиДанных(Имена[Индекс])) Тогда
ВызватьИсключение "Не совпал полный путь собственного выбранного поля";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция СоздатьСвойКорень()
Корень = Новый СхемаКомпоновкиДанных;
ЗаполнитьСвоюСхему(Корень, "Основы");
ЗаполнитьСвойВыбор(Корень.НастройкиПоУмолчанию);
Пусто = Новый Массив;
ПроверитьСвоиВложения(Корень, Пусто, Истина);
Возврат Корень;
КонецФункции
Процедура ЗаполнитьСвоюВложенную(Корень, Описание, Имя)
Если ТипЗнч(Описание) <> Тип("ВложеннаяСхемаКомпоновкиДанных")
Или Корень.ВложенныеСхемыКомпоновкиДанных.Индекс(Описание) < 0 Тогда
ВызватьИсключение "Нужно текущее описание именно своего корневого каталога";
КонецЕсли;
Маркер = МаркерСвоегоВложения(Имя);
Описание.Имя = Имя;
Описание.Заголовок = "Учебная схема " + Маркер;
СхемаВложения = Описание.Схема;
НастройкиВложения = Описание.Настройки;
Если ТипЗнч(СхемаВложения) <> Тип("СхемаКомпоновкиДанных") Или ТипЗнч(НастройкиВложения) <> Тип("НастройкиКомпоновкиДанных") Тогда
ВызватьИсключение "Readonly свойства должны вернуть собственные объекты схемы и настроек";
КонецЕсли;
ЗаполнитьСвоюСхему(СхемаВложения, Маркер);
ЗаполнитьСвойВыбор(НастройкиВложения);
КонецПроцедуры
Процедура ПроверитьСвоиВложения(Корень, Имена, КоличествоПервойВключено)
ПроверитьСвоюСхему(Корень, "Основы");
ПроверитьСвойВыбор(Корень.НастройкиПоУмолчанию, Истина);
Каталог = Корень.ВложенныеСхемыКомпоновкиДанных;
Если ТипЗнч(Каталог) <> Тип("ВложенныеСхемыКомпоновкиДанных") Или Каталог.Количество() <> Имена.Количество() Тогда
ВызватьИсключение "Не совпал полный свой каталог вложенных описаний";
КонецЕсли;
Для Индекс = 0 По Имена.Количество() - 1 Цикл
Описание = Каталог.Получить(Индекс);
Маркер = МаркерСвоегоВложения(Имена[Индекс]);
Если ТипЗнч(Описание) <> Тип("ВложеннаяСхемаКомпоновкиДанных")
Или Описание.Имя <> Имена[Индекс] Или Описание.Заголовок <> "Учебная схема " + Маркер
Или Каталог.Индекс(Описание) <> Индекс Или Каталог[Индекс] <> Описание
Или Каталог[Имена[Индекс]] <> Описание Или Каталог.Найти(Имена[Индекс]) <> Описание Тогда
ВызватьИсключение "Не совпали имена, заголовки, полный порядок и поиск своих описаний";
КонецЕсли;
СхемаВложения = Описание.Схема;
ПроверитьСвоюСхему(СхемаВложения, Маркер);
Если СхемаВложения.ВложенныеСхемыКомпоновкиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Собственные дочерние схемы без следующих вложений";
КонецЕсли;
КоличествоВключено = Истина;
Если Описание.Имя = "ПерваяВложенная85" Тогда
КоличествоВключено = КоличествоПервойВключено;
КонецЕсли;
ПроверитьСвойВыбор(Описание.Настройки, КоличествоВключено);
КонецЦикла;
Если Каталог.Найти("НетТакойВложенной85") <> Неопределено Тогда
ВызватьИсключение "Отсутствующее своё описание не должно находиться";
КонецЕсли;
КонецПроцедуры
Процедура ВосстановитьСвоиВложения(Корень)
Пусто = Новый Массив;
ПроверитьСвоиВложения(Корень, Пусто, Истина);
Каталог = Корень.ВложенныеСхемыКомпоновкиДанных;
Первая = Каталог.Добавить();
ЗаполнитьСвоюВложенную(Корень, Первая, "ПерваяВложенная85");
Вторая = Каталог.Добавить();
ЗаполнитьСвоюВложенную(Корень, Вторая, "ВтораяВложенная85");
КонецПроцедурыУчебныеВложенные85.Форма
Своя внешняя обработка УчебныеВложенные85 → управляемая Форма → Модуль
Полный отдельный модуль своей формы с серверным вызовом; здесь не запускался.
&НаКлиенте
Процедура Выполнить(Команда)
ВыполнитьНаСервере();
Сообщить("Вложенные схемы, собственные настройки и независимое восстановление проверены");
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
УчебныеЗадачи.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
Описание берётся через Корень.ВложенныеСхемыКомпоновкиДанных.Добавить() или Вставить(0), без аргумента типа. Это не НаборДанныхОбъединение и не прямой Новый. Имя — программный идентификатор, Заголовок — строка для выбора вложенного объекта пользователем.
Схема и Настройки у описания — readonly. Получаем реальные СхемаВложения/НастройкиВложения, проверяем типы, заполняем их содержимое. Не присваиваем Описание.Схема = Новый ... и не подменяем её родительской схемой, поэтому в этом коде не строится цикл самоссылок.
Каждая дочерняя схема имеет собственный источник/набор с другим полным запросом. Настройки описания получают ПолеКомпоновкиДанных("Код") и ПолеКомпоновкиДанных("Количество") с булевым Использование=Истина. У родителя отдельно заполняется НастройкиПоУмолчанию.
Не предполагаем равенство Описание.Настройки и Описание.Схема.НастройкиПоУмолчанию. По контракту первое применяется к настройкам вложенного объекта при добавлении в настройки. Здесь изменяем именно возвращённое Настройки описания и проверяем его состав; разрешение/слияние настроек движком не запускается.
Добавить первую вложенную в конец; вторую Вставить(0), проверить обратный порядок, затем Сдвинуть(Вторая,1). Обращение по числовому индексу, имени, Индекс/Получить/Найти должны указывать на текущие собственные описания; отсутствующее имя даёт Неопределено.
Десять контрольных состояний оригинала сверяют весь родительский источник/запрос/типы полей/выбор, полный текущий каталог и все дочерние источники, имена, заголовки, запросы, флаги и пути полей. У дочерних схем нет следующего уровня вложенности. Выбор сравнивается по полному XML собственного ПолеКомпоновкиДанных, не по Строка(Поле).
Заново построить независимую копию со своими дочерними объектами. У первой вложенной оригинала временно выключить только Количество в Настройки.Выбор, проверить точный Булево Ложь, сохранность Код и второго описания; копия и родительский выбор остаются включёнными. Затем вернуть Истина.
Удалить первую вложенную как объект; прежние ссылки на её схему/выбор не использовать. Вставить новое описание в0 и заново заполнить всю дочернюю схему/настройки. Очистить собственный каталог, проверить0 при сохранённом родителе, затем заново создать обе вложенные. Пять сверок копии показывают сохранность её полного состояния.
Как проверить результат
Будущий итог модели: у родителя ROOT/0, вложенные ПерваяВложенная85/ВтораяВложенная85 содержат A01/3 и B02/5. В каждой схеме ровно свой источник и набор, поля Код Строка/Количество Число. Родительский выбор и оба выбора описаний содержат два точных пути с Использование=Истина; копия имеет тот же состав.
Собственное поле XML сериализуется только в строку: helper проверяет тип ПолеКомпоновкиДанных, не принимает метаданные или записи базы. Ни один объект/набор записей базы не сериализуется. Сопоставление XML подтверждает полный путь модели, не исполняет отбор или запрос.
Будущий отрицательный контроль: после заполнения первой вложенной заменить только её Настройки.Выбор.Элементы.Получить(1).Поле на Новый ПолеКомпоновкиДанных("Код"). При прежнем количестве2 и флагах контроль должен отказать по полному пути. Другой контроль: изменить число3 на30 в полном запросе первой дочерней схемы. Здесь проверки не выполнялись.
runtimeVerifiedScenarios=0. Только статическая сверка контрактов установленной справки и итогового HTML. Нет исполнения1С, чтения/записи записей, запуска запросов, применения вложений к реальным настройкам, компиляции/вывода, сети или печати.
Ожидаемый результат
Содержательный каталог двух вложенных схем с реально заполненными readonly объектами, полным выбором полей и независимым восстановлением.
На что обратить внимание
Схема, Настройки и корневой каталог readonly: нельзя заменять свойства целиком. Это не запрещает работу с собственными коллекциями возвращённых объектов.
Вставить вложенной получает только абсолютный индекс, а не Тип. Индекс/Удалить — текущий объект описания, Сдвинуть — объект/относительное смещение. После удаления/очистки описания создаются заново.
Не предполагаются совместное владение настройками, рекурсивный поиск по чужим корням или перенос объектов оригинала в копию. По именам ищем именно в своём каталоге.
Пустой каталог после очистки — состояние собственного редактора. Нет утверждения, что удалённое описание уже добавлено в структуру отчёта или остаётся там валидным. Здесь вложенные объекты не добавляются к структуре настроек и отчёт не запускается.
Заголовок описан как текст выбора пользователем, но настоящий диалог выбора и видимый отчёт не проверены. Перестановка каталога не доказывает сортировку результатов.
В КА2 ИсполнениеПланаПродаж действительно есть вложенные ПоКлиентам/ПоПодразделениям с заголовками По клиентам/По подразделениям; у каждой свои schema и settings. В собственном примере повторён принцип, а рабочий отчёт и выгрузка не изменяются.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.