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