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