Разработчики, которые впервые сталкиваются с доработкой крупных типовых конфигураций (таких как 1С:ERP Управление предприятием, 1С:Комплексная автоматизация или 1С:Управление торговлей 11), часто совершают стандартную ошибку. Они добавляют новую подсистему в дерево метаданных, включают в ее состав созданный отчет, назначают права, запускают систему в режиме «1С:Предприятие» и... ничего не видят в интерфейсе.
В этой статье мы подробно разберем, почему в современных конфигурациях стандартные платформенные механизмы вывода отчетов не работают напрямую, и рассмотрим три наиболее эффективных способа решения этой задачи: стандартный программный способ БСП, использование расширений конфигурации и внедрение внешних дополнительных отчетов.
В современных конфигурациях фирмы «1С» на базе управляемых форм стандартный командный интерфейс для отчетов отключен на уровне платформы. Вместо этого за вывод отчетов отвечает специализированная подсистема БСП (Библиотека стандартных подсистем) — «Варианты отчетов».
Панели отчетов в режиме «1С:Предприятие» строятся динамически на основании данных из справочника ВариантыОтчетов. Если новый отчет не зарегистрирован в этом справочнике и для него не настроены правила размещения, платформа просто проигнорирует его появление в дереве метаданных. Кроме того, БСП оптимизирует запуск системы, из-за чего обновление вспомогательных данных в пользовательском режиме происходит в фоновом режиме, что часто вызывает задержки при обновлении меню на тестовых базах.
Рассмотрим классический способ добавления нового отчета в состав конфигурации с прописыванием необходимых процедур БСП. Предположим, нам необходимо добавить подчиненную подсистему ДоработанныеОтчеты в типовую подсистему РегламентированныйУчет и разместить там новый отчет.
Шаг 1. Создание подсистем и настройка прав
ДоработанныеОтчеты.РегламентированныйУчет.ДоработанныеОтчеты.Шаг 2. Настройка свойств самого отчета
Чтобы отчет корректно обрабатывался БСП, необходимо изменить его стандартное поведение:
ХранилищеВариантовОтчетов.Шаг 3. Регистрация отчета в модуле менеджера
Для того чтобы подсистема «Варианты отчетов» БСП узнала о существовании нашего отчета и поняла, где именно его разместить, мы должны прописать специальную экспортную процедуру в модуле менеджера отчета. Откроем модуль менеджера отчета и добавим следующий код:
Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт
// Находим описание основного варианта отчета
НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Основной");
НастройкиВарианта.Описание = NStr("ru = 'Данный отчет выводит подробные доработанные показатели регламентированного учета.'");
// Указываем путь к нашей новой подсистеме в иерархии метаданных
ПутьКПодсистеме = Метаданные.НайтиПоПолномуИмени("Подсистема.РегламентированныйУчет.Подсистема.ДоработанныеОтчеты");
// Добавляем привязку отчета к созданной подсистеме
// Параметр "Важный" определяет, будет ли отчет выделен жирным шрифтом в панели отчетов
НастройкиВарианта.Размещение.Вставить(ПутьКПодсистеме, "Важный");
НастройкиВарианта.ВидимостьПоУмолчанию = Истина;
КонецПроцедуры
Шаг 4. Регистрация в общем модуле конфигурации
Теперь укажем системе, что наш отчет должен инициализироваться при обновлении метаданных БСП. Для этого найдем общий модуль ВариантыОтчетовПереопределяемый и перейдем к процедуре НастроитьВариантыОтчетов(Настройки). Вставим в нее строку регистрации нашего отчета:
Процедура НастроитьВариантыОтчетов(Настройки) Экспорт
// Регистрируем наш новый отчет в подсистеме БСП
ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ИмяВашегоНовогоОтчета);
КонецПроцедуры
Шаг 5. Принудительное обновление вспомогательных данных
Чтобы изменения вступили в силу немедленно (не дожидаясь отложенного обновления информационной базы регламентными заданиями), выполним обновление вручную одним из следующих способов:
/C ЗапуститьОбновлениеИнформационнойБазы.ИнструментыРазработчикаОбновлениеВспомогательныхДанных.epf, выбрав в ней обновление вариантов отчетов.ВариантыОтчетов.Обновить();.Поскольку 1С:ERP является сложной ERP-системой, находящейся на поддержке, крайне нежелательно вносить изменения в основную конфигурацию напрямую. Это усложнит последующие обновления. Решим эту задачу через механизм расширений.
Разберем по шагам, как перенести логику интеграции отчета в расширение:
ДоработанныеОтчеты и подчиним ее типовой подсистеме РегламентированныйУчет (которую также предварительно добавим в расширение).ХранилищеВариантовОтчетов и снимем признак стандартных команд, как было описано выше).НастроитьВариантыОтчета. Код будет идентичен коду из Способа 1.ПодключаемыеОтчетыИОбработки, ручная правка общих модулей типовой конфигурации в расширении не потребуется.Зачастую бизнес-требования не обязывают разработчиков внедрять отчет непосредственно в структуру метаданных конфигурации или расширения. Самым практичным, быстрым и безопасным решением является создание внешнего дополнительного отчета.
Этот способ идеален тем, что при обновлении системы отчет никак не пострадает, а его редактирование не потребует монопольного доступа к базе данных.
Рассмотрим, как правильно подготовить внешний отчет для корректного отображения в панели отчетов регламентированного учета.
Шаг 1. Создание программного интерфейса регистрации БСП
В модуле объекта внешнего отчета необходимо обязательно создать экспортную функцию СведенияОВнешнейОбработке(). Данная функция возвращает структуру параметров регистрации, которую считывает система при загрузке внешнего файла.
Разберем пример реализации этого метода:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.0.0.0");
// Определяем вид объекта - Дополнительный отчет
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Наименование = "Доработанный регламентированный отчет (внешний)";
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь; // Если требуются повышенные привилегии
// Описываем команду для открытия отчета
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Открыть доработанный отчет";
НоваяКоманда.Идентификатор = "ОткрытьДоработанныйОтчет";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
НоваяКоманда.ПоказыватьОповещение = Ложь;
Возврат ПараметрыРегистрации;
КонецФункции
Шаг 2. Размещение отчета в интерфейсе 1С:Предприятия
После сохранения внешнего отчета на жесткий диск выполним его загрузку в базу данных:
Регламентированный учет.После проведения этих настроек у выбранных пользователей в меню «Регламентированный учет» появится стандартный пункт «Дополнительные отчеты», внутри которого будет находиться наш новый доработанный отчет.
Иногда заказчики требуют разместить новую подсистему в строго определенном месте командного интерфейса — например, в самом низу меню, сразу под разделом «Сервис».
Проанализируем эту ситуацию. Группа «Сервис» в командном интерфейсе разделов 1С является жестко зафиксированной платформенной системной группой. По правилам построения интерфейса платформы «1С:Предприятие 8» структура любого раздела делится на следующие стандартные блоки:
Платформа накладывает строгое ограничение: переместить любую пользовательскую подсистему или команду навигации *ниже* группы «Сервис» штатными средствами конфигуратора невозможно.
Если перед вами стоит задача обойти это ограничение, то придется пойти на архитектурную хитрость: полностью скрыть стандартную команду группы «Сервис» в командном интерфейсе раздела, создать свою собственную подсистему-пустышку с названием «Сервис» и вручную наполнить её командами, расположив ее выше или ниже вашей доработанной подсистемы. Однако помните, что такое решение усложняет поддержку интерфейса и может запутать конечных пользователей.