1C. "Недопустимое значение параметра" при вызове макета в расширении

Дано: 1С (в данном примере конфигурация 1С:Университет ПРОФ), платформа 8.3.10. Создано расширение, в котором к документу добавлен новый макет. В модуле менеджера документа есть процедура, формирующая печатную форму на базе макета. Необходимо было заменить данную процедуру (при помощи директивы расширения "&Вместо") и заменить вызов встроенного макета на наш, добавленный в расширение.
Проблема: при вызове добавленного макета в момент его печати в режиме "1С:Предприятие" возникала ошибка при получении макета:

{ЗаявлениеПоступающегоРасширение Документ.ЗаявлениеПоступающего.МодульМенеджера(176)}: Ошибка при вызове метода контекста (ПолучитьМакет)
Макет = Документы.ЗаявлениеПоступающего.ПолучитьМакет ("Расш1_МакетЗаявлениеПоступающего");
по причине:
Недопустимое значение параметра (параметр номер '1')





Код, вызывающий ошибку:


Варианты решения:
1. Добавить функцию, выполняемую на сервере, которая вызовет добавленный макет из документа:
&НаСервере
Функция ПолучитьМакетЗаявленияИзРасширения()
    Макет = Документы.ЗаявлениеПоступающего.ПолучитьМакет ("Расш1_МакетЗаявлениеПоступающего");
    Возврат Макет;
КонецФункции


А затем из заменяемой процедуры вызвать эту функцию:


(как оказалось этот способ не нужен. Причину читайте ниже)

2. Другой вариант - перенести макеты в общие и следующей командой вызвать (получить) макет из "Общие макеты":
Макет = ПолучитьОбщийМакет ("Расш1_МакетЗаявлениеПоступающего");



------
Видимо это всё-таки какой-то глюк платформы (протестировано на 8.3.10.2252 и 8.3.10.2299), но если просто добавить пустой макет в общие макеты в расширении, то команда, ранее вызывавшая ошибку (ПолучитьМакет из макета документа без допфункций на сервере), начинает нормально работать. При удалении пустого общего макета, команда вызова макета из документа снова вызывает ошибку (даже если вынесена в функцию на сервере, как показано в способе 1).
Т.е. если всё-таки хочется сделать макеты нормально в документе (ожидая, что когда-нибудь этот глюк исправят), то нужно сделать макет-заглушку в общих макетах. Например:


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

(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

8 комментариев:

  1. Спасибо, помогло!

    ОтветитьУдалить
  2. Помогло. спасибо.

    ОтветитьУдалить
  3. Спасибо автору за инфо, очень помогло

    ОтветитьУдалить
  4. Спасибо. Статья реально полезная. помогла.
    Но пришлось писать название макета одинаковое у документа и в Общих макетах. Чтоб работал стандарт подключения.

    ОтветитьУдалить
    Ответы
    1. А на какой платформе пробовали? Если делать одинаковые имена, получается придется задавать общий макет на каждый макет в документе, если их более одного?

      Удалить
  5. Спасибо автору огромное.

    ОтветитьУдалить
  6. На дворе 2018 г., а в нашей организации до сих пор стоит 8.3.10... (
    Огромное спасибо за рецепт с общим макетом!

    ОтветитьУдалить