Как в СКД настроить разные заголовки для группировок в одной колонке?

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

Часто при разработке отчетов в 1С на Системе Компоновки Данных (СКД) возникает задача максимально точно воспроизвести внешний вид отчета, предоставленного заказчиком. Одна из таких нетривиальных задач — отображение данных из разных полей в одной колонке на разных уровнях группировки. Например, на верхнем уровне в колонке отображается "Вид расходов" (например, "ТМЦ", "Услуги"), а на вложенном уровне в этой же колонке — "Аналитика" (например, "Ведро", "Работа1").

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

Способ 1: Комбинированная настройка расположения полей группировки

Этот метод основан на гибком использовании свойства РасположениеПолейГруппировки на разных уровнях настроек отчета. Идея заключается в том, чтобы сначала задать общее правило для всех группировок, а затем переопределить его для конкретной вложенной группировки.

Разберем по шагам:

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

В результате поле "ВидРасходов" будет выведено в своей колонке, а поле "Аналитика" будет выведено в той же колонке, но на уровень ниже, как и требовалось. Однако у этого способа есть недостаток: если в отчете есть другие колонки (например, ресурсы), то в строках с группировкой "ВидРасходов" ячейки под колонкой "Аналитика" (если бы она была отдельной) и другими последующими полями могут остаться пустыми. Это может быть критично при выгрузке отчета в Excel, если требуется сплошное заполнение таблицы.

Посмотрим на пример структуры отчета в формате XML, который реализует этот подход:


<settings>
    <selection>
        <item xsi:type="SelectedItemField">
            <field>Сумма</field>
        </item>
    </selection>
    <settingsVariant>
        <dcsset:groupingPositionsPlacement>Separately</dcsset:groupingPositionsPlacement>
        <dcsset:structure>
            <dcsset:item xsi:type="dcsset:Grouping">
                <dcsset:field>ОбъектВвода</dcsset:field>
                <dcsset:item xsi:type="dcsset:Grouping">
                    <dcsset:field>ВидРасходов</dcsset:field>
                    <dcsset:item xsi:type="dcsset:Grouping">
                        <dcsset:groupingPositionsPlacement>Together</dcsset:groupingPositionsPlacement> <!-- Вот ключевая настройка -->
                        <dcsset:field>Аналитика</dcsset:field>
                    </dcsset:item>
                </dcsset:item>
            </dcsset:item>
        </dcsset:structure>
    </settingsVariant>
</settings>

Способ 2: Использование макетов для полного контроля

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

  1. Макет заголовка группировки: Этот тип макета позволяет полностью переопределить стандартную "шапку" для конкретной группировки. Вы можете создать макет для родительской группировки ("ВидРасходов"), в котором объедините ячейки и пропишете нужные заголовки. Этот макет будет действовать и для всех дочерних группировок, пока вы не переопределите его.
  2. Макет группировки: Этот макет дает контроль не только над заголовком, но и над выводом самих данных. Например, можно создать макет для поля "ВидРасходов" и внутри его ячейки разместить как само значение вида расходов, так и значение поля "Аналитика" из подчиненной группировки, управляя их взаимным расположением через параметры макета.

Работа с макетами требует больше времени, но она снимает практически все ограничения стандартного вывода СКД.

Способ 3: Динамический текст через условное оформление

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

Разберем по шагам:

  1. В настройках отчета перейдите на вкладку "Условное оформление" и добавьте новый элемент.
  2. В качестве оформляемого параметра выберите "Текст".
  3. В качестве значения укажите не статичный текст, а выражение на языке выражений СКД.
  4. В выражении можно проанализировать текущий уровень группировки и вернуть нужное значение. Например, можно построить группировку по двум полям ("ВидРасходов", "Аналитика"), а в условном оформлении для этой группировки написать выражение вида: ВЫБОР КОГДА Аналитика = NULL ТОГДА ВидРасходов ИНАЧЕ Аналитика КОНЕЦ.
  5. Важно правильно настроить область использования оформления, чтобы оно применялось только к нужным полям и уровням иерархии (например, "В группировке").

Этот метод позволяет сохранить логичную структуру группировок, но при этом управлять тем, что именно видит пользователь в ячейке.

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

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

Порядок действий:

  1. В модуле отчета создайте обработчик события ПриКомпоновкеРезультата.
  2. Внутри обработчика установите СтандартнаяОбработка = Ложь;, чтобы отменить стандартный вывод отчета на экран.
  3. Программно выполните компоновку макета и выведите результат в переменную типа ТабличныйДокумент.
  4. После получения готового табличного документа вы можете обойти его ячейки в цикле, найти нужные области, объединить их, изменить текст, перенести значения из одной ячейки в другую — словом, сделать все, что необходимо для приведения отчета к требуемому виду.
  5. В конце процедуры выведите измененный табличный документ в результирующий документ.

Этот метод является наиболее трудоемким, но предоставляет неограниченный контроль над итоговым представлением отчета.

← На главную