ВложенныйОбъектМакетаКомпоновкиДанных.Идентификатор

Свойства · ID

Тип: Строка. Идентификатор вложенного объекта.

Полное описание, параметры и ограничения

ВложенныйОбъектМакетаКомпоновкиДанных.Идентификатор (DataCompositionTemplateNestedObject.ID)

ВложенныйОбъектМакетаКомпоновкиДанных (DataCompositionTemplateNestedObject)

Идентификатор (ID)

Доступен, начиная с версии 8.1.

Использование:
Чтение и запись.
Описание:
Тип: Строка.
Идентификатор вложенного объекта.
Доступность:

Сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Готовый макет вложенного отчета: дочерняя компоновка и полный вывод

Из своей схемы получаем настоящее вложение в теле готового макета. Проверяем родительский и дочерний отчеты, читаем реальные параметры, редактируем две строковые настройки только в независимом черновике и восстанавливаем весь макет.

Где и как запускать

Полный серверный общий модуль нового собственного стенда УчебныеМакетыВложений85; выбранный урок запускается отдельно.

Подготовка

  1. Создать НОВУЮ отдельную пустую учебную базу, не рабочую и не ее копию: платформа точно 8.5.1.1343; конфигурация УчебныеМакетыВложений85, совместимость Не использовать. Без бизнес-объектов, регистров, подписок, заданий и расширений.

  2. Конфигуратор → Общие → Общие модули → УчебныеМакетыВложений85: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставить ВЕСЬ основной код выбранного урока. Уроки запускаются отдельно: два одноименных модуля не смешивать.

  3. Конфигуратор → Обработки → УчебныеМакетыВложений85 → Формы → Пульт: управляемая форма, команда Выполнить и кнопка с этой командой. Действие команды Выполнить. Полный модуль своей формы дан отдельно ниже; реквизиты не нужны.

  4. Сохранить и обновить собственную конфигурацию базы данных (F7). Запустить свежий свой клиент, Все функции → Обработки → УчебныеМакетыВложений85 → Выполнить. Здесь это будущие ручные шаги; 1С и F7 не запускались.

  5. Данные создаются только буквальным Local-запросом: Книга3×250=750, Ручка1×50=50. Четыре выбранных поля и одна группа деталей готовятся кодом; никакие справочники или документы не нужны.

  6. Используется стандартный генератор табличного документа, не генератор коллекции значений. Проверка ищет настоящие заголовки полей, по найденным колонкам читает реальные числа; приемник заранее не заполняется.

  7. XML хранится только строками памяти. Копии создаются для независимого редакторского опыта и свежего вывода; файлов, архивов и резервных копий здесь нет.

  8. 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.ВыполнитьПример();
КонецФункции

Разбор по шагам

  1. Свои родительская и дочерняя схемы создаются раздельно. Настройки описания дочерней схемы подготовлены до создания источника; первое назначение ID вложению происходит в связанных настройках редактора.

  2. Компоновщик создает полный родительский макет стандартным генератором для табличного документа. Типизированным обходом настоящего Макет.Тело выбирается ровно один ВложенныйОбъектМакетаКомпоновкиДанных; не предполагается, что он первый или что любое тело является вложением.

  3. КомпоновкаДанных — readonly настоящий дочерний МакетКомпоновкиДанных, не исходная СхемаКомпоновкиДанных. Родительский и отдельно дочерний макеты передаются собственному настоящему процессору вывода.

  4. ЗначенияПараметров — readonly коллекция готового макета. Все фактические элементы читаются с проверкой индекса и поиска по их реальному Имя; если конкретный компоновщик не создал параметров для простой задачи, состав остается честно пустым, выдуманные параметры не добавляются.

  5. Имя и Идентификатор читаются из настоящего вложения и сохраняются для сравнения. Их нельзя угадать по имени схемы или смешать с пользовательским ID: конкретное значение определяется полученным макетом.

  6. Полная XDTO-копия содержит все дочерние макеты и связи. Только в ней временно меняются Имя и Идентификатор; этот измененный черновик не исполняется. Проверяется неизменность полного оригинала и дочернего макета. После возврата двух исходных строк весь XML черновика должен совпасть с оригиналом, включая все параметры; отдельная коллекция параметров не сериализуется.

  7. Восстанавливается весь первоначальный макет, проверяются его полный XML и исходные строки. Выполняется третий настоящий вывод: восстановленный родитель. Отдельная копия делается перед каждым выводом, поэтому процессор не работает с исходным редактируемым макетом.

Как проверить результат

  1. Будущий табличный документ: один комплект заголовков Наименование/Количество/Цена/Сумма; ровно одна Книга3/250/750 и ровно одна Ручка1/50/50. Итоги вычисляются из прочитанных реальных ячеек: количество4, сумма800.

  2. Проверка не предполагает фиксированные номера колонок: они находятся по фактическим заголовкам. Граница200×100 предназначена только для этого собственного небольшого отчета без ресурсов/итоговых строк. Дубли товара, посторонняя числовая строка, отсутствие числа или неверная ячейка завершают опыт исключением.

  3. Отрицательный контроль будущего отдельного опыта: изменить в собственном запросе только количество Книги3→30 при прежней сумме750. Числовая проверка должна отказать, несмотря на прежние два названия товаров.

  4. Исходная схема и полный исходный макет сохраняются; XML-сравнение проверяет собственное состояние в памяти, но не заменяет проверку строк результата.

  5. runtimeVerifiedScenarios=0. Ни один пример не исполнен в1С. Статические тесты не доказывают видимость настоящего окна редактора, действие клика, права рабочей базы или печатный результат.

Ожидаемый результат

Полный код проверяет родительский, дочерний и восстановленный родительский отчеты и сохраняет исходное вложение. Здесь в1С не запускался.

На что обратить внимание

  1. Настройки вложенного объекта, описание вложенной схемы и вложенный объект готового макета — три разных типа. Readonly КомпоновкаДанных не подменяется новой схемой; readonly каталоги параметров целиком не переназначаются.

  2. Изменение ID готового макета может нарушить его связи. Измененный черновик не исполняется; восстанавливается весь исходный макет, а не пара строк, оставляющая неизвестные зависимости.

  3. Идентификатор параметра принадлежит своему владельцу. Не переносить старый ID в восстановленный редактор и не превращать ИдентификаторКомпоновкиДанных в произвольную строку.

  4. Связанные коллекции значений параметров нельзя произвольно Добавить/Вставить/Удалить/Очистить. Используется штатное УстановитьЗначениеПараметра после проверки доступности. Ограниченные методы этим урокам не приписываются.

  5. Пустая коллекция ЗначенияВложенныхПараметров относится только к простому заголовку, а пустой список параметров готового вложения — только к конкретной простой компоновке. Общие вложенные/иерархические параметры требуют отдельного содержательного опыта.

  6. Заголовки настроены на своей схеме. Физическая раскладка сложных чужих макетов, повторяющиеся шапки, сводные таблицы и печатные области этим контрольным сканированием не поддерживаются.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.