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

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

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

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

Способ 1. Создание отдельного поля признака заполненности

Посмотрим на практический подход, предложенный на форуме: разделение логики группировки с помощью вспомогательного поля. Это позволяет явно разделить заполненные и незаполненные объекты.

Разберем по шагам реализацию этого варианта:

  1. Откроем схему компоновки данных и перейдем на вкладку Наборы данных.
  2. В тексте запроса или на вкладке Вычисляемые поля добавим булево поле, определяющее факт заполнения:
    
    ВЫБОР
        КОГДА Объект = "" ИЛИ Объект ЕСТЬ NULL
            ТОГДА Истина
        ИНАЧЕ Ложь
    КОНЕЦ КАК ОбъектНеЗаполнен
    
  3. Перейдем на вкладку Настройки. В структуре отчета создадим группировку по полю ОбъектНеЗаполнен, а внутрь нее поместим группировку по полю Объект и детальные записи.
  4. Для поля ОбъектНеЗаполнен настроим понятное представление (например, через Условное оформление или Выражение представления), чтобы вместо значений «Да» и «Нет» выводились понятные заголовки: «Без объекта» и «С объектом».

Способ 2. Использование выражения представления поля

Если мы не хотим усложнять иерархию структуры отчета лишними уровнями, настроим вывод самого поля Объект так, чтобы при пустом значении подставлялась понятная текстовая заглушка.

Разберем настройку по шагам:

  1. Перейдем на вкладку Наборы данных схемы компоновки данных.
  2. В списке полей найдем наше поле Объект.
  3. В колонке Выражение представления укажем формулу:
    
    ВЫБОР
        КОГДА Объект = "" ИЛИ Объект ЕСТЬ NULL
            ТОГДА "<Без объекта>"
        ИНАЧЕ Объект
    КОНЕЦ
    

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

Способ 3. Преобразование значения непосредственно в тексте запроса

Рассмотрим вариант, когда вывод пустой строки заменяется текстом еще на этапе выборки данных. Это удобно, когда требуется гарантированно избавиться от значений NULL и пустых строк до этапа компоновки.


ВЫБРАТЬ
    ВЫБОР
        КОГДА Таблица.Объект ЕСТЬ NULL ИЛИ Таблица.Объект = ""
            ТОГДА " [Без объекта]"
        ИНАЧЕ Таблица.Объект
    КОНЕЦ КАК Объект,
    Таблица.Сумма КАК Сумма
ИЗ
    РегистрНакопления.Продажи КАК Таблица

Обратим внимание на пробел в начале строки " [Без объекта]": при стандартной сортировке по алфавиту по возрастанию такая группа автоматически окажется в самом верху отчета. Если требуется поместить незаполненные элементы в конец списка, можно использовать префикс с символами в конце алфавита либо настроить сортировку по дополнительному вычисляемому полю.

Способ 4. Оформление через условное оформление отчета

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

Выполним следующие действия:

  1. Перейдем на вкладку Настройки и выберем вкладку Условное оформление (на уровне отчета или конкретной группировки Объект).
  2. Добавим новый элемент оформления.
  3. В области Оформление включим флаг Текст и укажем значение: "<Не указано>".
  4. В области Условие добавим строку: поле Объект Не заполнено (или Объект Равно "").
  5. В области Оформляемые поля укажем поле Объект.

При таком подходе группировка по пустому значению формируется штатно, а компоновщик данных автоматически подменяет пустую строку на заданный текст в момент вывода отчета в табличный документ.

Способ 5. Разделение структуры с помощью группировок без полей

Рассмотрим продвинутый способ проектирования структуры, когда пустые строки требуется вывести в совершенно отдельный блок со своим заголовком.

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

Таким образом, мы получаем полный контроль над отображением как заполненных, так и пустых строк в результирующем отчете.

← На главную