Как программно настроить и открыть Универсальный отчет в управляемых формах 1С

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

В современных конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП), таких как Управление торговлей 11, ERP 2 или Комплексная автоматизация, механизм УниверсальныйОтчет является мощным инструментом для анализа данных. Часто возникает задача не просто открыть этот отчет из меню, а вызвать его программно из формы другого объекта (например, из списка документов), передав в него конкретные параметры: период, номенклатуру или склад. Разберем по шагам, как это реализовать правильно и эффективно.

Базовый механизм открытия отчета

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


&НаКлиенте
Процедура ОткрытьОтчетПоНоменклатуре(Регистратор)
    // Формируем список значений или массив для отбора
    спНоменклатуры = ПолучитьСписокНоменклатурыИзДокумента(Регистратор);
    
    // Структура 'Отбор' содержит поля, которые будут добавлены в компоновку
    УсловияОтбора = Новый Структура("Номенклатура", спНоменклатуры);
    
    // Структура 'Параметры' отвечает за параметры СКД (например, период)
    ПараметрыОтчета = Новый Структура("Период", ПолучитьДату(Регистратор));
    
    // Формируем параметры формы для передачи в Универсальный отчет
    ПараметрыФормы = Новый Структура();
    ПараметрыФормы.Вставить("Отбор", УсловияОтбора);
    ПараметрыФормы.Вставить("Параметры", ПараметрыОтчета);
    ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
    ПараметрыФормы.Вставить("Расширенный", Истина);
    
    // Вызываем форму объекта отчета
    ОткрытьФорму("Отчет.УниверсальныйОтчет.ФормаОбъекта", ПараметрыФормы);
КонецПроцедуры

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

Определение источника данных (Тип и Имя объекта)

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

  1. ТипОбъекта: Указывает категорию метаданных. Принимает строковые значения: "РегистрНакопления", "РегистрСведений", "Документ" или "Справочник".
  2. ИмяОбъекта: Внутреннее имя объекта, заданное в конфигураторе. Например, "ВыручкаИСебестоимостьПродаж" или "ОстаткиТоваров".
  3. ИмяТаблицы: Для регистров это уточнение виртуальной таблицы. Например, для регистра накопления это могут быть "Обороты", "Остатки" или "ОстаткиИОбороты".

Посмотрим на расширенный пример настройки источника данных:


ПараметрыФормы.Вставить("ТипОбъекта", "РегистрНакопления");
ПараметрыФормы.Вставить("ИмяОбъекта", "Продажи");
ПараметрыФормы.Вставить("ИмяТаблицы", "Обороты");

Использование вариантов и фиксированных настроек

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

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

Управление интерфейсом при открытии

Для улучшения UX (пользовательского опыта) мы можем управлять тем, как отчет будет выглядеть на экране. Выясним, какие дополнительные параметры БСП поддерживает для формы Универсального отчета:

Программная генерация без открытия формы

Рассмотрим ситуацию, когда отчет нужно сформировать «в фоне», получить его табличный документ и, например, отправить по электронной почте. В этом случае нам не нужно вызывать ОткрытьФорму. Мы работаем напрямую с объектом отчета на сервере.

Проанализируем последовательность действий:


// 1. Создаем объект отчета
ОтчетОбъект = Отчеты.УниверсальныйОтчет.Создать();

// 2. Инициализируем настройки источника
ОтчетОбъект.ТипОбъекта = "РегистрНакопления";
ОтчетОбъект.ИмяОбъекта = "ТоварыНаСкладах";
ОтчетОбъект.УстановитьНачальныеНастройки();

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

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

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

Особенности для разных редакций БСП

Стоит отметить, что в старых версиях БСП (ниже 2.3) некоторые параметры могли передаваться иначе, но в современных конфигурациях на платформе 8.3 (Управляемые формы) описанный выше метод через структуру ПараметрыФормы является стандартом. Если вы столкнулись с тем, что отборы не применяются, проверьте, включен ли режим Расширенный (это соответствует переключателю «Расширенная настройка» в интерфейсе отчета).

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

← На главную