При разработке и внедрении внешних отчетов в конфигурациях на базе 1С:Предприятие 8.3 (особенно использующих Библиотеку стандартных подсистем — БСП, таких как «Охрана труда», «ERP Управление предприятием», «Зарплата и управление персоналом» и другие) разработчики часто сталкиваются с неприятной проблемой. Внешний отчет успешно регистрируется в справочнике «Дополнительные отчеты и обработки», для него настраиваются разделы размещения, однако в пользовательском режиме в панели отчетов соответствующего раздела или в общем списке отчетов он упорно не появляется.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем программный код регистрации отчета, рассмотрим тонкие настройки прав и параметров БСП, а также дадим пошаговую инструкцию по выводу внешнего отчета в интерфейс.
Это самая распространенная и неочевидная техническая ошибка, которую совершают даже опытные специалисты при создании внешних отчетов с нуля. Механизм БСП, отвечающий за вывод вариантов отчетов в общие панели, жестко завязан на стандартное хранилище вариантов конфигурации.
Выясним, как это устроено. Когда система регистрирует внешний отчет, она считывает его структуру и пытается опубликовать его варианты. Если в свойствах самого отчета в Конфигураторе не указано специальное хранилище, БСП просто игнорирует публикацию вариантов в панели отчетов, хотя сам файл отчета будет успешно загружен в базу.
Решение проблемы по шагам:
.erf).ХранилищеВариантовОтчетов.Для интеграции внешнего объекта в БСП используется экспортная функция СведенияОВнешнейОбработке, расположенная в модуле объекта отчета. Ошибки или неточности в заполнении параметров этой функции напрямую влияют на видимость отчета в интерфейсе. При необходимости пакетного исправления программного кода в нескольких файлах можно использовать инструмент для массовой правки модулей внешних обработок.
Проанализируем пример функции регистрации, который часто используется разработчиками:
Функция СведенияОВнешнейОбработке() Экспорт
МетаданныеОбъекта = Метаданные();
Версия = МетаданныеОбъекта.Комментарий;
Если Найти(Версия, "(") Тогда
Версия = СокрЛП(Лев(Версия, Найти(Версия, "(") - 1));
КонецЕсли;
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(СтандартныеПодсистемыСервер.ВерсияБиблиотеки());
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Версия = Версия;
// Ошибка 1: Данная строка бесполезна для вида "ДополнительныйОтчет"
ПараметрыРегистрации.Назначение.Добавить("Подсистема.СпецодеждаИСИЗ");
ПараметрыРегистрации.Наименование = НСтр("ru = 'Отчет: """ + МетаданныеОбъекта.Синоним + """'");
ПараметрыРегистрации.Информация = НСтр("ru = 'Внешний отчет: """ + МетаданныеОбъекта.Синоним + """'");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Отчет: """ + МетаданныеОбъекта.Синоним + """'");
НоваяКоманда.Идентификатор = НСтр("ru = '" + МетаданныеОбъекта.Синоним + "'");
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
НоваяКоманда.ПоказыватьОповещение = Ложь;
НовыйВариант = ПараметрыРегистрации.ВариантыОтчета.Добавить();
НовыйВариант.КлючВарианта = СхемаКомпоновкиДанных.ВариантыНастроек[0].Имя;
// Ошибка 2: Неверный формат указания подсистемы
НовыйВариант.Подсистема = "Подсистема.СпецодеждаИСИЗ";
НовыйВариант.Описание = НСтр("ru = 'Отчет выводит штатное расписание с указанием норм.'");
Возврат ПараметрыРегистрации;
КонецФункции
Разберем детально, какие ошибки допущены в этом коде и как их исправить:
Назначение для отчетов: Команда ПараметрыРегистрации.Назначение.Добавить() используется исключительно для назначаемых обработок (например, заполнение табличных частей, печатные формы, связанные с конкретными объектами метаданных). Для объектов с видом ДополнительныйОтчет это свойство полностью игнорируется БСП. Его можно смело удалить из кода, так как оно вводит в заблуждение.НовыйВариант.Подсистема = "Подсистема.СпецодеждаИСИЗ"; допущена серьезная ошибка. Имя подсистемы должно строго соответствовать её имени в конфигураторе без использования префиксов вида "Подсистема.". Правильный вариант написания: НовыйВариант.Подсистема = "СпецодеждаИСИЗ";. Если подсистема является подчиненной (вложенной), путь к ней указывается через точку, например: "Кадры.СпецодеждаИСИЗ". Если имя указано неверно, БСП не сможет сопоставить вариант отчета с конкретным разделом интерфейса.Рассмотрим правильный вариант заполнения параметров регистрации вариантов:
НовыйВариант = ПараметрыРегистрации.ВариантыОтчета.Добавить();
// Указываем имя настройки из схемы компоновки данных (СКД)
НовыйВариант.КлючВарианта = "Основной";
// Указываем реальное программное имя подсистемы из дерева метаданных конфигурации
НовыйВариант.Подсистема = "СпецодеждаИСИЗ";
НовыйВариант.Описание = НСтр("ru = 'Отчет по нормам выдачи спецодежды и СИЗ'");
После загрузки внешнего отчета в базу данных администратору необходимо явно указать, в каких разделах интерфейса отчет должен быть доступен пользователям, а также определить список этих пользователей.
Рассмотрим пошагово, как выполнить эту настройку в режиме «1С:Предприятие»:
Даже если администратор выполнил все настройки корректно, конкретный пользователь может не видеть отчет из-за индивидуальных настроек своего интерфейса в 1С. В БСП панели отчетов динамически настраиваются под каждого сотрудника.
Выясним, как пользователю включить отображение отчета:
Еще один важный аспект — это роли и права доступа. Если у пользователя отсутствуют специализированные роли для работы с внешними объектами, платформа заблокирует вывод отчета.
Проанализируем необходимые настройки прав в конфигурации:
Если ваш внешний отчет не отображается в панели отчетов, последовательно проверьте следующие шаги:
Хранилище вариантов в свойствах отчета в Конфигураторе? (Должно быть ХранилищеВариантовОтчетов).СведенияОВнешнейОбработке()? (Имя должно быть без слова "Подсистема", ровно так, как оно называется в метаданных).Выполнение этих простых правил гарантирует корректную интеграцию и стабильную работу любых внешних отчетов в вашей информационной базе под управлением БСП. Для пакетной выгрузки и повторной загрузки измененных объектов в базу можно использовать обработку для массового экспорта и импорта дополнительных отчетов и обработок.