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