Как добавить отчет в подменю «Отчеты» собственного документа в 1С:УПП

Программист 1С v8.3 (Обычные формы)
← На главную

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

Анализируем структуру командного интерфейса

Прежде всего, нам необходимо выяснить, как именно в вашем документе сформировано подменю «Отчеты». В классической УПП на обычных формах командная панель может заполняться несколькими способами:

Проанализируем ситуацию: если в документе уже есть группа «Отчеты», содержащая «Связанные документы» и «Результаты проведения», скорее всего, мы имеем дело с программным формированием. Выясним, как добавить туда свой пункт.

Способ 1: Программное добавление кнопки в обычной форме

Если меню «Отчеты» создается программно в процедуре ПриОткрытии или через обработчик обновления командной панели, мы можем вмешаться в этот процесс. Рассмотрим пример добавления кнопки действия в существующее подменю.

Для начала найдем в модуле формы место, где инициализируется командная панель. Если явного кода нет, попробуем добавить свой фрагмент в процедуру ПередОткрытием или ПриОткрытии.


// Пример добавления кнопки в подменю "Отчеты"
Процедура ДобавитьКнопкуОтчетаВПанель()
    
    // Получаем основную командную панель формы
    Панель = ЭлементыФормы.ОсновныеДействия;
    
    // Ищем группу (подменю) с именем "ПодменюОтчеты" или аналогичным
    // В УПП часто кнопка называется "ДействияОтчеты"
    КнопкаОтчеты = Панель.Кнопки.Найти("ДействияОтчеты");
    
    Если КнопкаОтчеты <> Неопределено Тогда
        // Добавляем новую кнопку в подменю
        НоваяКнопка = КнопкаОтчеты.Кнопки.Добавить("МойУникальныйОтчет", ТипКнопкиКоманднойПанели.Действие, "Мой кастомный отчет", Новый Действие("НажатьКнопкуМойОтчет"));
    КонецЕсли;

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

Затем нам необходимо описать саму процедуру-обработчик НажатьКнопкуМойОтчет, которая будет открывать наш отчет, передавая в него контекст текущего документа (ссылку).


Процедура НажатьКнопкуМойОтчет(Кнопка)
    
    // Подготовим параметры для отчета
    ПараметрыОтчета = Новый Структура;
    ПараметрыОтчета.Вставить("ДокументСсылка", Ссылка);
    
    // Открываем форму отчета (внешнего или встроенного)
    // Если отчет встроенный:
    ОткрытьФорму("Отчет.МойСобственныйОтчет.Форма", ПараметрыОтчета);
    
    // Если отчет внешний:
    // ИмяФайла = "C:\Reports\MyReport.erf";
    // ВнешнийОтчет = ВнешниеОтчеты.Создать(ИмяФайла);
    // ВнешнийОтчет.ПолучитьФорму().Открыть();

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

Способ 2: Использование подсистемы «Варианты отчетов» (БСП)

В более современных редакциях УПП, где используется БСП, меню «Отчеты» может формироваться автоматически. Чтобы система «увидела» ваш отчет и предложила его в контексте конкретного документа, нужно выполнить регистрацию в модуле менеджера отчета.

Рассмотрим алгоритм действий:

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

// В модуле менеджера отчета
Процедура НастроитьВариантыОтчета(Настройки) Экспорт
    
    ВариантНастроек = Настройки.Варианты.Добавить();
    ВариантНастроек.Назначение.Добавить(Метаданные.Документы.МойСобственныйДокумент);
    ВариантНастроек.Описание = НСтр("ru = 'Позволяет проанализировать данные текущего документа'");
    
КонецПроцедуры

Система БСП при открытии формы документа сканирует зарегистрированные отчеты и автоматически наполняет подменю «Отчеты». Если кнопка все равно не появляется, проверим общий модуль ВариантыОтчетовПереопределяемый, процедуру ОпределитьНастройкиВариантовОтчетов. Там можно принудительно прописать связи, если автоматический поиск по метаданным отключен или ограничен.

Способ 3: Механизм подключаемых команд

Если в вашем документе используется современный механизм подключаемых команд, то добавление отчета происходит через справочник «Дополнительные отчеты и обработки». Проанализируем настройки:

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

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


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.ПараметрыРегистрацииВнешнейОбработки();
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
    // ... остальные настройки ...
    Возврат ПараметрыРегистрации;
КонецФункции

Важные технические нюансы

Разберем типичную проблему: кнопка добавлена, но отчет открывается «пустым», не видя документа. Чтобы отчет понимал, по какому объекту он вызван, мы должны реализовать механизм передачи параметров.

В УПП часто используется структура «Отбор» в форме отчета. Проанализируем, как передать туда ссылку:

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

// В форме документа при вызове отчета
ПараметрыФормы = Новый Структура("СформироватьПриОткрытии", Истина);
ПараметрыФормы.Вставить("Отбор", Новый Структура("Ссылка", Ссылка));

ОткрытьФорму("Отчет.МойОтчет.Форма", ПараметрыФормы);

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

← На главную