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

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

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

Почему стандартный запрос не всегда дает нужный результат?

Использование оператора ИЕРАРХИЯ в языке запросов 1С автоматически добавляет в выборку записи-родители, что приводит к «разрыву» списка и появлению лишних строк, которые не всегда нужны в конечном отчете. Если мы просто пытаемся упорядочить результат запроса, система может сортировать данные либо по коду, либо по наименованию, игнорируя иерархическую структуру ссылок. В СКД же при использовании группировок система пытается отрисовать дерево, что вызывает появление символов раскрытия группировок.

Решение через настройку структуры СКД

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

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

Метод «Родительский путь» в запросе

Если вам требуется именно линейный вывод (плоский список), но с сохранением порядка следования элементов «как в иерархии», воспользуемся классическим методом сортировки по нескольким полям-родителям. Этот подход особенно полезен, когда нужно избежать использования группировок Иерархия в настройках СКД.

Для этого в запросе мы принудительно выбираем цепочку родителей:


ВЫБРАТЬ
    Номенклатура.Родитель.Родитель.Наименование КАК Уровень3,
    Номенклатура.Родитель.Наименование КАК Уровень2,
    Номенклатура.Наименование КАК Наименование,
    *
ИЗ
    Справочник.Номенклатура КАК Номенклатура
УПОРЯДОЧИТЬ ПО
    Уровень3,
    Уровень2,
    Наименование

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

Устранение «плюсиков» при использовании группировок

Если вы все же решили использовать тип группировки Иерархия, но столкнулись с проблемой отображения символов развертывания («плюсиков»), проанализируем следующие шаги для их скрытия:

Заключение

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

← На главную