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