При разработке отчетов на базе Системы компоновки данных (СКД) часто возникает задача сделать интерфейс максимально удобным для конечного пользователя. Одной из таких задач является вынос наиболее важных фильтров непосредственно в верхнюю часть формы («шапку») и программное управление группировками. Разберем подробно, как это реализовать в типовых конфигурациях, таких как КА 2 или УТ 11, и почему изменения в конфигураторе иногда не отображаются в режиме предприятия.
Самый простой и правильный способ вывести отборы в «Быстрый доступ» — воспользоваться встроенными механизмами СКД в конфигураторе. Рассмотрим этот процесс по шагам:
Именно установка режима «Быстрый доступ» заставляет систему отрисовывать этот отбор непосредственно в шапке формы отчета, а не прятать его в общие настройки.
Иногда требуется управлять отборами динамически в зависимости от условий (например, роли пользователя или выбранного периода). В этом случае мы обращаемся к КомпоновщикуНастроек. Проанализируем, как добавить отбор программно так, чтобы он также попал в пользовательские настройки.
Рассмотрим пример кода, который можно разместить в модуле отчета или формы:
// Находим нужное поле компоновки
ИмяПоля = "Организация";
ПолеКомпоновки = Новый ПолеКомпоновкиДанных(ИмяПоля);
// Добавляем элемент отбора в основные настройки
ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = ПолеКомпоновки;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.Значение = ПараметрыСеанса.ТекущаяОрганизация;
// Чтобы отбор появился в пользовательских настройках (в шапке)
// Нужно связать его через ИдентификаторПользовательскойНастройки
ЭлементОтбора.ИдентификаторПользовательскойНастройки = "ОтборПоОрганизации";
Важно помнить: если мы работаем в типовых конфигурациях на БСП, для корректного отображения программно созданных элементов может потребоваться вызов метода ЭтаФорма.ОбновитьОтображениеДанных() в модуле формы после внесения изменений.
Структура отчета (группировки, таблицы, диаграммы) хранится в коллекции КомпоновщикНастроек.Настройки.Структура. Мы можем программно создавать иерархию отчета. Выясним, как добавить новую группировку по шагам.
ГруппировкаКомпоновкиДанных.ПоляГруппировки.ВыбранныеПоля).Посмотрим на пример кода:
// Очищаем текущую структуру
КомпоновщикНастроек.Настройки.Структура.Очистить();
// Создаем новую группировку по Контрагенту
Группировка = КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Группировка.Использование = Истина;
// Указываем поле группировки
ПолеГруппировки = Группировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Контрагент");
ПолеГруппировки.Использование = Истина;
// Добавляем выбранные поля для этой группировки (например, Автополе)
ВыбранноеПоле = Группировка.ВыбранныеПоля.Элементы.Добавить(Тип("АвтоПолеВыбранныхПолейКомпоновкиДанных"));
ВыбранноеПоле.Использование = Истина;
Часто программисты сталкиваются с ситуацией: в конфигураторе отборы настроены, режим «Быстрый доступ» включен, но при открытии отчета в режиме 1С:Предприятие пользователь видит старую картину. Проанализируем причину.
Система 1С по умолчанию сохраняет последние настройки пользователя (в хранилище настроек). При повторном открытии отчета она игнорирует настройки «по умолчанию» из конфигуратора и загружает то, что пользователь настраивал в прошлый раз. Чтобы увидеть изменения, необходимо сбросить настройки.
Рассмотрим способы решения:
ПриСозданииНаСервере или использовать ПередЗагрузкойВариантаНаСервере.Пример принудительной загрузки стандартных настроек:
// В модуле формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Если это первый запуск или нужно принудительно обновить
НастройкиПоУмолчанию = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиПоУмолчанию);
КонецПроцедуры
Важный момент: использование СтандартнаяОбработка = Ложь в обработчиках загрузки настроек позволяет полностью игнорировать кэшированные данные пользователя, но пользоваться этим стоит аккуратно, чтобы не вызвать раздражение пользователей потерей их личных настроек.
В современных конфигурациях отчеты часто открываются в общей форме ФормаОтчета подсистемы «Варианты отчетов». Для работы с ними рекомендуется использовать программный интерфейс БСП. Например, для установки отбора можно использовать общую функцию:
ОтчетыКлиентСервер.УстановитьЭлементОтбора(КомпоновщикНастроек.Настройки.Отбор, "Номенклатура", ЗначениеНоменклатуры);
Это гарантирует, что ваши изменения будут корректно подхвачены механизмами БСП и отображены в пользовательском интерфейсе.
Таким образом, мы рассмотрели как визуальные способы настройки СКД через конфигуратор, так и глубокое программное управление структурой и отборами. Понимание механизмов хранения пользовательских настроек позволит избежать ошибок при обновлении версий отчетов.