К статье
Практический материал

Отчеты и Аналитика · 11 мин

1С СКД: как программно выбрать вариант отчета

Как программно выбрать вариант отчета в 1С на СКД: методы УстановитьТекущийВариант, работа с настройками компоновки, примеры кода и типичные ошибки.

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

Выбор способа зависит от того, где выполняется код: в модуле объекта отчета, в форме отчета, в общем модуле или при программном формировании результата без открытия формы. Ниже разобраны все рабочие сценарии с готовыми фрагментами кода, ограничениями каждого подхода и типичными ошибками, которые приводят к тому, что «вариант не применяется».

Как устроены варианты отчета в СКД

Каждый отчет на СКД хранит один или несколько вариантов настроек внутри схемы компоновки. У каждого варианта есть имя (ключ), представление и собственный набор настроек: структура, отборы, параметры, условное оформление. Когда пользователь открывает отчет, платформа подставляет вариант по умолчанию — либо тот, что помечен основным в схеме, либо последний сохраненный пользователем, если включено хранение пользовательских настроек.

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

Способ 1: метод УстановитьТекущийВариант

У объекта отчета есть метод УстановитьТекущийВариант(КлючВарианта). Он находит вариант по ключу в схеме компоновки и загружает его настройки в компоновщик настроек. Это самый прямой способ, когда код выполняется в контексте объекта отчета.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

УстановитьТекущийВариант("ПродажиПоМенеджерам");

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,

КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры

Обратите внимание: при переопределении ПриКомпоновкеРезультата вы берете формирование на себя, поэтому нужно вручную получать настройки компоновщика после установки варианта. Если отчет формируется стандартно (без переопределения обработчика), достаточно установить вариант раньше — например, при создании формы.

Способ 2: открытие формы отчета с нужным вариантом

Когда отчет нужно просто показать пользователю, код пишется не в модуле отчета, а в месте вызова — например, в команде на форме документа или в общем модуле. У управляемой формы отчета есть стандартный параметр КлючВарианта, который платформа обрабатывает сама.

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("КлючВарианта", "ПродажиПоМенеджерам");

ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);

ОткрытьФорму("Отчет.Продажи.Форма", ПараметрыФормы);

Параметр СформироватьПриОткрытии заставляет отчет сразу выполниться с выбранным вариантом, без нажатия кнопки «Сформировать». Дополнительно можно передать Отбор — структуру с отборами, которые будут наложены поверх настроек варианта.

Если отчет подключен к подсистеме «Варианты отчетов» (БСП), вместо ключа варианта схемы используется ключ варианта из справочника вариантов отчетов. В этом случае открытие выполняется через общую форму ФормаОтчета с параметрами КлючВарианта и КлючОбъекта.

Порядок действий
  1. 1
    Откройте схему компоновки отчета и узнайте ключ нужного варианта на закладке «Настройки»
  2. 2
    В месте вызова сформируйте структуру параметров с КлючВарианта и СформироватьПриОткрытии
  3. 3
    Вызовите ОткрытьФорму с полным именем формы отчета
  4. 4
    Проверьте, что отчет открылся с нужным вариантом и сразу сформировался

Способ 3: прямая загрузка настроек в компоновщик

Когда нужно не просто выбрать вариант, а доработать его настройки программно — добавить отбор, изменить параметр, скрыть группировку — удобнее работать напрямую с компоновщиком настроек. Настройки варианта извлекаются из схемы и загружаются методом ЗагрузитьНастройки.

СхемаКомпоновки = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

ВариантНастроек = СхемаКомпоновки.ВариантыНастроек.Найти("ПродажиПоМенеджерам");

Если ВариантНастроек = Неопределено Тогда

ВызватьИсключение "Вариант отчета не найден";

КонецЕсли;

ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(ВариантНастроек.Настройки);

// Доработка настроек: добавим отбор по организации

ЭлементОтбора = ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(

Тип("ЭлементОтбораКомпоновкиДанных"));

ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");

ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

ЭлементОтбора.ПравоеЗначение = ТекущаяОрганизация;

ЭлементОтбора.Использование = Истина;

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

bsl
Вариант = СхемаКомпоновкиДанных.ВариантыНастроек.Найти("КлючВарианта"); КомпоновщикНастроек.ЗагрузитьНастройки(Вариант.Настройки);

Сравнение способов и критерии выбора

Три подхода не взаимозаменяемы полностью: у каждого своя область применения. Выбор определяется тем, откуда выполняется код и нужна ли доработка настроек.

Сравнение вариантов

УстановитьТекущийВариант

Подходит для кода внутри модуля объекта отчета. Не работает вне контекста объекта и не позволяет тонко доработать настройки до загрузки.

Параметр КлючВарианта при открытии формы

Оптимален для интерактивного показа отчета пользователю. Не применим при фоновом формировании без формы.

ЗагрузитьНастройки в компоновщик

Универсальный способ для программного формирования и доработки настроек. Требует ручного выполнения всего цикла компоновки.

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

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Опечатка в ключе варианта: метод молча не находит вариант или вызывает исключение, а отчет открывается с настройками по умолчанию. Всегда проверяйте результат Найти() на Неопределено.
02
Установка варианта после формирования: настройки загружены, но результат уже построен. Нужно либо устанавливать вариант раньше, либо вызвать повторное формирование.
03
Игнорирование пользовательских настроек: в форме отчета пользовательские настройки могут перекрывать загруженный вариант. Очищайте или явно задавайте пользовательские настройки.
04
Обращение к УстановитьТекущийВариант в форме отчета напрямую: у формы нет такого метода, используйте объект отчета или свойство КлючТекущегоВарианта.
Контрольные точки

Как проверить результат

Ключ варианта в коде
Норма

Совпадает посимвольно с именем варианта в схеме СКД

Тревожный признак

Другой регистр, лишние пробелы, вариант не найден

Момент установки варианта
Норма

Вариант установлен до компоновки макета

Тревожный признак

Настройки загружены после формирования результата

Заголовок и структура отчета
Норма

Соответствуют выбранному варианту

Тревожный признак

Отображается вариант по умолчанию или предыдущий вариант

Ограничения и безопасные границы

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

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

FAQ

Как узнать ключ варианта, если он не задан явно?

Откройте схему компоновки данных, перейдите на закладку «Настройки» и посмотрите свойства варианта в окне настроек. Если имя не задано вручную, платформа формирует его автоматически, поэтому надежнее явно задать понятный ключ в конфигураторе.

Можно ли выбрать вариант, созданный пользователем в режиме предприятия?

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

Почему отчет открывается с нужным вариантом, но без моего отбора?

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

Как выбрать вариант при формировании отчета в фоновом задании?

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

Чем отличается КлючВарианта от КлючПользовательскихНастроек?

КлючВарианта определяет, какой вариант настроек будет загружен. КлючПользовательскихНастроек идентифицирует набор пользовательских настроек внутри варианта — он нужен, чтобы разные сценарии открытия одного варианта не делили одни сохраненные настройки.

Работает ли УстановитьТекущийВариант для внешних отчетов?

Да, метод доступен у объекта внешнего отчета так же, как у встроенного. Ограничение возникает только при обращении из формы: там нужно сначала получить объект отчета или использовать свойства формы.

Итог

Что важно запомнить

Выбор варианта отчета СКД сводится к трем сценариям: УстановитьТекущийВариант в модуле объекта, параметр КлючВарианта при открытии формы и ЗагрузитьНастройки в компоновщик для программного формирования. Всегда проверяйте ключ варианта и устанавливайте настройки до момента компоновки результата.