При разработке дополнительных отчетов на базе Библиотеки Стандартных Подсистем (БСП) в 1С:ERP Управление предприятием, 1С:Комплексная автоматизация или 1С:Управление торговлей часто возникает задача встроить отчет в командную панель конкретного документа (подменю Отчеты). Разберем, как сделать такой отчет контекстным без внесения изменений в типовую конфигурацию.
Для того чтобы отчет появился в выпадающем списке команд документа или списка документов, он должен быть зарегистрирован не просто как глобальный дополнительный отчет, а как назначаемый (контекстный) отчет. Механизм БСП автоматически связывает команды таких отчетов с подсистемой ПодключаемыеКоманды, если форма документа поддерживает этот функционал.
Рассмотрим по шагам, какие настройки необходимо выполнить в самом внешнем отчете (файле .erf).
Откроем разрабатываемый внешний отчет в конфигураторе и выполним обязательные настройки метаданных:
ХранилищеВариантовОтчетов. Это необходимо для корректной интеграции отчета с подсистемой вариантов отчетов БСП и отображения стандартной формы отчета.Перейдем в модуль объекта внешнего отчета. Проанализируем экспортную функцию СведенияОВнешнейОбработке(). Для контекстного отчета ключевыми являются параметры Вид, Назначение и тип команды.
Посмотрим на пример реализации функции:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
// Указываем вид обработки: именно "Отчет", а не "ДополнительныйОтчет"
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Истина;
ПараметрыРегистрации.Информация = НСтр("ru = 'Контекстный отчет по документу'");
// Указываем объекты метаданных, в формах которых должен появляться отчет
ПараметрыРегистрации.Назначение.Добавить("Документ.ЗаказКлиента");
ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
// Добавляем команду открытия отчета
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Анализ выполнения заказа'");
НоваяКоманда.Идентификатор = "АнализВыполненияЗаказа";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
НоваяКоманда.ПоказыватьОповещение = Ложь;
Возврат ПараметрыРегистрации;
КонецФункции
Когда пользователь вызывает отчет из формы документа или списка документов, БСП передает ссылку на текущий объект (или массив выделенных объектов) в параметры формы отчета. Разберем, как эти данные передаются и обрабатываются:
Параметры.ОбъектыНазначения, содержащий ссылки на выбранные документы.ХранилищеВариантовОтчетов, механизм БСП автоматически сопоставляет поля схемы компоновки с типом объекта назначения и накладывает отбор по переданным ссылкам.ПриСозданииНаСервере формы отчета мы можем прочитать переданные данные:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("ОбъектыНазначения") И ЗначениеЗаполнено(Параметры.ОбъектыНазначения) Тогда
// Получаем массив ссылок на документы, из которых вызван отчет
МассивДокументов = Параметры.ОбъектыНазначения;
// Устанавливаем параметр в КомпоновщикНастроек СКД
ПараметрДокумент = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокументСсылка");
Если ПараметрДокумент <> Неопределено Тогда
ПараметрДокумент.Значение = МассивДокументов[0];
ПараметрДокумент.Использование = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
После подготовки внешнего отчета загрузим его в информационную базу:
.erf.Теперь при открытии указанного документа (например, Заказ клиента) в подменю Отчеты появится зарегистрированная команда, открывающая отчет с контекстом текущего документа.