Как открыть внешний дополнительный отчет из формы документа через меню Отчеты в 1С?

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

При разработке дополнительных отчетов на базе Библиотеки Стандартных Подсистем (БСП) в 1С:ERP Управление предприятием, 1С:Комплексная автоматизация или 1С:Управление торговлей часто возникает задача встроить отчет в командную панель конкретного документа (подменю Отчеты). Разберем, как сделать такой отчет контекстным без внесения изменений в типовую конфигурацию.

Принцип работы контекстных отчетов в БСП

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

Рассмотрим по шагам, какие настройки необходимо выполнить в самом внешнем отчете (файле .erf).

Шаг 1. Настройка свойств внешнего отчета в конфигураторе

Откроем разрабатываемый внешний отчет в конфигураторе и выполним обязательные настройки метаданных:

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

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

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

Посмотрим на пример реализации функции:


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    // Указываем вид обработки: именно "Отчет", а не "ДополнительныйОтчет"
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет();
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Истина;
    ПараметрыРегистрации.Информация = НСтр("ru = 'Контекстный отчет по документу'");
    
    // Указываем объекты метаданных, в формах которых должен появляться отчет
    ПараметрыРегистрации.Назначение.Добавить("Документ.ЗаказКлиента");
    ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
    
    // Добавляем команду открытия отчета
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Анализ выполнения заказа'");
    НоваяКоманда.Идентификатор = "АнализВыполненияЗаказа";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    НоваяКоманда.ПоказыватьОповещение = Ложь;
    
    Возврат ПараметрыРегистрации;

КонецФункции

Шаг 3. Получение контекста документа в отчете

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если Параметры.Свойство("ОбъектыНазначения") И ЗначениеЗаполнено(Параметры.ОбъектыНазначения) Тогда
        // Получаем массив ссылок на документы, из которых вызван отчет
        МассивДокументов = Параметры.ОбъектыНазначения;
        
        // Устанавливаем параметр в КомпоновщикНастроек СКД
        ПараметрДокумент = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокументСсылка");
        Если ПараметрДокумент <> Неопределено Тогда
            ПараметрДокумент.Значение = МассивДокументов[0];
            ПараметрДокумент.Использование = Истина;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

Шаг 4. Регистрация в режиме 1С:Предприятие

После подготовки внешнего отчета загрузим его в информационную базу:

  1. Перейдем в раздел НСИ и администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
  2. Нажмем Добавить из файла и выберем подготовленный файл отчета .erf.
  3. Проверим, что в таблице Назначение заполнились нужные типы документов.
  4. Убедимся, что тумблер публикации установлен в значение Используется, и настроим быстрый доступ для необходимых пользователей.
  5. Нажмем Записать и закрыть.

Теперь при открытии указанного документа (например, Заказ клиента) в подменю Отчеты появится зарегистрированная команда, открывающая отчет с контекстом текущего документа.

← На главную