При разработке отчетов в Системе компоновки данных (СКД) программисты часто сталкиваются с эстетическими и логическими проблемами вывода данных. Одна из самых распространенных — появление «пустой» верхней строки в иерархических списках, когда у элементов нет родителя (пустая ссылка). Вторая частая задача — приведение дат к читаемому виду, например, замена стандартного 01.07.2018 00:00:00 на лаконичное Июль 2018. В этой статье мы подробно разберем, как решить эти задачи стандартными средствами платформы 1С.
Рассмотрим ситуацию, когда в настройках отчета добавлена группировка по полю с типом «Иерархия». Если в информационной базе есть элементы справочника, у которых не заполнен реквизит Родитель, СКД автоматически создаст корневой узел «Пустая ссылка» и поместит их туда. Это выглядит как лишняя пустая строка в начале отчета.
Проанализируем самый простой способ исправления этой ситуации через настройки наборов данных:
Родитель или специализированной иерархической ссылки, мы можем настроить вывод иерархии для самого элемента.НоменклатурнаяГруппа).Если стандартная настройка группировки не помогает, разберем более гибкий технический прием. В СКД существуют системные поля, одно из которых — Уровень. Это поле определяет вложенность текущей строки в дереве отчета.
Выполним следующие шаги для скрытия пустой строки:
СистемныеПоля.Уровень.0.Таким образом, мы даем системе команду: «Не показывай самый верхний уровень (уровень 0), если он является пустым контейнером для элементов». Элементы при этом автоматически «поднимутся» выше или останутся на своих местах, но пустой заголовок исчезнет.
Иногда требуется не удалять данные, а просто сделать их невидимыми, чтобы не нарушать структуру итогов. Для этого мы можем использовать механизм Условного оформления.
Проанализируем последовательность действий:
Ложь.ПолеГруппировки (например, НоменклатурнаяГруппа) Равно Значение(Справочник.ИмяСправочника.ПустаяСсылка).Важно: Этот метод может оставить «пустую полосу» в табличном документе, поэтому для полного удаления строки лучше использовать методы с отбором или изменением структуры связей.
Теперь разберем вторую задачу: изменение представления даты. Когда мы выводим период (например, 01.07.2018), пользователю часто удобнее видеть текстовое описание месяца и года.
Для этого в СКД предусмотрено два основных пути. Рассмотрим первый — использование Оформления полей:
Период).ДФ='ММММ гггг'.Здесь ММММ означает полное название месяца на языке локализации, а гггг — четырехзначное обозначение года. Если вам нужно сокращенное название месяца (Янв, Фев), используйте МММ.
Рассмотрим второй путь — использование Выражения представления. Это более мощный инструмент, так как он позволяет программно управлять текстом, который увидит пользователь, не меняя само значение даты (что важно для сортировки). На той же закладке Наборы данных в колонке Выражение представления можно написать:
Формат(Период, "ДФ='ММММ гггг'")
Если мы хотим, чтобы для пустых дат выводился какой-то особый текст, мы можем использовать конструкцию ВЫБОР:
ВЫБОР
КОГДА Период = ДАТАВРЕМЯ(1, 1, 1) ТОГДА "Период не указан"
ИНАЧЕ Формат(Период, "ДФ='ММММ гггг'")
КОНЕЦ
Если мы хотим решить проблему пустой иерархии еще на этапе получения данных, проанализируем возможности языка запросов. Мы можем заменить пустые ссылки на какое-то значение «По умолчанию» или использовать функцию ЕСТЬNULL.
Пример кода в запросе для набора данных:
ВЫБРАТЬ
ВЫБОР
КОГДА Номенклатура.Родитель ЕСТЬ NULL ТОГДА "Корневой элемент"
ИНАЧЕ Номенклатура.Родитель
КОНЕЦ КАК ПолеРодитель,
Номенклатура.Ссылка КАК Номенклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
Однако в СКД при работе с иерархией лучше полагаться на встроенный механизм связей наборов данных. Если мы создаем связь Справочник.Ссылка -> Справочник.Родитель, то в условии связи можно указать проверку на заполненность родителя, чтобы дерево не начиналось с неопределенного узла.
При работе с форматами дат стоит помнить о следующих особенностях 1С:
ДФ='ММММ' всегда выводит месяц в именительном падеже (Январь, Февраль).Кв в строке формата.Таким образом, мы выяснили, что для удаления пустой иерархии достаточно либо грамотно настроить группировки (убрав лишние уровни), либо применить отбор по системному полю Уровень. А для красивого отображения периодов использование строки формата ДФ является самым быстрым и эффективным способом.