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