Как программно вывести отборы в шапку отчета и настроить структуру СКД

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

При разработке отчетов на базе Системы компоновки данных (СКД) часто возникает задача сделать интерфейс максимально удобным для конечного пользователя. Одной из таких задач является вынос наиболее важных фильтров непосредственно в верхнюю часть формы («шапку») и программное управление группировками. Разберем подробно, как это реализовать в типовых конфигурациях, таких как КА 2 или УТ 11, и почему изменения в конфигураторе иногда не отображаются в режиме предприятия.

Настройка вывода отборов в шапку через конфигуратор

Самый простой и правильный способ вывести отборы в «Быстрый доступ» — воспользоваться встроенными механизмами СКД в конфигураторе. Рассмотрим этот процесс по шагам:

  1. Откроем схему компоновки данных и перейдем на закладку Настройки.
  2. В нижней части окна выберем вкладку Отбор.
  3. Выберем поле, которое необходимо вывести на форму, или добавим новое.
  4. Нажмем на кнопку Свойства элемента пользовательских настроек (она выглядит как изображение гаечного ключа в нижней командной панели).
  5. В появившемся окне установим флажок Включать в пользовательские настройки.
  6. В поле Режим редактирования выберем значение Быстрый доступ.

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

Программное управление отборами

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

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


// Находим нужное поле компоновки
ИмяПоля = "Организация";
ПолеКомпоновки = Новый ПолеКомпоновкиДанных(ИмяПоля);

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

// Чтобы отбор появился в пользовательских настройках (в шапке)
// Нужно связать его через ИдентификаторПользовательскойНастройки
ЭлементОтбора.ИдентификаторПользовательскойНастройки = "ОтборПоОрганизации";

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

Программная настройка структуры отчета

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

  1. Создаем объект ГруппировкаКомпоновкиДанных.
  2. Добавляем поле группировки в коллекцию ПоляГруппировки.
  3. Определяем, какие поля будут выводиться в этой группировке (коллекция ВыбранныеПоля).

Посмотрим на пример кода:


// Очищаем текущую структуру
КомпоновщикНастроек.Настройки.Структура.Очистить();

// Создаем новую группировку по Контрагенту
Группировка = КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Группировка.Использование = Истина;

// Указываем поле группировки
ПолеГруппировки = Группировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Контрагент");
ПолеГруппировки.Использование = Истина;

// Добавляем выбранные поля для этой группировки (например, Автополе)
ВыбранноеПоле = Группировка.ВыбранныеПоля.Элементы.Добавить(Тип("АвтоПолеВыбранныхПолейКомпоновкиДанных"));
ВыбранноеПоле.Использование = Истина;

Проблема «сохраненных настроек» и их сброс

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

Система 1С по умолчанию сохраняет последние настройки пользователя (в хранилище настроек). При повторном открытии отчета она игнорирует настройки «по умолчанию» из конфигуратора и загружает то, что пользователь настраивал в прошлый раз. Чтобы увидеть изменения, необходимо сбросить настройки.

Рассмотрим способы решения:

  1. В режиме пользователя: Зайти в меню Еще -> Установить стандартные настройки. Это принудительно загрузит схему из конфигуратора.
  2. Программно в модуле формы: Можно переопределить загрузку настроек в событии ПриСозданииНаСервере или использовать ПередЗагрузкойВариантаНаСервере.

Пример принудительной загрузки стандартных настроек:


// В модуле формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Если это первый запуск или нужно принудительно обновить
    НастройкиПоУмолчанию = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
    Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиПоУмолчанию);
КонецПроцедуры

Важный момент: использование СтандартнаяОбработка = Ложь в обработчиках загрузки настроек позволяет полностью игнорировать кэшированные данные пользователя, но пользоваться этим стоит аккуратно, чтобы не вызвать раздражение пользователей потерей их личных настроек.

Особенности для конфигураций на БСП (КА 2, УТ 11)

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

ОтчетыКлиентСервер.УстановитьЭлементОтбора(КомпоновщикНастроек.Настройки.Отбор, "Номенклатура", ЗначениеНоменклатуры);

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

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

← На главную