Как программно обратиться к пользовательским вариантам отчетов в конфигураторе 1С

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

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

Различие между статическими и динамическими вариантами

Для начала проанализируем ситуацию: почему в конфигураторе в макете СКД на вкладке «Настройки» мы видим только те варианты, которые создали сами, а пользовательские настройки там отсутствуют? Дело в том, что в 1С существует два уровня хранения вариантов:

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

Чтобы программно «достучаться» до второго типа, нам придется использовать механизмы запросов к справочникам или методы работы с менеджерами хранилищ настроек.

Способ 1: Перенос настроек через XML (самый простой путь)

Если ваша задача — просто перенести удачный вариант, созданный пользователем, в состав конфигурации, чтобы он стал доступен всем «из коробки», воспользуемся механизмом импорта/экспорта. Рассмотрим последовательность действий:

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

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

Способ 2: Поиск метаданных варианта через справочник «Варианты отчетов»

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

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


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
|    ВариантыОтчетов.Ссылка,
|    ВариантыОтчетов.КлючВарианта
|ИЗ
|    Справочник.ВариантыОтчетов КАК ВариантыОтчетов
|ГДЕ
|    ВариантыОтчетов.Отчет = &Отчет
|    И ВариантыОтчетов.Наименование = &Наименование";

// Для внешнего отчета параметром может выступать ссылка на справочник ДополнительныеОтчетыИОбработки
Запрос.УстановитьПараметр("Отчет", СсылкаНаДопОтчет); 
Запрос.УстановитьПараметр("Наименование", "Мой пользовательский вариант");

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
    КлючВарианта = Выборка.КлючВарианта;
КонецЕсли;

Важный нюанс: Если отчет является «внешним» (дополнительным), то в поле Отчет справочника ВариантыОтчетов будет храниться ссылка на элемент справочника ДополнительныеОтчетыИОбработки. Если же отчет встроенный, то поиск может идти по полному имени метаданных.

Способ 3: Программное получение настроек из хранилища

Само содержимое настроек (отборы, группировки, выбранные поля) хранится не в справочнике, а в системном объекте ХранилищеВариантовОтчетов. Чтобы извлечь объект НастройкиКомпоновкиДанных, нам необходимо знать «Ключ объекта» и «Ключ настроек».

Выясним, как это реализовать на практике. Разберем пример получения списка всех доступных настроек для внешнего отчета:


// Определяем ключ объекта. Для внешних отчетов он обычно начинается с префикса "ВнешнийОтчет."
ИмяОтчета = "ЗагрузкаДанныхИзExcel"; 
КлючОбъекта = "ВнешнийОтчет." + ИмяОтчета;

// Получаем список всех сохраненных вариантов для этого отчета
СписокНастроек = ХранилищеВариантовОтчетов.ПолучитьСписок(КлючОбъекта);

Для Каждого ЭлементСписка Из СписокНастроек Цикл
    // ЭлементСписка.Значение - это и есть КлючВарианта
    // ЭлементСписка.Представление - наименование варианта для пользователя
    
    // Загружаем сами настройки
    Настройки = ХранилищеВариантовОтчетов.Загрузить(КлючОбъекта, ЭлементСписка.Значение);
    
    // Теперь переменную 'Настройки' можно применить к компоновщику
    // МойОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
КонецЦикла;

В этом примере метод Загрузить возвращает объект типа НастройкиКомпоновкиДанных. Это именно то, что нужно для программного формирования отчета с пользовательскими фильтрами.

Особенности работы с внешними (дополнительными) отчетами

Если вы работаете в конфигурации на базе БСП (например, УТ 11, ERP 2.x, БП 3.0), следует учитывать, что дополнительные отчеты регистрируются в системе особым образом. Ключ объекта в хранилище может выглядеть как ДополнительныйОтчет.[GUID], где GUID — это уникальный идентификатор записи из справочника дополнительных обработок.

Рассмотрим более продвинутый способ через программный интерфейс общего модуля ВариантыОтчетов. Разберем, как получить настройки, не вникая в структуру ключей хранилища вручную:


// Если у нас есть ссылка на вариант из справочника ВариантыОтчетов
СсылкаНаВариант = ...; 

// Используем программный интерфейс БСП
ОписаниеВарианта = ВариантыОтчетов.ОписаниеВарианта(СсылкаНаВариант);
КлючВарианта = ОписаниеВарианта.КлючВарианта;

// Получаем объект настроек
Настройки = ВариантыОтчетов.НастройкиВарианта(СсылкаНаВариант);

Использование модуля ВариантыОтчетов является наиболее предпочтительным, так как он автоматически учитывает права доступа пользователя и особенности хранения данных для различных типов отчетов.

Резюме и рекомендации

Проанализировав различные подходы, можно сделать следующие выводы:

  1. Для разработки: Используйте экспорт в XML, чтобы навсегда закрепить удачные настройки в конфигурации.
  2. Для автоматизации (фоновые задания, рассылки): Используйте метод ХранилищеВариантовОтчетов.Загрузить(). Обязательно проверяйте правильность формирования КлючОбъекта.
  3. Для универсальности: Всегда проверяйте наличие общего модуля ВариантыОтчетов в вашей конфигурации. Его методы — самый надежный способ работы с вариантами в экосистеме 1С.

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

← На главную