Как разместить команду внешнего отчета непосредственно в меню объекта, минуя подменю Дополнительные отчеты

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

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

В этой статье мы разберем, как реализовать эту задачу, проанализируем стандартные механизмы регистрации и рассмотрим альтернативные методы, такие как использование расширений конфигурации.

Метод 1. Использование свойств команды в «СведенияОВнешнейОбработке»

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

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


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

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

Метод 2. Программное управление через настройки размещения

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


Процедура ПриОпределенииНастроек(Настройки) Экспорт
    Настройки.ДобавитьКомандыОтчетов = Истина;
    // Указываем, к каким объектам привязан отчет
    Настройки.Размещение.Добавить(Метаданные.Справочники.Номенклатура);
КонецПроцедуры

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

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

Метод 3. Использование расширения конфигурации (Рекомендуемый способ)

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

Разберем по шагам процесс реализации через расширение:

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

Посмотрим на пример кода в расширении формы, который программно вызывает внешний отчет, если вы все же решили оставить его в справочнике «Дополнительные отчеты»:


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Создаем команду программно
    ИмяКоманды = "ОткрытьМойВнешнийОтчет";
    НоваяКоманда = ЭтаФорма.Команды.Добавить(ИмяКоманды);
    НоваяКоманда.Действие = "ПодключитьРасш1_ОткрытьОтчет";
    НоваяКоманда.Заголовок = "Динамика (внешний)";
    
    // Размещаем кнопку непосредственно в командной панели
    НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ЭтаФорма.Элементы.КоманднаяПанель);
    НовыйЭлемент.ИмяКоманды = ИмяКоманды;
КонецПроцедуры

&НаКлиенте
Процедура ПодключитьРасш1_ОткрытьОтчет(Команда)
    // Здесь описываем логику поиска и открытия внешнего отчета через менеджер БСП
    // Или открытие отчета, который уже включен в расширение
    ПараметрыОтчета = Новый Структура("СформироватьПриОткрытии", Истина);
    ОткрытьФорму("Отчет.МойОтчетИзРасширения.Форма", ПараметрыОтчета);
КонецПроцедуры

Почему 1С ограничивает размещение внешних отчетов?

Проанализируем ситуацию с точки зрения архитектуры системы. БСП изолирует внешние команды по нескольким причинам:

Итоги и рекомендации

Подводя итог, можно сказать: если ваша задача — сделать интерфейс максимально бесшовным, используйте расширения. Если же критично оставить отчет именно «внешним» файлом, попробуйте поиграть со свойствами Важность и ДобавитьКомандыОтчетов в модуле объекта, но помните, что результат будет зависеть от версии БСП в вашей конфигурации. В последних версиях платформы (8.3.20+) и актуальных редакциях ERP/УТ/БП наиболее стабильным методом остается программное добавление кнопки через расширение формы.

← На главную