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