Как программно получить настройки пользовательских вариантов отчетов на СКД

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

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

Использование платформенного ХранилищаВариантовОтчетов

По умолчанию платформа 1С сохраняет все пользовательские настройки вариантов отчетов в специальный системный объект — ХранилищеВариантовОтчетов. Чтобы прочитать эти данные, нам потребуется использовать программные методы этого менеджера.

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

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


// Создаем структуру отбора по нужному отчету
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("КлючОбъекта", "Отчет.КонтрольОстатковНаСкладеГПДляРассылки");

// Получаем выборку из хранилища вариантов
ВыборкаВариантов = ХранилищеВариантовОтчетов.Выбрать(СтруктураОтбора);

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

КонецЦикла;

В данном коде в качестве свойства КлючОбъекта мы передаем полное имя отчета в метаданных (с префиксом Отчет.). Метод Выбрать() возвращает объект ВыборкаИзХранилищаНастроек, свойства которой (КлючНастройки, Представление, Пользователь, Настройки) становятся доступными только после вызова Следующий().

Альтернативные методы прямого получения настроек

Если нам не нужно перебирать все варианты циклом, а требуется получить список доступных ключей или загрузить одну конкретную настройку по известному ключу, платформа предоставляет более эффективные методы:

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

Давайте посмотрим на практический пример использования этих методов:


КлючОтчета = "Отчет.КонтрольОстатковНаСкладеГПДляРассылки";

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

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

Особенности работы в конфигурациях на БСП (на примере УНФ 1.6)

Если вы работаете в современной конфигурации 1С (такой как 1С:Управление нашей фирмой, 1С:ERP, 1С:Комплексная автоматизация или 1С:Управление торговлей), стандартные платформенные механизмы хранения настроек тесно интегрированы с Библиотекой стандартных подсистем (БСП). В этом случае БСП переопределяет стандартное поведение системы.

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

Ключевыми реквизитами справочника ВариантыОтчетов являются:

Разберем, как получить настройки варианта напрямую из справочника БСП с помощью запроса и извлечь их из хранилища значений:


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

Запрос.УстановитьПараметр("ПолноеИмяОтчета", "Отчет.КонтрольОстатковНаСкладеГПДляРассылки");

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

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

Двухуровневая модель настроек: Варианты vs Пользовательские настройки

При работе с СКД важно четко разграничивать два уровня настроек, так как они хранятся в разных местах и выполняют разные функции:

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

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


// Шаг 1: Загружаем базовые настройки самого варианта отчета
КлючОбъекта = "Отчет.КонтрольОстатковНаСкладеГПДляРассылки";
КлючВарианта = "ОсновнойВариант";
НастройкиВарианта = ХранилищеВариантовОтчетов.Загрузить(КлючОбъекта, КлючВарианта);

// Шаг 2: Загружаем индивидуальные пользовательские настройки для этого варианта
Пользователь = ИмяПользователя(); // Или конкретное имя пользователя 1С
КлючПользовательскойНастройки = КлючВарианта + "/ПользовательскиеНастройки";
ПользовательскиеНастройки = ХранилищеПользовательскихНастроекОтчетов.Загрузить(КлючОбъекта, КлючПользовательскойНастройки, , Пользователь);

// Шаг 3: Инициализируем компоновщик настроек отчета
Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыВВременномХранилище));

// Шаг 4: Накладываем базовые настройки варианта
Компоновщик.ЗагрузитьНастройки(НастройкиВарианта);

// Шаг 5: Накладываем сверху индивидуальные пользовательские настройки
Если ПользовательскиеНастройки <> Неопределено Тогда
    Компоновщик.ЗагрузитьПользовательскиеНастройки(ПользовательскиеНастройки);
КонецЕсли;

// Теперь в Компоновщик.Настройки находится итоговая структура с учетом всех отборов пользователя!

Использование готового API БСП

В конфигурациях, использующих БСП, настоятельно рекомендуется избегать прямого обращения к низкоуровневым платформенным хранилищам, если в подсистеме «Варианты отчетов» уже реализованы готовые процедуры. Использование стандартного программного интерфейса БСП гарантирует, что ваш код продолжит корректно работать при обновлении платформы и конфигурации, а также автоматически учтет права доступа текущего пользователя и пометки удаления элементов.

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

← На главную