Как программно открыть внешний отчет СКД с определенной пользовательской настройкой

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

В процессе разработки на платформе 1С:Предприятие 8.3 часто возникает необходимость автоматизировать действия пользователя. Одной из таких задач является программное открытие внешнего отчета с уже примененными фильтрами или пользовательскими настройками. Это особенно актуально для конфигураций, построенных на базе Библиотеки стандартных подсистем (БСП), таких как Управление торговлей 11.3.

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

Постановка задачи и анализ механизмов

Представим ситуацию: у нас есть внешний отчет, зарегистрированный в справочнике «Дополнительные отчеты и обработки». У этого отчета создано несколько пользовательских настроек (например, «Продажи по регионам», «Продажи по категориям»). Нам нужно из произвольной обработки вызвать этот отчет так, чтобы он открылся не с настройками по умолчанию, а с конкретной выбранной нами настройкой.

Для решения этой задачи нам потребуется выполнить три основных шага:

  1. Найти внешний отчет и получить к нему доступ.
  2. Извлечь нужную настройку из хранилища.
  3. Передать эту настройку в форму отчета при открытии.

Метод 1. Использование стандартных параметров открытия формы

Наиболее элегантный и правильный способ в управляемом приложении — это передача специальных параметров в функцию ОткрытьФорму(). Платформа 1С поддерживает зарезервированные ключи параметров для отчетов.

Рассмотрим пример кода, который подготавливает параметры для открытия:


// Определяем путь к форме внешнего отчета
// Если отчет подключен через справочник ДополнительныеОтчетыИОбработки, 
// имя может быть получено динамически.
ИмяОтчета = "ВнешнийОтчет.МойОтчет_Продажи";
ИмяФормы = ИмяОтчета + ".ФормаОтчета";

ПараметрыФормы = Новый Структура;
// КлючПользовательскихНастроек — это идентификатор (GUID) или имя настройки в хранилище
ПараметрыФормы.Вставить("КлючПользовательскихНастроек", "Настройка1");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);

ОткрытьФорму(ИмяФормы, ПараметрыФормы);

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

Метод 2. Программная загрузка настроек через Компоновщик

Если нам требуется более тонкий контроль (например, мы хотим модифицировать настройки перед открытием), мы можем загрузить их вручную. Как было отмечено в обсуждении, ключевым объектом здесь является КомпоновщикНастроек.

Разберем ситуацию, когда настройки хранятся в объекте ПользовательскиеНастройкиКомпоновкиДанных. Чтобы применить их, нужно использовать метод ЗагрузитьПользовательскиеНастройки(). Посмотрим на алгоритм реализации:


// 1. Получаем объект внешнего отчета
СсылкаНаДопОтчет = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Мой Внешний Отчет");
ИмяОбъекта = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(СсылкаНаДопОтчет);
ОтчетОбъект = ВнешниеОтчеты.Создать(ИмяОбъекта);

// 2. Инициализируем компоновщик
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(ОтчетОбъект.СхемаКомпоновкиДанных);
ОтчетОбъект.КомпоновщикНастроек.Инициализировать(ИсточникНастроек);

// 3. Извлекаем пользовательскую настройку из хранилища (пример для БСП)
КлючОбъекта = "Отчет." + СсылкаНаДопОтчет.ИмяОбъекта;
ПользовательскиеНастройки = ХранилищеПользовательскихНастроекОтчетов.Загрузить(КлючОбъекта, "Настройка1");

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

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

Метод 3. Работа с вариантами настроек СКД

Иногда под «пользовательской настройкой» подразумевают не просто измененные фильтры, а целый Вариант отчета, созданный в конфигураторе или пользователем. В этом случае работа идет с коллекцией ВариантыНастроек схемы компоновки данных.

Рассмотрим, как программно переключить вариант:


ИмяНужногоВарианта = "ОсновнойВариант";
Схема = ОтчетОбъект.СхемаКомпоновкиДанных;
Вариант = Схема.ВариантыНастроек.Найти(ИмяНужногоВарианта);

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

Этот метод полностью заменяет структуру отчета (группировки, выбранные поля), в то время как загрузка пользовательских настроек обычно меняет только параметры и отборы.

Особенности для внешних отчетов в УТ 11 (БСП)

Поскольку автор вопроса использует УТ 11.3, важно учитывать, что внешние отчеты там работают через механизм дополнительных отчетов и обработок. Для их открытия рекомендуется использовать программный интерфейс БСП, чтобы не нарушать логику прав доступа и регистрации сеансов.

Проанализируем шаги для интеграции в БСП:

  1. Используйте функцию ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКоманду() для стандартного запуска.
  2. Если нужно передать специфические параметры настройки, используйте структуру ПараметрыОткрытия, передаваемую в форму.
  3. Помните, что во внешнем отчете может отсутствовать основная форма. В этом случае платформа создаст ее автоматически, но программное воздействие на компоновщик лучше делать в модуле объекта в обработчике ПриКомпоновкеРезультата или передавать настройки через параметры формы.

Важный нюанс: при программном открытии формы внешнего отчета через ОткрытьФорму, идентификатор внешнего отчета в системе может меняться. Поэтому надежнее всего сначала подключить отчет через ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(), получить его временное имя и использовать его для формирования пути к форме.

Резюме и рекомендации

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

Основные инструменты, которые мы рассмотрели:

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

← На главную