Тип: Строка. Идентификатор вложенного объекта.
Полное описание, параметры и ограничения
ВложенныйОбъектМакетаКомпоновкиДанных.Идентификатор (DataCompositionTemplateNestedObject.ID)
ВложенныйОбъектМакетаКомпоновкиДанных (DataCompositionTemplateNestedObject)
Идентификатор (ID)
Доступен, начиная с версии 8.1.
Использование:
Чтение и запись.
Описание:
Тип: Строка.
Идентификатор вложенного объекта.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Готовый макет вложенного отчета: дочерняя компоновка и полный вывод
Из своей схемы получаем настоящее вложение в теле готового макета. Проверяем родительский и дочерний отчеты, читаем реальные параметры, редактируем две строковые настройки только в независимом черновике и восстанавливаем весь макет.
Где и как запускать
Полный серверный общий модуль нового собственного стенда УчебныеМакетыВложений85; выбранный урок запускается отдельно.
Подготовка
Создать НОВУЮ отдельную пустую учебную базу, не рабочую и не ее копию: платформа точно 8.5.1.1343; конфигурация УчебныеМакетыВложений85, совместимость Не использовать. Без бизнес-объектов, регистров, подписок, заданий и расширений.
Конфигуратор → Общие → Общие модули → УчебныеМакетыВложений85: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставить ВЕСЬ основной код выбранного урока. Уроки запускаются отдельно: два одноименных модуля не смешивать.
Конфигуратор → Обработки → УчебныеМакетыВложений85 → Формы → Пульт: управляемая форма, команда Выполнить и кнопка с этой командой. Действие команды Выполнить. Полный модуль своей формы дан отдельно ниже; реквизиты не нужны.
Сохранить и обновить собственную конфигурацию базы данных (F7). Запустить свежий свой клиент, Все функции → Обработки → УчебныеМакетыВложений85 → Выполнить. Здесь это будущие ручные шаги; 1С и F7 не запускались.
Данные создаются только буквальным Local-запросом: Книга3×250=750, Ручка1×50=50. Четыре выбранных поля и одна группа деталей готовятся кодом; никакие справочники или документы не нужны.
Используется стандартный генератор табличного документа, не генератор коллекции значений. Проверка ищет настоящие заголовки полей, по найденным колонкам читает реальные числа; приемник заранее не заполняется.
XML хранится только строками памяти. Копии создаются для независимого редакторского опыта и свежего вывода; файлов, архивов и резервных копий здесь нет.
runtimeVerifiedScenarios=0. Выполнялись статические проверки установленной справки и итогового HTML. Будущий запуск должен пройти все встроенные проверки; реальный UI, печать, сеть и production здесь не запускались.
Функция ВыполнитьПример() Экспорт
ПроверитьСвойПустойСтенд();
Корень = Новый СхемаКомпоновкиДанных;
ЗаполнитьСвоиДанные(Корень);
Описание = Корень.ВложенныеСхемыКомпоновкиДанных.Добавить();
Описание.Имя = "ТоварыВложения85";
Описание.Заголовок = "Товары учебного вложения";
ЗаполнитьСвоиДанные(Описание.Схема);
ЗаполнитьСвоиНачальныеНастройки(Описание.Настройки);
ТекстСхемы = СвойОбъектРасшифровкиВСтроку(Корень);
Редактор = Новый КомпоновщикНастроекКомпоновкиДанных;
Редактор.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Корень));
Редактор.ЗагрузитьНастройки(Корень.НастройкиПоУмолчанию);
Доступный = Редактор.Настройки.ДоступныеОбъекты.Элементы.Найти(Описание.Имя);
Если Доступный = Неопределено Или Доступный.Заголовок <> Описание.Заголовок Тогда
ВызватьИсключение "Собственное имя должно разрешаться в настоящем источнике вложений";
КонецЕсли;
Настройка = Редактор.Настройки.Структура.Добавить(Тип("НастройкиВложенногоОбъектаКомпоновкиДанных"));
Настройка.УстановитьИдентификатор(Описание.Имя);
Настройка.Имя = "СтрокиТоваров85";
Настройка.Использование = Истина;
Если Настройка.Настройки.Выбор.Элементы.Количество() <> 4 Или Настройка.Настройки.Структура.Количество() <> 1 Тогда
ВызватьИсключение "Начальные дочерние настройки должны быть загружены из своего источника";
КонецЕсли;
Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = Компоновщик.Выполнить(Корень, Редактор.ПолучитьНастройки());
Вложение = ПолучитьСвоеВложениеМакета(Макет);
ИмяВложения = Вложение.Имя;
ИдентификаторВложения = Вложение.Идентификатор;
Параметры = Вложение.ЗначенияПараметров;
СоставПараметров = "";
Для Номер = 0 По Параметры.Количество() - 1 Цикл
ЗначениеПараметра = Параметры.Получить(Номер);
Если ТипЗнч(ЗначениеПараметра) <> Тип("ЗначениеПараметраМакетаКомпоновкиДанных")
Или Параметры.Индекс(ЗначениеПараметра) <> Номер
Или Параметры.Найти(ЗначениеПараметра.Имя) <> ЗначениеПараметра Тогда
ВызватьИсключение "Имя, индекс и поиск должны принадлежать настоящему параметру этого вложения";
КонецЕсли;
СоставПараметров = СоставПараметров + ЗначениеПараметра.Имя + "=" + Строка(ЗначениеПараметра.Значение) + "; ";
КонецЦикла;
ТекстМакета = СвойОбъектРасшифровкиВСтроку(Макет);
ТекстДочернегоМакета = СвойОбъектРасшифровкиВСтроку(Вложение.КомпоновкаДанных);
ПроверитьСвойТабличныйВывод(Макет, "");
ПроверитьСвойТабличныйВывод(Вложение.КомпоновкаДанных, "");
Черновик = СвойОбъектРасшифровкиИзСтроки(ТекстМакета, Тип("МакетКомпоновкиДанных"));
ЧерновоеВложение = ПолучитьСвоеВложениеМакета(Черновик);
ЧерновоеВложение.Имя = "ЧерновоеИмя85";
ЧерновоеВложение.Идентификатор = "ЧерновойID85";
Если ЧерновоеВложение.Имя <> "ЧерновоеИмя85" Или ЧерновоеВложение.Идентификатор <> "ЧерновойID85"
Или СвойОбъектРасшифровкиВСтроку(ЧерновоеВложение.КомпоновкаДанных) <> ТекстДочернегоМакета
Или Вложение.Имя <> ИмяВложения Или Вложение.Идентификатор <> ИдентификаторВложения
Или СвойОбъектРасшифровкиВСтроку(Макет) <> ТекстМакета Тогда
ВызватьИсключение "Редактируются только две строки полного независимого черновика";
КонецЕсли;
ЧерновоеВложение.Имя = ИмяВложения;
ЧерновоеВложение.Идентификатор = ИдентификаторВложения;
Если СвойОбъектРасшифровкиВСтроку(Черновик) <> ТекстМакета Тогда
ВызватьИсключение "После возврата двух строк весь собственный черновик, включая параметры, должен совпасть с оригиналом";
КонецЕсли;
Восстановленный = СвойОбъектРасшифровкиИзСтроки(ТекстМакета, Тип("МакетКомпоновкиДанных"));
ВосстановленноеВложение = ПолучитьСвоеВложениеМакета(Восстановленный);
Если ВосстановленноеВложение.Имя <> ИмяВложения Или ВосстановленноеВложение.Идентификатор <> ИдентификаторВложения
Или СвойОбъектРасшифровкиВСтроку(Восстановленный) <> ТекстМакета Тогда
ВызватьИсключение "Восстановление всего макета должно сохранить все исходные связи и строки";
КонецЕсли;
ПроверитьСвойТабличныйВывод(Восстановленный, "");
Если СвойОбъектРасшифровкиВСтроку(Корень) <> ТекстСхемы Тогда
ВызватьИсключение "Скомпилированный макет не должен подменять исходную схему";
КонецЕсли;
Возврат "Вложение: имя=" + ИмяВложения + "; ID=" + ИдентификаторВложения
+ "; параметров=" + Строка(Параметры.Количество()) + "; " + СоставПараметров
+ "родитель и дочерний макет: количество4, сумма800";
КонецФункции
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьСвоиДанные(Схема)
Источник = Схема.ИсточникиДанных.Добавить();
Источник.Имя = "УчебныйИсточник";
Источник.ТипИсточникаДанных = "Local";
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
Набор.Имя = "УчебныеТовары";
Набор.ИсточникДанных = Источник.Имя;
Набор.АвтоЗаполнениеДоступныхПолей = Истина;
Набор.Запрос = "ВЫБРАТЬ
| ""Книга"" КАК Наименование,
| 3 КАК Количество,
| 250 КАК Цена,
| 750 КАК Сумма
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Ручка"", 1, 50, 50";
КонецПроцедуры
Процедура ЗаполнитьСвоиНачальныеНастройки(Настройки)
Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество,Цена,Сумма", ",") Цикл
Выбранное = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Выбранное.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
Выбранное.Использование = Истина;
КонецЦикла;
Детали = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Детали.Использование = Истина;
АвтоВыбор = Детали.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбор.Использование = Истина;
КонецПроцедуры
Функция ПолучитьСвоеВложениеМакета(Макет)
Если ТипЗнч(Макет) <> Тип("МакетКомпоновкиДанных") Тогда
ВызватьИсключение "Нужен полный собственный скомпилированный макет";
КонецЕсли;
Найденный = Неопределено;
Для Каждого Часть Из Макет.Тело Цикл
Если ТипЗнч(Часть) = Тип("ВложенныйОбъектМакетаКомпоновкиДанных") Тогда
Если Найденный <> Неопределено Тогда
ВызватьИсключение "В этом своем отчете должно быть только одно вложение";
КонецЕсли;
Найденный = Часть;
КонецЕсли;
КонецЦикла;
Если Найденный = Неопределено Тогда
ВызватьИсключение "Компоновщик должен создать настоящий вложенный объект в теле родителя";
КонецЕсли;
Если ТипЗнч(Найденный.КомпоновкаДанных) <> Тип("МакетКомпоновкиДанных")
Или ТипЗнч(Найденный.ЗначенияПараметров) <> Тип("ЗначенияПараметровМакетаКомпоновкиДанных")
Или ТипЗнч(Найденный.Имя) <> Тип("Строка") Или ТипЗнч(Найденный.Идентификатор) <> Тип("Строка") Тогда
ВызватьИсключение "Не совпал тип настоящего дочернего макета, параметров или строковых реквизитов";
КонецЕсли;
Возврат Найденный;
КонецФункции
Процедура ПроверитьСвойТабличныйВывод(Макет, Заголовок)
Копия = СвойОбъектРасшифровкиИзСтроки(СвойОбъектРасшифровкиВСтроку(Макет), Тип("МакетКомпоновкиДанных"));
Документ = СформироватьСвойДокумент(Копия);
Если Документ.ВысотаТаблицы = 0 Или Документ.ВысотаТаблицы > 200
Или Документ.ШиринаТаблицы = 0 Или Документ.ШиринаТаблицы > 100 Тогда
ВызватьИсключение "Ожидается только собственный небольшой табличный отчет";
КонецЕсли;
Колонки = Новый Соответствие;
СтрокаЗаголовков = 0;
ЗаголовокНайден = Заголовок = "";
Для НомерСтроки = 1 По Документ.ВысотаТаблицы Цикл
Кандидат = Новый Соответствие;
Для НомерКолонки = 1 По Документ.ШиринаТаблицы Цикл
Текст = СокрЛП(Документ.Область(НомерСтроки, НомерКолонки).Текст);
Если Заголовок <> "" И Текст = Заголовок Тогда
ЗаголовокНайден = Истина;
КонецЕсли;
Если Текст = "Наименование" Или Текст = "Количество" Или Текст = "Цена" Или Текст = "Сумма" Тогда
Если Кандидат.Получить(Текст) <> Неопределено Тогда
ВызватьИсключение "В собственной строке заголовков не должно быть дублей поля";
КонецЕсли;
Кандидат.Вставить(Текст, НомерКолонки);
КонецЕсли;
КонецЦикла;
Если Кандидат.Количество() = 4 Тогда
Если СтрокаЗаголовков <> 0 Тогда
ВызватьИсключение "В этом собственном опыте только одна четырехпольная таблица";
КонецЕсли;
СтрокаЗаголовков = НомерСтроки;
Колонки = Кандидат;
КонецЕсли;
КонецЦикла;
Если СтрокаЗаголовков = 0 Или Не ЗаголовокНайден Тогда
ВызватьИсключение "Не найдены настоящий заголовок и все четыре заголовка полей";
КонецЕсли;
Книга = Ложь;
Ручка = Ложь;
ИтогКоличество = 0;
ИтогСумма = 0;
Для НомерСтроки = СтрокаЗаголовков + 1 По Документ.ВысотаТаблицы Цикл
Наименование = СокрЛП(Документ.Область(НомерСтроки, Колонки.Получить("Наименование")).Текст);
Количество = ПрочитатьСвоеЧисло(Документ.Область(НомерСтроки, Колонки.Получить("Количество")));
Цена = ПрочитатьСвоеЧисло(Документ.Область(НомерСтроки, Колонки.Получить("Цена")));
Сумма = ПрочитатьСвоеЧисло(Документ.Область(НомерСтроки, Колонки.Получить("Сумма")));
Если Наименование <> "Книга" И Наименование <> "Ручка"
И (Количество <> Неопределено Или Цена <> Неопределено Или Сумма <> Неопределено) Тогда
ВызватьИсключение "В собственном отчете без итоговых строк не должно быть посторонних числовых строк";
КонецЕсли;
Если Наименование = "Книга" Или Наименование = "Ручка" Тогда
Если Количество = Неопределено Или Цена = Неопределено Или Сумма = Неопределено Тогда
ВызватьИсключение "В реальной строке товара должны находиться три настоящих числа";
КонецЕсли;
Если Наименование = "Книга" Тогда
Если Книга Или Количество <> 3 Или Цена <> 250 Или Сумма <> 750 Тогда
ВызватьИсключение "Книга должна выводиться ровно один раз: 3, 250, 750";
КонецЕсли;
Книга = Истина;
Иначе
Если Ручка Или Количество <> 1 Или Цена <> 50 Или Сумма <> 50 Тогда
ВызватьИсключение "Ручка должна выводиться ровно один раз: 1, 50, 50";
КонецЕсли;
Ручка = Истина;
КонецЕсли;
ИтогКоличество = ИтогКоличество + Количество;
ИтогСумма = ИтогСумма + Сумма;
КонецЕсли;
КонецЦикла;
Если Не Книга Или Не Ручка Или ИтогКоличество <> 4 Или ИтогСумма <> 800 Тогда
ВызватьИсключение "Настоящие строки должны сохранить количество4 и сумму800";
КонецЕсли;
КонецПроцедуры
Функция СформироватьСвойДокумент(СвойМакет)
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(СвойМакет);
Документ = Новый ТабличныйДокумент;
Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
Вывод.ОтображатьПроцентВывода = Ложь;
Вывод.УстановитьДокумент(Документ);
РезультатВывода = Вывод.Вывести(Процессор, Ложь);
Если ТипЗнч(РезультатВывода) <> Тип("ТабличныйДокумент") Тогда
ВызватьИсключение "Не получен собственный табличный документ";
КонецЕсли;
Возврат РезультатВывода;
КонецФункции
Функция ПрочитатьСвоеЧисло(Ячейка)
Если Ячейка.СодержитЗначение Тогда
Значение = Ячейка.Значение;
Если ТипЗнч(Значение) = Тип("Число") Тогда
Возврат Значение;
КонецЕсли;
Возврат Неопределено;
КонецЕсли;
Текст = СтрЗаменить(СтрЗаменить(СокрЛП(Ячейка.Текст), Символ(160), ""), " ", "");
Если Текст = "" Тогда
Возврат Неопределено;
КонецЕсли;
ЕстьЦифра = Ложь;
Для Позиция = 1 По СтрДлина(Текст) Цикл
Знак = Сред(Текст, Позиция, 1);
Если СтрНайти("0123456789", Знак) > 0 Тогда
ЕстьЦифра = Истина;
ИначеЕсли СтрНайти(",.-", Знак) = 0 Тогда
Возврат Неопределено;
КонецЕсли;
КонецЦикла;
Если Не ЕстьЦифра Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Число(Текст);
КонецФункции
Функция СвойОбъектРасшифровкиВСтроку(Объект)
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(Запись, Объект);
Возврат Запись.Закрыть();
КонецФункции
Функция СвойОбъектРасшифровкиИзСтроки(СтрокаXML, ТребуемыйТип)
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(СтрокаXML);
Попытка
Объект = СериализаторXDTO.ПрочитатьXML(Чтение, ТребуемыйТип);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Если ТипЗнч(Объект) <> ТребуемыйТип Тогда
ВызватьИсключение "Нужен полный собственный типизированный объект, не кусок ссылок";
КонецЕсли;
Возврат Объект;
КонецФункцииУчебныеМакетыВложений85.Пульт
УчебныеМакетыВложений85 → Обработки → УчебныеМакетыВложений85 → Формы → Пульт → Модуль
Полный модуль собственной управляемой формы; здесь не выполнялся.
&НаКлиенте
Процедура Выполнить(Команда)
Сообщить(ВыполнитьНаСервере());
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВыполнитьНаСервере()
Возврат УчебныеМакетыВложений85.ВыполнитьПример();
КонецФункцииРазбор по шагам
Свои родительская и дочерняя схемы создаются раздельно. Настройки описания дочерней схемы подготовлены до создания источника; первое назначение ID вложению происходит в связанных настройках редактора.
Компоновщик создает полный родительский макет стандартным генератором для табличного документа. Типизированным обходом настоящего Макет.Тело выбирается ровно один ВложенныйОбъектМакетаКомпоновкиДанных; не предполагается, что он первый или что любое тело является вложением.
КомпоновкаДанных — readonly настоящий дочерний МакетКомпоновкиДанных, не исходная СхемаКомпоновкиДанных. Родительский и отдельно дочерний макеты передаются собственному настоящему процессору вывода.
ЗначенияПараметров — readonly коллекция готового макета. Все фактические элементы читаются с проверкой индекса и поиска по их реальному Имя; если конкретный компоновщик не создал параметров для простой задачи, состав остается честно пустым, выдуманные параметры не добавляются.
Имя и Идентификатор читаются из настоящего вложения и сохраняются для сравнения. Их нельзя угадать по имени схемы или смешать с пользовательским ID: конкретное значение определяется полученным макетом.
Полная XDTO-копия содержит все дочерние макеты и связи. Только в ней временно меняются Имя и Идентификатор; этот измененный черновик не исполняется. Проверяется неизменность полного оригинала и дочернего макета. После возврата двух исходных строк весь XML черновика должен совпасть с оригиналом, включая все параметры; отдельная коллекция параметров не сериализуется.
Восстанавливается весь первоначальный макет, проверяются его полный XML и исходные строки. Выполняется третий настоящий вывод: восстановленный родитель. Отдельная копия делается перед каждым выводом, поэтому процессор не работает с исходным редактируемым макетом.
Как проверить результат
Будущий табличный документ: один комплект заголовков Наименование/Количество/Цена/Сумма; ровно одна Книга3/250/750 и ровно одна Ручка1/50/50. Итоги вычисляются из прочитанных реальных ячеек: количество4, сумма800.
Проверка не предполагает фиксированные номера колонок: они находятся по фактическим заголовкам. Граница200×100 предназначена только для этого собственного небольшого отчета без ресурсов/итоговых строк. Дубли товара, посторонняя числовая строка, отсутствие числа или неверная ячейка завершают опыт исключением.
Отрицательный контроль будущего отдельного опыта: изменить в собственном запросе только количество Книги3→30 при прежней сумме750. Числовая проверка должна отказать, несмотря на прежние два названия товаров.
Исходная схема и полный исходный макет сохраняются; XML-сравнение проверяет собственное состояние в памяти, но не заменяет проверку строк результата.
runtimeVerifiedScenarios=0. Ни один пример не исполнен в1С. Статические тесты не доказывают видимость настоящего окна редактора, действие клика, права рабочей базы или печатный результат.
Ожидаемый результат
Полный код проверяет родительский, дочерний и восстановленный родительский отчеты и сохраняет исходное вложение. Здесь в1С не запускался.
На что обратить внимание
Настройки вложенного объекта, описание вложенной схемы и вложенный объект готового макета — три разных типа. Readonly КомпоновкаДанных не подменяется новой схемой; readonly каталоги параметров целиком не переназначаются.
Изменение ID готового макета может нарушить его связи. Измененный черновик не исполняется; восстанавливается весь исходный макет, а не пара строк, оставляющая неизвестные зависимости.
Идентификатор параметра принадлежит своему владельцу. Не переносить старый ID в восстановленный редактор и не превращать ИдентификаторКомпоновкиДанных в произвольную строку.
Связанные коллекции значений параметров нельзя произвольно Добавить/Вставить/Удалить/Очистить. Используется штатное УстановитьЗначениеПараметра после проверки доступности. Ограниченные методы этим урокам не приписываются.
Пустая коллекция ЗначенияВложенныхПараметров относится только к простому заголовку, а пустой список параметров готового вложения — только к конкретной простой компоновке. Общие вложенные/иерархические параметры требуют отдельного содержательного опыта.
Заголовки настроены на своей схеме. Физическая раскладка сложных чужих макетов, повторяющиеся шапки, сводные таблицы и печатные области этим контрольным сканированием не поддерживаются.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.