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

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

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

Выясним причину поведения СКД

В СКД механизм построения иерархии завязан на ссылочное поле. Когда в настройках отчета мы включаем тип группировки Иерархия по ссылке, платформа автоматически выстраивает дерево родительских и дочерних узлов. Если при этом наложен фильтр по элементам (например, ЭтоГруппа = Ложь), СКД достраивает родительские группы автоматически, но не всегда считывает их дополнительные реквизиты (включая собственный код группы). Кроме того, по умолчанию параметр вывода реквизитов установлен в значение Вместе, что приводит к объединению значений в одной ячейке.

Способ 1. Настройка расположения реквизитов и выбранных полей

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

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

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

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

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

  1. В схеме компоновки данных перейдем на вкладку Ресурсы.
  2. Добавим поле Статья.Код (или Код).
  3. В поле Выражение зададим агрегатную функцию:

Максимум(Статья.Код)

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

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

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

  1. Перейдем на вкладку Макеты в схеме компоновки данных.
  2. Нажмем Добавить макет группировки, укажем имя поля группировки (например, Статья) и выберем тип макета: Заголовок иерархии или Иерархия.
  3. Создадим область ячеек табличного документа и визуально разделим её на две колонки. В первую ячейку поместим параметр [Код], во вторую — [Наименование].
  4. В нижней таблице параметров макета свяжем параметры с выражениями СКД:
    
    Код = Статья.Код
    Наименование = Статья.Наименование
    

Использование собственного макета полностью исключает автоматическое объединение ячеек платформой 1С и гарантирует корректный вывод данных в две отдельные колонки.

← На главную