Как в СКД убрать пустую иерархию и настроить формат даты?

Программист
← На главную

При разработке отчетов в Системе компоновки данных (СКД) программисты часто сталкиваются с эстетическими и логическими проблемами вывода данных. Одна из самых распространенных — появление «пустой» верхней строки в иерархических списках, когда у элементов нет родителя (пустая ссылка). Вторая частая задача — приведение дат к читаемому виду, например, замена стандартного 01.07.2018 00:00:00 на лаконичное Июль 2018. В этой статье мы подробно разберем, как решить эти задачи стандартными средствами платформы 1С.

Метод 1: Настройка иерархии в схеме компоновки

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

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

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

Метод 2: Использование отбора по системному полю «Уровень»

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

Выполним следующие шаги для скрытия пустой строки:

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

Таким образом, мы даем системе команду: «Не показывай самый верхний уровень (уровень 0), если он является пустым контейнером для элементов». Элементы при этом автоматически «поднимутся» выше или останутся на своих местах, но пустой заголовок исчезнет.

Метод 3: Условное оформление для визуального скрытия

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

Проанализируем последовательность действий:

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

Важно: Этот метод может оставить «пустую полосу» в табличном документе, поэтому для полного удаления строки лучше использовать методы с отбором или изменением структуры связей.

Метод 4: Форматирование даты в представлении отчета

Теперь разберем вторую задачу: изменение представления даты. Когда мы выводим период (например, 01.07.2018), пользователю часто удобнее видеть текстовое описание месяца и года.

Для этого в СКД предусмотрено два основных пути. Рассмотрим первый — использование Оформления полей:

  1. На закладке Наборы данных найдем наше поле с датой (например, Период).
  2. В колонке Оформление нажмем кнопку выбора.
  3. Найдем параметр Формат.
  4. В строке формата введем выражение: ДФ='ММММ гггг'.

Здесь ММММ означает полное название месяца на языке локализации, а гггг — четырехзначное обозначение года. Если вам нужно сокращенное название месяца (Янв, Фев), используйте МММ.

Рассмотрим второй путь — использование Выражения представления. Это более мощный инструмент, так как он позволяет программно управлять текстом, который увидит пользователь, не меняя само значение даты (что важно для сортировки). На той же закладке Наборы данных в колонке Выражение представления можно написать:

Формат(Период, "ДФ='ММММ гггг'")

Если мы хотим, чтобы для пустых дат выводился какой-то особый текст, мы можем использовать конструкцию ВЫБОР:


ВЫБОР 
    КОГДА Период = ДАТАВРЕМЯ(1, 1, 1) ТОГДА "Период не указан" 
    ИНАЧЕ Формат(Период, "ДФ='ММММ гггг'") 
КОНЕЦ

Метод 5: Программная обработка пустых значений в запросе

Если мы хотим решить проблему пустой иерархии еще на этапе получения данных, проанализируем возможности языка запросов. Мы можем заменить пустые ссылки на какое-то значение «По умолчанию» или использовать функцию ЕСТЬNULL.

Пример кода в запросе для набора данных:


ВЫБРАТЬ
    ВЫБОР
        КОГДА Номенклатура.Родитель ЕСТЬ NULL ТОГДА "Корневой элемент"
        ИНАЧЕ Номенклатура.Родитель
    КОНЕЦ КАК ПолеРодитель,
    Номенклатура.Ссылка КАК Номенклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура

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

Дополнительные нюансы оформления

При работе с форматами дат стоит помнить о следующих особенностях 1С:

Таким образом, мы выяснили, что для удаления пустой иерархии достаточно либо грамотно настроить группировки (убрав лишние уровни), либо применить отбор по системному полю Уровень. А для красивого отображения периодов использование строки формата ДФ является самым быстрым и эффективным способом.

← На главную