Как оформить заголовок ресурса при вертикальном расположении в СКД?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

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

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

Почему не удается оформить заголовок ресурса стандартным путем

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

Особенности этой служебной колонки:

  1. Она не является отдельным полем набора данных или вычисляемым полем, поэтому ее нельзя напрямую выбрать в списке Оформляемые поля на вкладке Условное оформление.
  2. Стандартное правило условного оформления для конкретного ресурса (например, для поля КоличествоОборот) по умолчанию влияет только на ячейки с числовыми данными этого ресурса, но не затрагивает системную ячейку с его текстовым наименованием.

Рассмотрим несколько практических способов обойти данное ограничение — от чисто декларативных настроек схемы до программной обработки результата.

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

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

Разберем по шагам, как настроить такое оформление в схеме компоновки:

  1. Перейдем на вкладку Настройки и откроем раздел Условное оформление всего отчета или конкретной группировки.
  2. Добавим новый элемент условного оформления.
  3. В колонке Оформление установим нужные параметры, например: Шрифт = Жирный или Цвет фона = WebЦвета.СветлоСерый.
  4. Колонку Оформляемые поля оставим полностью пустой.
  5. Если оформление должно действовать для всех строк, условие не задаем. Если оформление должно сработать по определенному критерию, пропишем соответствующее логическое выражение на вкладке Условие.
  6. Чтобы числовые данные внутри этой строки не были жирными, следующим правилом в списке условного оформления переопределим оформление для конкретных полей ресурсов, установив для них обычный шрифт.

При таком подходе оформление распространяется на всю строку целиком, захватывая сгенерированную системой ячейку с названием ресурса.

Способ 2. Вертикальное объединение через группы полей (рекомендуемый способ)

Вместо использования глобального переключателя Расположение ресурсов = Вертикально гораздо удобнее и гибче настроить структуру вывода через пользовательские группы на вкладке Выбранные поля.

Рассмотрим порядок настройки:

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

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

Способ 3. Преобразование ресурсов в строки на уровне запроса

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

Рассмотрим структуру такого запроса:


ВЫБРАТЬ
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    "Количество оборот" КАК ВидПоказателя,
    ПродажиОбороты.КоличествоОборот КАК ЗначениеПоказателя,
    1 КАК ПорядокВывода
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ПродажиОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПродажиОбороты.Номенклатура,
    "Сумма оборот",
    ПродажиОбороты.СуммаОборот,
    2
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ПродажиОбороты

Разберем преимущества такой структуры данных:

  1. Поле ВидПоказателя становится обычной группировкой строк отчета, расположенной под группировкой Номенклатура.
  2. Ресурсом отчета выступает только одно поле — ЗначениеПоказателя.
  3. В Условном оформлении можно создать правило с точным условием: ВидПоказателя Равно "Количество оборот" и оформить поле ВидПоказателя любым цветом, шрифтом или рамкой.

Способ 4. Программная постобработка табличного документа

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

Для реализации этого метода переопределим процедуру ПриКомпоновкеРезультата в модуле отчета:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    // Инициализируем стандартную компоновку
    СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровки);
    
    // Создаем нужный шрифт для заголовка
    ЖирныйШрифт = Новый Шрифт(ДокументРезультат.Область(1, 1).Шрифт, , , Истина);
    
    // Выполняем поиск и форматирование ячеек с наименованием показателя
    ПараметрыПоиска = Новый ПараметрыПоискаПоТабличномуДокументу;
    ПараметрыПоиска.НаправлениеПоиска = НаправлениеПоискаПоТабличномуДокументу.СверхуВниз;
    ПараметрыПоиска.СоответствиеТексту = СоответствиеТекстуПоТабличномуДокументу.Полное;
    
    НайденнаяОбласть = ДокументРезультат.НайтиТекст("Количество Оборот", , , ПараметрыПоиска);
    
    Пока НайденнаяОбласть <> Неопределено Цикл
        НайденнаяОбласть.Шрифт = ЖирныйШрифт;
        НайденнаяОбласть = ДокументРезультат.НайтиТекст("Количество Оборот", НайденнаяОбласть, , ПараметрыПоиска);
    КонецЦикла;

КонецПроцедуры

Выясним особенности программного подхода:

  1. Метод НайтиТекст у объекта ТабличныйДокумент быстро находит все вхождения системных заголовков ресурсов по всей высоте отчета.
  2. Постобработка позволяет изменить не только начертание шрифта, но и цвет текста, фон, границы ячейки или заменить отображаемый текст на произвольный пользовательский заголовок.
← На главную