При формировании отчетов в Системе компоновки данных (СКД) часто возникает необходимость вывести иерархический справочник (например, «Статьи движения денежных средств» или «Затраты») в виде двух отдельных колонок: в первой — код статьи, во второй — ее наименование. По умолчанию СКД сворачивает эти реквизиты в одну ячейку через запятую или отображает код только у элементов нижнего уровня, оставляя родительские группы пустыми. Разберем причинно-следственные связи такого поведения и проанализируем способы решения этой задачи.
В СКД механизм построения иерархии завязан на ссылочное поле. Когда в настройках отчета мы включаем тип группировки Иерархия по ссылке, платформа автоматически выстраивает дерево родительских и дочерних узлов. Если при этом наложен фильтр по элементам (например, ЭтоГруппа = Ложь), СКД достраивает родительские группы автоматически, но не всегда считывает их дополнительные реквизиты (включая собственный код группы). Кроме того, по умолчанию параметр вывода реквизитов установлен в значение Вместе, что приводит к объединению значений в одной ячейке.
Рассмотреть первый способ стоит с базовых настроек вывода структуры СКД. Это наиболее простой вариант, не требующий написания кода или создания сложных макетов.
Статья) и укажем тип группировки Иерархия.Вместе на Отдельно.Статья и вместо него добавим конкретные реквизиты: Статья.Код и Статья.Наименование (или Ссылка.Код и Ссылка.Наименование).При таком подходе СКД принудительно сформирует две независимые колонки на всех уровнях иерархического дерева.
Проанализируем ситуацию, когда у групп верхнего уровня код продолжает оставаться пустым. Это происходит из-за особенностей виртуального формирования родительских узлов. Чтобы заставить СКД рассчитывать значение кода для каждого промежуточного уровня, задействуем механизм ресурсов.
Статья.Код (или Код).
Максимум(Статья.Код)
Благодаря этому СКД будет воспринимать код как рассчитываемый показатель для каждой строки и отобразит код группы на всех уровнях иерархии, даже если включен фильтр по элементам.
Разберем случай, когда штатные механизмы автооформления СКД не дают нужного визуального результата и требуется жестко зафиксировать колонки в табличном документе. В этом случае идеальным решением станет создание макета группировки.
Статья) и выберем тип макета: Заголовок иерархии или Иерархия.[Код], во вторую — [Наименование].
Код = Статья.Код
Наименование = Статья.Наименование
Использование собственного макета полностью исключает автоматическое объединение ячеек платформой 1С и гарантирует корректный вывод данных в две отдельные колонки.