Как добавить новый отчет и подсистему в меню в 1С:ERP?

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

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

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

Почему новые отчеты не появляются в меню автоматически?

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

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


Способ 1. Программная интеграция отчета через механизмы БСП

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

Шаг 1. Создание подсистем и настройка прав

  1. Откроем конфигуратор и добавим новую подсистему. Назовем ее ДоработанныеОтчеты.
  2. В свойствах подсистемы укажем, что она является подчиненной для подсистемы РегламентированныйУчет.
  3. Убедимся, что для новой подсистемы установлен флаг «Включать в командный интерфейс».
  4. Добавим наш новый отчет в состав созданной подсистемы ДоработанныеОтчеты.
  5. Обязательно настроим права доступа. В ролях пользователей (или в новой роли, созданной специально для доработки) необходимо предоставить права на чтение и просмотр новой подсистемы, а также полные права (или права на чтение/открытие) для самого отчета.

Шаг 2. Настройка свойств самого отчета

Чтобы отчет корректно обрабатывался БСП, необходимо изменить его стандартное поведение:

  1. В окне свойств отчета перейдем на вкладку «Прочие».
  2. В поле «Хранилище вариантов» выберем стандартное хранилище БСП: ХранилищеВариантовОтчетов.
  3. Снимем флаг «Использовать стандартные команды». Это необходимо для того, чтобы платформа не пыталась выводить отчёт стандартным способом, ломая интерфейс БСП.

Шаг 3. Регистрация отчета в модуле менеджера

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


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

Шаг 4. Регистрация в общем модуле конфигурации

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


Процедура НастроитьВариантыОтчетов(Настройки) Экспорт
    
    // Регистрируем наш новый отчет в подсистеме БСП
    ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ИмяВашегоНовогоОтчета);
    
КонецПроцедуры

Шаг 5. Принудительное обновление вспомогательных данных

Чтобы изменения вступили в силу немедленно (не дожидаясь отложенного обновления информационной базы регламентными заданиями), выполним обновление вручную одним из следующих способов:

  1. Запустим конфигурацию в режиме отладки с параметром запуска: /C ЗапуститьОбновлениеИнформационнойБазы.
  2. Или воспользуемся внешней обработкой БСП ИнструментыРазработчикаОбновлениеВспомогательныхДанных.epf, выбрав в ней обновление вариантов отчетов.
  3. Или выполним в консоли кода команду: ВариантыОтчетов.Обновить();.

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

Поскольку 1С:ERP является сложной ERP-системой, находящейся на поддержке, крайне нежелательно вносить изменения в основную конфигурацию напрямую. Это усложнит последующие обновления. Решим эту задачу через механизм расширений.

Разберем по шагам, как перенести логику интеграции отчета в расширение:

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

Способ 3. Использование механизма дополнительных отчетов и обработок

Зачастую бизнес-требования не обязывают разработчиков внедрять отчет непосредственно в структуру метаданных конфигурации или расширения. Самым практичным, быстрым и безопасным решением является создание внешнего дополнительного отчета.

Этот способ идеален тем, что при обновлении системы отчет никак не пострадает, а его редактирование не потребует монопольного доступа к базе данных.

Рассмотрим, как правильно подготовить внешний отчет для корректного отображения в панели отчетов регламентированного учета.

Шаг 1. Создание программного интерфейса регистрации БСП

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

Разберем пример реализации этого метода:


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

Шаг 2. Размещение отчета в интерфейсе 1С:Предприятия

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

  1. Запустим 1С:ERP под учетной записью администратора.
  2. Перейдем в раздел «НСИ и администрирование» — «Печатные формы, отчеты и обработки» — «Дополнительные отчеты и обработки».
  3. Нажмем кнопку «Добавить из файла» и выберем наш внешний отчет.
  4. В открывшейся форме настройки найдем табличную часть «Размещение». Нажмем кнопку добавления и укажем раздел командного интерфейса: Регламентированный учет.
  5. В табличной части «Быстрый доступ» укажем пользователей или группы пользователей, у которых данный отчет должен отображаться на панели.
  6. Нажмем кнопку «Записать и закрыть».

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


Тонкости позиционирования подсистем в меню (Проблема группы «Сервис»)

Иногда заказчики требуют разместить новую подсистему в строго определенном месте командного интерфейса — например, в самом низу меню, сразу под разделом «Сервис».

Проанализируем эту ситуацию. Группа «Сервис» в командном интерфейсе разделов 1С является жестко зафиксированной платформенной системной группой. По правилам построения интерфейса платформы «1С:Предприятие 8» структура любого раздела делится на следующие стандартные блоки:

  1. Важные команды (выводятся в самом верху жирным шрифтом).
  2. Обычные команды и подчиненные подсистемы навигации.
  3. Стандартная группа отчетов (команды панели отчетов).
  4. Системная группа «Сервис» (которая всегда закрепляется в самом низу панели действий).

Платформа накладывает строгое ограничение: переместить любую пользовательскую подсистему или команду навигации *ниже* группы «Сервис» штатными средствами конфигуратора невозможно.

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

← На главную