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