Почему внешние печатные формы не привязываются к объектам расширения?

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

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

Суть проблемы: ограничения БСП

Основная причина заключается в том, что справочник ИдентификаторыОбъектовМетаданных, который используется механизмом ДополнительныеОтчетыИОбработки для определения объектов назначения, содержит данные только об объектах основной конфигурации. Тип значения поля ОбъектНазначения в табличной части Назначение данного справочника является жестко типизированным и не предусматривает возможности выбора объектов, добавленных через расширения.

Хотя в платформе существуют ИдентификаторыОбъектовРасширений, они выполняют технические функции обеспечения целостности ссылок и доступа, но не интегрированы в логику подсистемы Дополнительные отчеты и обработки. В результате попытка привязать внешнюю печатную форму (ВПФ) приводит к тому, что гиперссылка размещения отображается как <Не существует>, и система не видит команды печати для такого документа.

Решение 1: Перенос печатной формы в расширение

Самым правильным с архитектурной точки зрения подходом является отказ от использования Внешних печатных форм в пользу реализации макетов и логики печати непосредственно в расширении. Рассмотрим шаги для реализации:

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

Решение 2: Программный перехват печати (обходной путь)

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

Для реализации этого метода выполните следующие действия:

  1. В расширении создайте Внешнюю печатную форму (обычным способом) и зарегистрируйте её в справочнике Дополнительные отчеты и обработки, указав в качестве назначения любой основной документ (или оставив назначение пустым, если логика позволяет).
  2. В модуле менеджера объекта (того, который лежит в расширении) добавьте процедуру ДобавитьКомандыПечати. Эта процедура будет принудительно искать нужную запись в справочнике дополнительных отчетов и обработок по наименованию или другому идентификатору.

Пример программной реализации процедуры в модуле менеджера:


Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    Запрос = новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    Ссылка,
    |    Идентификатор,
    |    ЗаменяемыеКоманды,
    |    ВариантЗапуска,
    |    Представление,
    |    ПоказыватьОповещение,
    |    Модификатор,
    |    НЕОПРЕДЕЛЕНО КАК Использование
    |ИЗ
    |    Справочник.ДополнительныеОтчетыИОбработки.Команды
    |ГДЕ Ссылка.Наименование = ""НаименованиеВашейВПФ""
    |";
    
    ТаблицаКоманд = Запрос.Выполнить().Выгрузить();
    Если ТаблицаКоманд.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Для Каждого СтрокаТаблицы Из ТаблицаКоманд Цикл
        КомандаПечати = КомандыПечати.Добавить();
        ЗаполнитьЗначенияСвойств(КомандаПечати, СтрокаТаблицы, "Идентификатор, Представление");
        КомандаПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки";
        
        КомандаПечати.ДополнительныеПараметры = Новый Структура("Ссылка, Модификатор, ВариантЗапуска, ПоказыватьОповещение");
        ЗаполнитьЗначенияСвойств(КомандаПечати.ДополнительныеПараметры, СтрокаТаблицы);
    КонецЦикла;
КонецПроцедуры

Важные рекомендации и предостережения

Работая с таким подходом, важно помнить следующее:

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

← На главную