Как применить условное оформление только для горизонтальных итогов в СКД, исключая вертикальные группировки?

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

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

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

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

Простое решение: использование вычисляемого поля-индикатора с настройкой "Рассчитывать по"

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

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

  1. Создание вычисляемого поля-индикатора

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

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

    Почему Истина? Потому что мы не хотим, чтобы само поле вычисляло сложную логику. Вся логика будет в его агрегации.

  2. Добавление поля в ресурсы и настройка его расчета

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

    1. Перейдите на вкладку "Ресурсы" в схеме компоновки данных.
    2. Перетащите только что созданное вычисляемое поле ЭтоГоризонтальныйИтог из списка "Доступные поля" в список "Ресурсы".
    3. Настройте параметры ресурса ЭтоГоризонтальныйИтог:
      • Функция: Установите функцию агрегации, например, Максимум (или Минимум, Среднее). Поскольку наше вычисляемое поле всегда возвращает Истина, любая из этих функций также вернет Истина, если поле будет вычислено.
      • Снимите флажок "Авторасчет": Это важно, так как мы хотим вручную управлять тем, как и где вычисляется этот ресурс.
      • Поле "Рассчитывать по": Это критически важная настройка. Здесь необходимо указать только те поля, которые формируют ваши горизонтальные группировки, для итогов которых вы хотите применить оформление. Например, если у вас есть горизонтальная группировка по полю Период, выберите только Период. Не включайте сюда поля вертикальных группировок, детальных записей или общие итоги.

      Представьте, что у вас есть отчет со строками по Контрагент и колонками по Период. Если вы хотите выделить горизонтальные итоги (т.е. "Итог по Периоду" для каждого Контрагента), то в поле "Рассчитывать по" для ресурса ЭтоГоризонтальныйИтог вам следует указать только Период. Таким образом, СКД будет вычислять этот ресурс только в тех строках, где происходит агрегация по Периоду, игнорируя при этом агрегацию по Контрагенту.

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

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

    1. Перейдите на вкладку "Настройки" в схеме компоновки данных.
    2. Выберите раздел "Условное оформление" и добавьте новый элемент.
    3. Условие: В качестве условия укажите, что наше вычисляемое поле-индикатор должно быть Истина: ЭтоГоризонтальныйИтог = Истина
    4. Оформление: Выберите желаемые параметры оформления, например, "Цвет фона", "Цвет текста", "Шрифт" и т.д.
    5. Область использования:
      • Укажите "Везде" для применения оформления ко всем подходящим ячейкам или строкам.
      • Если вы хотите оформить только конкретные поля в итоговой строке, используйте "Оформляемые поля" и выберите необходимые ресурсы или поля.
      • Важно: обычно в этом случае не следует выбирать "В общем итоге", так как эта опция чаще ориентирована на вертикальные общие итоги, а нам нужен более тонкий контроль.

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

Продвинутое решение: Использование функции Группировка() для точной идентификации типа строки

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

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

  1. Анализ структуры группировок

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

    • Вертикальные группировки (строки): Контрагент, Договор.
    • Горизонтальные группировки (колонки): Период, ВидНоменклатуры.

    Функция Группировка(<ИмяПоля>) возвращает значение поля группировки для текущей строки или NULL, если текущая строка является итоговой для этой группировки.

  2. Создание вычисляемого поля "ТипСтроки"

    Мы создадим вычисляемое поле, которое будет возвращать строковое значение, описывающее тип текущей строки (например, "ДетальнаяЗапись", "ГоризонтальныйИтог", "ВертикальныйИтог", "ОбщийИтог").

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

    Если у вас несколько вертикальных или горизонтальных группировок, вам потребуется расширить условия, проверяя NULL для каждого поля. Например, для нескольких полей: (Группировка("Поле1") ЕСТЬ NULL И Группировка("Поле2") ЕСТЬ NULL).

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

    После создания вычисляемого поля ТипСтроки, мы можем использовать его для настройки условного оформления:

    1. Перейдите на вкладку "Настройки" в схеме компоновки данных.
    2. Выберите раздел "Условное оформление" и добавьте новый элемент.
    3. Условие: В качестве условия укажите, что наше вычисляемое поле ТипСтроки должно быть равно "ГоризонтальныйИтог": ТипСтроки = "ГоризонтальныйИтог"
    4. Оформление: Выберите желаемые параметры оформления (цвет фона, цвет текста, шрифт и т.д.).
    5. Область использования:
      • Укажите "Везде" для применения оформления ко всем подходящим ячейкам или строкам.
      • Если требуется оформить конкретные поля в итоговой строке, выберите "Оформляемые поля" и укажите их.

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

Исключение заголовков ресурсов из условного оформления

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

  1. Настройка "Области использования" для условного оформления

    Это самый простой способ предотвратить оформление заголовков.

    1. В окне настроек "Условного оформления" перейдите на вкладку "Область использования".
    2. Найдите флажок "В заголовке полей" и снимите его.

    Это действие исключит применение текущего правила оформления к заголовкам полей.

  2. Скрытие заголовков через условное оформление

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

    1. Создайте новый элемент условного оформления.
    2. В разделе "Оформление" укажите:
      • "Текст": оставьте поле пустым или введите один пробел.
      • "Цвет текста": установите цвет, соответствующий цвету фона.
      • "Максимальная высота": можно установить минимальное значение, например, 1.
    3. В разделе "Область использования" выберите "К заголовку полей" или "Заголовки и т.д.".
    4. В разделе "Оформляемые поля" укажите конкретный ресурс, заголовок которого нужно скрыть.

    Этот метод эффективно "замаскирует" заголовок.

  3. Использование макетов группировок

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

    1. На вкладке "Макеты" в схеме компоновки данных выберите конкретную группировку, для которой требуется настроить заголовок.
    2. Добавьте "Макет группировки" для поля-ресурса.
    3. В настройках макета можно указать, как будет выводиться поле, например, полностью исключить его из вывода, или использовать "Заполнение: Параметр" для передачи значения.

    Макеты дают максимальную гибкость, но и требуют больших усилий для настройки.

Общие рекомендации по работе с условным оформлением в СКД

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

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

← На главную