Как в отчете СКД скрыть иерархическую строку, если значение поля "Неопределено"?

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

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

Решение 1: Замена "Неопределено" на NULL в запросе

Это один из самых популярных и быстрых способов, предложенных на форуме. Суть метода заключается в том, чтобы на уровне запроса заменить значение Неопределено на системное значение NULL, а затем воспользоваться стандартной возможностью СКД для скрытия таких значений.

Разберем по шагам:

  1. Модифицируем запрос. В тексте запроса для набора данных отчета находим поле, которое может содержать Неопределено. Вместо того чтобы просто выбирать это поле, используем конструкцию ВЫБОР ... КОГДА.

    Посмотрим на пример. Вместо строки:

    
    ОстаткиИОбороты.Регистратор
    

    Напишем следующую конструкцию:

    
    ВЫБОР
        КОГДА ОстаткиИОбороты.Регистратор = ЗНАЧЕНИЕ(Документ.ПустаяСсылка)
            ТОГДА NULL
        ИНАЧЕ ОстаткиИОбороты.Регистратор
    КОНЕЦ КАК Регистратор
    

    Важное замечание: Сравнивать напрямую с НЕОПРЕДЕЛЕНО не всегда корректно, особенно для ссылочных типов. Лучше использовать ЗНАЧЕНИЕ(Документ.ПустаяСсылка) или аналогичные конструкции для вашего типа данных. В этом коде мы проверяем поле Регистратор. Если его значение является пустой ссылкой (что часто интерпретируется как Неопределено в отчетах), мы подставляем системное значение NULL. В противном случае оставляем исходное значение регистратора.

  2. Настраиваем поле в СКД. После изменения запроса перейдем в настройки схемы компоновки данных. На вкладке "Настройки", в структуре отчета выберем группировку по нашему полю (Регистратор). В свойствах этого поля для группировки есть специальная настройка в разделе "Роли". Нам нужно установить флажок "Игнорировать значения NULL".

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

Решение 2: Использование отбора на уровне группировки

Это более надежный и "правильный" с точки зрения архитектуры СКД способ. Он позволяет скрыть строку из отображения, но при этом ее данные могут быть использованы для расчета итогов по вышестоящим уровням иерархии. Проанализируем ситуацию: нам нужно не исключить данные из выборки полностью, а лишь скрыть определенную группировочную запись.

Рассмотрим подробнее, как это сделать:

  1. Запрос оставляем без изменений. В этом методе нам не нужно модифицировать текст запроса. Поле Регистратор выбирается как есть.

  2. Настраиваем отбор в структуре отчета. Переходим на вкладку "Настройки" в схеме компоновки данных.

  3. Находим в структуре отчета нашу группировку по полю Регистратор.

  4. Выделяем эту группировку и переходим на ее собственную вкладку "Отбор" (не путайте с общим отбором для всего отчета).

  5. Добавляем новый элемент отбора:

    • Поле: Регистратор
    • Вид сравнения: Заполнено

    В качестве альтернативы можно использовать вид сравнения Не равно и в качестве значения указать Неопределено. Результат будет тем же.

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

Решение 3: Условное оформление (визуальное скрытие)

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

Разберем по шагам:

  1. Переходим на вкладку "Условное оформление" в настройках отчета.

  2. Добавляем новый элемент условного оформления.

  3. На вкладке "Оформление" устанавливаем цвет текста и цвет фона одинаковыми, например, белыми.

  4. На вкладке "Условие" добавляем отбор: Регистратор Равно Неопределено.

  5. На вкладке "Оформляемые поля" оставляем список пустым. Это будет означать, что оформление применяется ко всей строке отчета.

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

← К списку