Получить реальный макет вместо свойства метаданных

Учебные задачи

Метаданные макета содержат описание, но Макет всегда Неопределено. ТабличныйДокумент получают у менеджера соответствующего документа.

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

Полный серверный модуль учебной копии КА2 Progress 2.5.20.75; без HTTP, публикации и печати.

Подготовка

  1. Изолированная учебная копия КА2 Progress 2.5.20.75 из C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS, платформа 8.5.1.1343. Создайте серверный общий модуль УчебныеМаршрутыИМакеты.

  2. Вставьте полный модуль одного урока и вызовите УчебныеМаршрутыИМакеты.ВыполнитьПример() своей серверной учебной командой.

  3. Источники: HTTPServices\ПередачаДанных.xml и ПередачаДанных\Ext\Module.bsl; Documents\РеализацияТоваровУслуг\Templates\ПФ_MXL_РеализацияТоваров.xml.

  4. Метаданные только читаются. HTTP-запросы, публикация сервиса, загрузка/удаление файлов хранилища и печать документов не выполняются.

  5. Формируемый путь с guide-owned-storage — учебная строка, не действующий адрес публикации. GET/POST обработчики могут выполнять прикладную работу и здесь не вызываются.

  6. Макет печати получается в память без создания документа реализации и без заполнения его данными. Чтение размера макета не доказывает корректность настоящей печатной формы.

Процедура ВыполнитьПример() Экспорт
    Документ = Метаданные.Документы.Найти("РеализацияТоваровУслуг");
    Если Документ = Неопределено Тогда
        ВызватьИсключение "Нет подтверждённых метаданных документа";
    КонецЕсли;
    МакетМетаданных = Документ.Макеты.Найти("ПФ_MXL_РеализацияТоваров");
    Если МакетМетаданных = Неопределено Тогда
        ВызватьИсключение "Нет подтверждённого макета";
    КонецЕсли;
    Сообщить(МакетМетаданных.Имя = "ПФ_MXL_РеализацияТоваров");
    Сообщить(МакетМетаданных.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ТабличныйДокумент);
    Сообщить(МакетМетаданных.Макет = Неопределено);
    Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет(МакетМетаданных.Имя);
    Сообщить(ТипЗнч(Макет) = Тип("ТабличныйДокумент"));
    Сообщить(Макет.ВысотаТаблицы > 0);
    Сообщить(Макет.ШиринаТаблицы > 0);
    Сообщить("Получен макет в память, не заполненная накладная и не проведённый документ.");
    Сообщить(МакетМетаданных.Синоним);
    Сообщить(МакетМетаданных.Комментарий);
    Сообщить(МакетМетаданных.ПолноеИмя());
    Сообщить(МакетМетаданных.Представление());
    Сообщить(МакетМетаданных.ПринадлежностьОбъекта);
    Сообщить(ТипЗнч(МакетМетаданных.ОбъектРасширяемойКонфигурации));
    Сообщить(МакетМетаданных.ЕстьИзмененияРасширениямиКонфигурации());
    Сообщить(ТипЗнч(МакетМетаданных.РасширениеКонфигурации()));
    Сообщить(МакетМетаданных.Родитель() = Документ);

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

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

  1. Найти макет в коллекции документа РеализацияТоваровУслуг, не в общих макетах конфигурации.

  2. Проверить ТипМакета и Неопределено у свойства Макет: это два разных аспекта описания.

  3. Через менеджер документа получить макет по подтверждённому имени. Проверить тип и ненулевые размеры, не меняя ячейки.

  4. Вывести сведения происхождения и проверить родителя — метаданные документа. Заполнения, записи документа и печати нет.

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

  1. Семь фиксированных проверок дают Истина; сведения расширений диагностические.

  2. В памяти непустой ТабличныйДокумент-макет. Нет сформированной накладной или новых записей базы.

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

Реальный рецепт получения макета из подтверждённого документа КА2.

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

  1. Нельзя вызывать МакетМетаданных.Макет.ПолучитьОбласть: свойство Неопределено.

  2. ПолучитьМакет не формирует печатную форму с данными документа.

  3. Не перезаписывайте шаблон или результат файловыми операциями из учебного примера.

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

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

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

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

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