Как отцентрировать заголовки таблицы и колонку Итого в СКД

Программист IT и автоматизация бизнеса
← На главную

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

Причина проблемы: почему стандартные методы не всегда работают

Рассмотрим ситуацию: мы создаем таблицу в СКД, где количество колонок заранее неизвестно (например, продажи по месяцам). При использовании стандартного оформления на уровне набора данных или отдельных полей выравнивание применяется к значениям, но не всегда корректно наследуется заголовками. Особенно это касается колонки Итого. Система компоновки данных генерирует эту колонку автоматически, и она часто не попадает в область действия условного оформления, примененного к конкретным группировкам. Выясним причину: это происходит из-за приоритетов применения стилей и того, как СКД определяет границы областей «Заголовок» и «Группировка».

Способ 1. Тонкая настройка условного оформления

Многие разработчики ошибочно полагают, что условное оформление для группировки колонок должно автоматически подхватывать и итоги. Однако важно правильно указать область использования оформления. Разберем этот процесс по шагам:

  1. Перейдем на вкладку Настройки в схеме компоновки данных.
  2. Выберем уровень всего отчета или конкретной таблицы.
  3. На вкладке Условное оформление добавим новый элемент.
  4. В поле Оформление установим ГоризонтальноеПоложениеЦентр.
  5. В поле Оформляемые поля выберем те ресурсы и группировки, заголовки которых нужно центрировать.
  6. Важный шаг: Перейдем на вкладку Дополнительно (или «Область использования»). Здесь необходимо убедиться, что установлены флажки В заголовке полей и В заголовке группировок.

Если после этих действий колонка Итого всё еще остается прижатой к левому краю, проанализируем ситуацию: возможно, оформление перекрывается другими настройками на уровне группировок. В СКД действует правило: чем ниже по иерархии настроек находится оформление, тем оно приоритетнее.

Способ 2. Метод «Двойного оформления»

Этот метод был предложен опытными разработчиками как наиболее стабильный для сложных таблиц. Суть заключается в последовательном переопределении стилей. Рассмотрим подробнее:

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

Посмотрим на пример логики настройки:

  1. Первое правило: Область — весь отчет. Оформление: ГоризонтальноеПоложение = Центр. Это заставит СКД применить центрирование ко всем заголовкам, включая итоговые.
  2. Второе правило: Область — конкретные поля группировок строк. Оформление: ГоризонтальноеПоложение = Лево.

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

Способ 3. Использование макетов оформления (.dcsd)

Если отчет должен выглядеть безупречно во всех вариантах, стоит рассмотреть создание собственного Макета оформления компоновки данных. Это не тот макет, который создается внутри схемы (на закладке «Макеты»), а отдельный объект метаданных.

В таком макете можно детально настроить стили для специфических областей. Проанализируем возможности:

Способ 4. Программная корректировка макета до вывода

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

Рассмотрим пример кода в модуле объекта отчета (в процедуре ПриКомпоновкеРезультата):


// Получаем макет компоновки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);

// Пройдем по областям макета и установим выравнивание
Для Каждого Область Из МакетКомпоновки.Области Цикл
    Если ТипЗнч(Область) = Тип("ОбластьМакетаКомпоновкиДанных") Тогда
        // Ищем заголовки по имени или содержимому и меняем HorizontalAlign
        Если Найти(Область.Имя, "Заголовок") > 0 Тогда
            Область.ПараметрыОформления.УстановитьЗначениеПараметра("ГоризонтальноеПоложение", ГоризонтальноеПоложение.Центр);
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

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

Способ 5. Использование «Макета заголовка поля»

Если проблема касается только заголовков ресурсов, а их состав меняется, можно создать в схеме компоновки на закладке Макеты специальный тип макета — Макет заголовка поля.

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

Дополнительные нюансы и типичные ошибки

Выясним еще несколько причин, по которым центрирование может «слетать»:

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

← На главную