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