Как подключить внешнюю печатную форму к документу из расширения?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке расширений для конфигураций на базе 1С часто возникает ситуация, когда необходимо создать внешнюю печатную форму (ВПФ) для документа, который сам по себе находится в расширении. Типичная проблема заключается в том, что при попытке регистрации такой формы через стандартный механизм БСП (Библиотека стандартных подсистем) «Дополнительные отчеты и обработки», в поле Размещение мы видим надпись Не существует. Система как будто не «видит» наш новый документ, хотя он корректно работает в самой базе.

В этой статье мы подробно разберем, почему это происходит и как заставить БСП корректно распознавать объекты из расширений для подключения внешних печатных форм.

Причина проблемы: Идентификаторы объектов метаданных

Разберем ситуацию изнутри. Механизмы БСП (в частности, подсистема «Дополнительные отчеты и обработки») работают не напрямую с деревом метаданных конфигурации, а используют специальный кеш — справочник Идентификаторы объектов метаданных. Для объектов, добавленных через расширения, существует отдельный аналогичный справочник — Идентификаторы объектов расширений.

Когда вы добавляете ВПФ, БСП пытается сопоставить имя документа, указанное в коде обработки, с записями в этих справочниках. Если документ в расширении создан недавно, или данные в этих справочниках не обновились, БСП выдает ошибку Не существует. Проанализируем основные шаги для исправления этой ситуации.

Шаг 1. Обновление справочников идентификаторов

Первым делом нам необходимо заставить систему пересчитать объекты метаданных и добавить наш новый документ в список доступных идентификаторов. Для этого выполним следующие действия:

  1. Откроем базу в режиме «1С:Предприятие» под правами администратора.
  2. Если в вашей конфигурации доступна обработка Обновление вспомогательных данных (входит в состав БСП), запустите её.
  3. Если вы хотите выполнить обновление программно (например, через консоль кода), используйте следующий вызов:

Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Ложь, Истина);

Этот метод принудительно просканирует все расширения и добавит недостающие элементы в справочник идентификаторов. После этого попробуйте снова загрузить ВПФ — в большинстве случаев проблема с надписью Не существует исчезнет.

Шаг 2. Проверка функции СведенияОВнешнейОбработке

Рассмотрим структуру функции СведенияОВнешнейОбработке() в модуле внешней печатной формы. Очень важно правильно указать имя объекта в таблице назначений. Выясним причину, по которой БСП может не найти объект даже после обновления идентификаторов: это может быть банальная опечатка или неверный префикс.

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


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Наименование = "Печатная форма документа из расширения";
    
    // ВАЖНО: Указываем имя документа точно так, как оно задано в метаданных расширения
    ПараметрыРегистрации.Назначение.Добавить("Документ.Префикс_ИмяВашегоДокумента");
    
    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = "Печать документа из расширения";
    Команда.Идентификатор = "ОсновнаяПечатнаяФорма";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    Команда.ПоказыватьОповещение = Истина;
    Команда.Модификатор = "ПечатьMXL";
    
    Возврат ПараметрыРегистрации;
КонецФункции

Обратите внимание: если ваш документ в расширении имеет префикс (что является хорошим тоном разработки), этот префикс обязательно должен быть указан в строке назначения.

Шаг 3. Режим безопасности расширения

Проанализируем настройки самого расширения. В окне «Расширения конфигурации» (меню Конфигурация — Расширения) найдите вашу разработку. Обратите внимание на флажок Безопасный режим.

Если этот флажок установлен, БСП может иметь ограниченный доступ к программному интерфейсу расширения. Попробуйте снять флажок Безопасный режим и перезапустить сеанс. Это часто помогает в тех случаях, когда идентификаторы вроде бы созданы, но связь между основной конфигурацией и объектами расширения блокируется на уровне прав доступа платформы.

Шаг 4. Включение документа в подсистемы

Хотя внешние печатные формы подключаются к метаданным напрямую, для корректной работы механизмов печати БСП важно, чтобы документ был включен в соответствующие подсистемы внутри расширения. Проверьте следующие моменты:

  1. Документ должен быть включен хотя бы в одну пользовательскую подсистему, которая отображается в интерфейсе.
  2. Если в расширении вы заимствовали общие модули печати, убедитесь, что в модуле менеджера вашего документа реализована экспортная процедура ДобавитьКомандыПечати(КомандыПечати). Хотя ВПФ работают «снаружи», наличие этой процедуры подтверждает системе, что объект в принципе поддерживает механизм печати БСП.

Шаг 5. Особенности для печатных форм на базе СКД

Если вы создаете печатную форму не через произвольный макет, а с использованием системы компоновки данных (СКД) в рамках расширения, обратите внимание на совет из обсуждения: в модуле менеджера объекта расширения желательно наличие экспортной функции НастроитьВариантыОтчета(). Несмотря на то, что это относится к отчетам, механизмы БСП иногда используют общие алгоритмы поиска для всех типов внешних объектов.

Резюме и план действий

Подведем итоги. Если ваша внешняя печатная форма не видит документ из расширения, выполните последовательно следующие шаги:

1. Проверьте точность написания имени документа в СведенияОВнешнейОбработке().

2. Снимите флаг Безопасный режим у вашего расширения в списке расширений базы.

3. Выполните обновление идентификаторов объектов метаданных программно или через типовую обработку БСП.

4. Перезапустите сеанс 1С:Предприятия.

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

← На главную