При разработке и сопровождении отчетов на базе Системы компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда пользователи создают собственные варианты настроек непосредственно в режиме «1С:Предприятие». Эти варианты не видны в конфигураторе в дереве метаданных объекта, так как они сохраняются в базе данных динамически. В этой статье мы разберем, как получить доступ к этим настройкам из программного кода, как работает механизм их хранения и какие методы БСП (Библиотеки стандартных подсистем) могут упростить нам задачу.
Для начала проанализируем ситуацию: почему в конфигураторе в макете СКД на вкладке «Настройки» мы видим только те варианты, которые создали сами, а пользовательские настройки там отсутствуют? Дело в том, что в 1С существует два уровня хранения вариантов:
Чтобы программно «достучаться» до второго типа, нам придется использовать механизмы запросов к справочникам или методы работы с менеджерами хранилищ настроек.
Если ваша задача — просто перенести удачный вариант, созданный пользователем, в состав конфигурации, чтобы он стал доступен всем «из коробки», воспользуемся механизмом импорта/экспорта. Рассмотрим последовательность действий:
Этот метод идеален для разового переноса, но он не подходит, если вам нужно обращаться к вариантам программно в процессе выполнения кода.
В современных конфигурациях, использующих БСП, сведения о вариантах (как предопределенных, так и пользовательских) хранятся в справочнике Справочник.ВариантыОтчетов. Рассмотрим, как найти ссылку на нужный вариант с помощью запроса. Это полезно, когда нам нужно узнать программный ключ варианта или его наименование.
Проанализируем пример кода для поиска варианта внешнего отчета:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВариантыОтчетов.Ссылка,
| ВариантыОтчетов.КлючВарианта
|ИЗ
| Справочник.ВариантыОтчетов КАК ВариантыОтчетов
|ГДЕ
| ВариантыОтчетов.Отчет = &Отчет
| И ВариантыОтчетов.Наименование = &Наименование";
// Для внешнего отчета параметром может выступать ссылка на справочник ДополнительныеОтчетыИОбработки
Запрос.УстановитьПараметр("Отчет", СсылкаНаДопОтчет);
Запрос.УстановитьПараметр("Наименование", "Мой пользовательский вариант");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
КлючВарианта = Выборка.КлючВарианта;
КонецЕсли;
Важный нюанс: Если отчет является «внешним» (дополнительным), то в поле Отчет справочника ВариантыОтчетов будет храниться ссылка на элемент справочника ДополнительныеОтчетыИОбработки. Если же отчет встроенный, то поиск может идти по полному имени метаданных.
Само содержимое настроек (отборы, группировки, выбранные поля) хранится не в справочнике, а в системном объекте ХранилищеВариантовОтчетов. Чтобы извлечь объект НастройкиКомпоновкиДанных, нам необходимо знать «Ключ объекта» и «Ключ настроек».
Выясним, как это реализовать на практике. Разберем пример получения списка всех доступных настроек для внешнего отчета:
// Определяем ключ объекта. Для внешних отчетов он обычно начинается с префикса "ВнешнийОтчет."
ИмяОтчета = "ЗагрузкаДанныхИзExcel";
КлючОбъекта = "ВнешнийОтчет." + ИмяОтчета;
// Получаем список всех сохраненных вариантов для этого отчета
СписокНастроек = ХранилищеВариантовОтчетов.ПолучитьСписок(КлючОбъекта);
Для Каждого ЭлементСписка Из СписокНастроек Цикл
// ЭлементСписка.Значение - это и есть КлючВарианта
// ЭлементСписка.Представление - наименование варианта для пользователя
// Загружаем сами настройки
Настройки = ХранилищеВариантовОтчетов.Загрузить(КлючОбъекта, ЭлементСписка.Значение);
// Теперь переменную 'Настройки' можно применить к компоновщику
// МойОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
КонецЦикла;
В этом примере метод Загрузить возвращает объект типа НастройкиКомпоновкиДанных. Это именно то, что нужно для программного формирования отчета с пользовательскими фильтрами.
Если вы работаете в конфигурации на базе БСП (например, УТ 11, ERP 2.x, БП 3.0), следует учитывать, что дополнительные отчеты регистрируются в системе особым образом. Ключ объекта в хранилище может выглядеть как ДополнительныйОтчет.[GUID], где GUID — это уникальный идентификатор записи из справочника дополнительных обработок.
Рассмотрим более продвинутый способ через программный интерфейс общего модуля ВариантыОтчетов. Разберем, как получить настройки, не вникая в структуру ключей хранилища вручную:
// Если у нас есть ссылка на вариант из справочника ВариантыОтчетов
СсылкаНаВариант = ...;
// Используем программный интерфейс БСП
ОписаниеВарианта = ВариантыОтчетов.ОписаниеВарианта(СсылкаНаВариант);
КлючВарианта = ОписаниеВарианта.КлючВарианта;
// Получаем объект настроек
Настройки = ВариантыОтчетов.НастройкиВарианта(СсылкаНаВариант);
Использование модуля ВариантыОтчетов является наиболее предпочтительным, так как он автоматически учитывает права доступа пользователя и особенности хранения данных для различных типов отчетов.
Проанализировав различные подходы, можно сделать следующие выводы:
ХранилищеВариантовОтчетов.Загрузить(). Обязательно проверяйте правильность формирования КлючОбъекта.ВариантыОтчетов в вашей конфигурации. Его методы — самый надежный способ работы с вариантами в экосистеме 1С.Помните, что пользовательские варианты могут быть помечены как «личные». В этом случае программный доступ к ним под другим пользователем может быть ограничен из соображений безопасности системы, если только код не выполняется с привилегиями администратора.