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