Как программно загрузить настройки из созданного варианта отчета в 1С

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

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

Различие между предопределенными и пользовательскими вариантами

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

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

Если с первыми работать просто через обращение к свойству ВариантыНастроек схемы, то для вторых необходимо задействовать механизмы Библиотеки стандартных подсистем (БСП).

Способ 1. Загрузка предопределенного варианта из схемы

Если нам известно имя варианта, зашитого в конфигурацию, мы можем загрузить его напрямую в компоновщик настроек. Рассмотрим этот пример кода:


// Создаем объект отчета
ОбъектОтчет = Отчеты.ВыручкаИСебестоимостьПродаж.Создать();

// Получаем настройки конкретного варианта из схемы
ИмяВарианта = "ДинамикаПродаж";
НужныеНастройки = ОбъектОтчет.СхемаКомпоновкиДанных.ВариантыНастроек[ИмяВарианта].Настройки;

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

// Теперь можно компоновать результат
ТаблДокумент = Новый ТабличныйДокумент;
ОбъектОтчет.СкомпоноватьРезультат(ТаблДокумент);

Способ 2. Загрузка пользовательского варианта через БСП (рекомендуемый)

Когда вариант создан пользователем, нам нужно найти его в справочнике и извлечь настройки. Самый надежный способ в УТ 11 или ERP — использовать программный интерфейс подсистемы ВариантыОтчетов. Разберем по шагам, как это реализовать, используя идентификаторы и методы библиотеки.


// 1. Получаем полное имя отчета
ПолноеИмяОтчета = "Отчет.ВыручкаИСебестоимостьПродаж";

// 2. Находим список всех доступных ключей вариантов для этого отчета
СписокВариантов = ВариантыОтчетов.КлючиВариантовОтчета(ПолноеИмяОтчета);

// Предположим, нам нужен первый найденный пользовательский вариант
// В реальной задаче здесь может быть поиск по наименованию
Если СписокВариантов.Количество() > 0 Тогда
    КлючВарианта = СписокВариантов[0].Значение;
    ИдентификаторОтчета = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПолноеИмяОтчета);
    
    // Получаем ссылку на вариант из справочника
    ВариантСсылка = ВариантыОтчетов.ВариантОтчета(ИдентификаторОтчета, КлючВарианта);
    
    // Подключаем отчет и загружаем настройки через БСП
    ПараметрыПодключения = Новый Структура;
    ПараметрыПодключения.Вставить("СсылкаВарианта", ВариантСсылка);
    
    РезультатЗагрузки = ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки(ПараметрыПодключения);
    
    // Теперь у нас есть готовый объект отчета с загруженными настройками
    ОбъектОтчет = РезультатЗагрузки.Объект;
    
    // Важно: если нужно вывести результат в ТабличныйДокумент
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ОбъектОтчет.СкомпоноватьРезультат(ТабличныйДокумент);
КонецЕсли;

Способ 3. Прямое чтение из справочника «Варианты отчетов»

Выясним, как добраться до настроек, если мы хотим действовать «в лоб», без использования высокоуровневых процедур БСП. Сами настройки хранятся в реквизите Настройки (тип ХранилищеЗначения) справочника ВариантыОтчетов.


// Поиск варианта по наименованию
СсылкаНаВариант = Справочники.ВариантыОтчетов.НайтиПоНаименованию("Мой кастомный отчет");

Если Не СсылкаНаВариант.Пустая() Тогда
    // Извлекаем настройки из хранилища
    НастройкиИзХранилища = СсылкаНаВариант.Настройки.Получить();
    
    Если ТипЗнч(НастройкиИзХранилища) = Тип("НастройкиКомпоновкиДанных") Тогда
        ОбъектОтчет = Отчеты.ВыручкаИСебестоимостьПродаж.Создать();
        
        // Загружаем основные настройки
        ОбъектОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиИзХранилища);
        
        // Обязательно восстанавливаем настройки для корректной работы пользовательских полей
        ОбъектОтчет.КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.Полное);
        
        // Выводим результат
        Результат = Новый ТабличныйДокумент;
        ОбъектОтчет.СкомпоноватьРезультат(Результат);
    КонецЕсли;
КонецЕсли;

Важные нюансы при работе с ЗУП и внешними наборами данных

Проанализируем ситуацию, часто встречающуюся в ЗУП 3 или сложных отчетах ERP. Если при вызове метода СкомпоноватьРезультат возникает ошибка вида «Не найден внешний набор данных», это означает, что отчет формируется программно внутри модуля объекта.

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

Рассмотрим пример использования подсистемы рассылки для инициализации:


ПараметрыОтчета = Новый Структура("Отчет, Настройки", ВариантСсылка, Неопределено);
ДанныеИнициализации = РассылкаОтчетов.ИнициализироватьОтчет(Неопределено, ПараметрыОтчета, Ложь, Новый УникальныйИдентификатор);

// Теперь настройки доступны в структуре:
МоиНастройки = ДанныеИнициализации.НастройкиКД;

Заключение

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

← На главную