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