Как настроить поворот текста в заголовках отчета СКД на платформе 8.3

Программист 1С v8.3 (Обычные формы)
← На главную

При переходе с платформы 8.2 на 8.3, особенно при отключении режима совместимости с версиями 8.1 или 8.2.13, разработчики часто сталкиваются с изменением визуального представления отчетов, построенных на системе компоновки данных (СКД). Одной из наиболее распространенных проблем является некорректная работа условного оформления, в частности — параметра ОриентацияТекста. Рассмотрим ситуацию, когда нам необходимо повернуть заголовки колонок на 90 градусов для экономии места, сохранив при этом стандартное (горизонтальное) отображение самих данных в строках отчета.

Почему поведение оформления меняется в версии 8.3

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

Способ 1: Тонкая настройка областей использования

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

Для реализации этого метода выполним следующие шаги:

  1. Перейдем на вкладку Настройки в схеме компоновки данных.
  2. Выберем уровень Отчет и перейдем на закладку Условное оформление.
  3. Добавим новый элемент оформления и в параметре ОриентацияТекста установим значение 90.
  4. В списке оформляемых полей выберем те поля, заголовки которых должны быть повернуты.
  5. Ключевой момент: нажмем на кнопку (или перейдем в раздел) Область использования.
  6. Снимем флаг В группировке и В иерархической группировке.
  7. Оставим установленными флаги В заголовке полей и В заголовке группировок.

Такой подход говорит системе: «Применяй поворот на 90 градусов только тогда, когда рисуешь шапку или названия группировок, но игнорируй это правило при выводе самих значений в ячейках».

Способ 2: Метод перекрытия настроек (комбинированный)

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

Разберем алгоритм действий:

  1. На уровне всего отчета: Создаем правило условного оформления с поворотом 90 градусов. В области использования устанавливаем значение Везде. Это обеспечит поворот для всех элементов отчета «по умолчанию».
  2. На уровне группировок строк: Выбираем конкретную группировку (например, по номенклатуре или контрагенту). Заходим в ее собственные настройки условного оформления.
  3. Создаем правило с параметром ОриентацияТекста равным 0. Область использования также указываем Везде. Так как настройки группировки имеют более высокий приоритет, чем настройки отчета, данные в строках «выровняются» обратно.
  4. На уровне группировок колонок: Если для колонок также требуется специфическое поведение, можно либо оставить наследование от отчета (90 градусов), либо полностью удалить настройки оформления для этой группировки, чтобы они брались из вышестоящего уровня.

Этот метод кажется более трудоемким, однако он позволяет гибко управлять визуализацией в тех случаях, когда платформенные механизмы разделения областей (заголовок/группировка) работают неоднозначно из-за сложной структуры компоновки.

Работа с системными полями и автоматической шириной

Проанализируем ситуацию, когда поворот заголовка приводит к тому, что колонки становятся слишком узкими. Платформа 8.3 при вертикальном тексте пытается максимально сжать ширину колонки, ориентируясь на ширину символов. Чтобы отчет оставался читаемым, рекомендуется в том же правиле условного оформления, где задан поворот, устанавливать дополнительные параметры:

Программная настройка условного оформления

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


// Получаем настройки компоновки данных
Настройки = КомпоновщикНастроек.Настройки;

// Добавляем новый элемент условного оформления
ЭлементОформления = Настройки.УсловноеОформление.Элементы.Добавить();

// Устанавливаем поворот на 90 градусов
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ОриентацияТекста", 90);

// Указываем область использования: только заголовки
ЭлементОформления.ИспользованиеВЗаголовкеПолей = ИспользованиеУсловногоОформления.Использовать;
ЭлементОформления.ИспользованиеВГруппировке = ИспользованиеУсловногоОформления.НеИспользовать;

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

Использование программного метода позволяет избежать ошибок при визуальном редактировании схемы и дает возможность более точно управлять поведением отчета в зависимости от прав пользователя или выбранных параметров. Выясним, что ключевым объектом здесь является ИспользованиеУсловногоОформления, который позволяет жестко ограничить область действия настройки программным путем.

Выводы

Мы рассмотрели два основных способа управления ориентацией текста в СКД. Первый способ (через области использования) является предпочтительным и «чистым». Второй способ (через перекрытие настроек на уровнях группировок) выступает в роли надежного решения для нестандартных ситуаций. Помните, что платформа 8.3 требует более дисциплинированного подхода к иерархии настроек, чем старые версии 8.1 и 8.2.

← На главную