Как в СКД 1С исключить группировки со значением NULL и сохранить общие итоги?

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

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

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

Решение проблемы: Использование свойства роли поля «Игнорировать значения NULL»

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

Давайте пошагово разберем, как настроить это свойство в схеме компоновки данных:

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

Как этот механизм работает под капотом СКД?

Когда процессор компоновки данных начинает обход детальных записей выборки для построения иерархического дерева отчета, он анализирует значения полей группировки. Если для поля группировки включено свойство «Игнорировать значения NULL», система при обнаружении значения NULL просто пропускает шаг создания новой ветки (строки) группировки для этого конкретного значения.

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

Главное преимущество метода: ресурсы (суммы оборотов, остатков, количества), привязанные к записям с незаполненным контрагентом, не теряются. Они корректно суммируются процессором компоновки и отражаются в общих итогах отчета.

Тем не менее в практике разработки 1С применяются и другие подходы. Рассмотрим их подробнее, чтобы понимать последствия их использования для бизнес-логики учета.

Альтернативный метод 1: Фильтрация данных на уровне запроса

Если бизнес-требования к отчету подразумевают, что записи без заполненного аналитического разреза вообще не должны учитываться (например, это ошибочные данные, которые только искажают картину), то логичнее всего отсечь их как можно раньше — прямо на уровне СУБД в тексте запроса.

Для этого в разделе ГДЕ нашего запроса мы прописываем жесткое условие фильтрации. Рассмотрим пример кода:


ВЫБРАТЬ
    ПродажиОбороты.Организация КАК Организация,
    ПродажиОбороты.Контрагент КАК Контрагент,
    ПродажиОбороты.СуммаОборот КАК СуммаОборот
ИЗ
    РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ГДЕ
    ПродажиОбороты.Контрагент ЕСТЬ НЕ NULL
    И НЕ ПродажиОбороты.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)

Особенности и подводные камни этого метода:

Альтернативный метод 2: Использование отборов в настройках компоновки

Этот метод похож на фильтрацию в запросе, но реализуется средствами самой СКД. На вкладке «Настройки» схемы компоновки данных (или непосредственно пользователем в режиме «1С:Предприятие») добавляется элемент отбора.

Рассмотрим, как настроить такой отбор по шагам:

  1. Перейдем на вкладку «Настройки» в конструкторе СКД.
  2. В нижней части экрана выберем вкладку «Отбор».
  3. Добавим новое поле отбора, выбрав Контрагент.
  4. В колонке «Вид сравнения» установим значение «Заполнено» (или «Не равно» со значением пустой ссылки/NULL).

Плюсы и минусы использования отборов СКД:

Альтернативный метод 3: Замена NULL на значение по умолчанию с помощью ЕСТЬNULL

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

Проанализируем пример использования функции ЕСТЬNULL в тексте запроса:


ВЫБРАТЬ
    ПродажиОбороты.Организация КАК Организация,
    ЕСТЬNULL(ПродажиОбороты.Контрагент, "Контрагент не указан") КАК Контрагент,
    ПродажиОбороты.СуммаОборот КАК СуммаОборот
ИЗ
    РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты

При таком подходе вместо пустого места в группировке пользователь увидит аккуратную строчку «<Контрагент не указан>», под которой будут сгруппированы все суммы, не имеющие привязки к конкретному партнеру. Это позволяет сохранить прозрачность учета и облегчает поиск ошибок ввода данных.

Резюме: какую стратегию работы с NULL выбрать?

Подводя итог нашему анализу, сформулируем простые правила выбора оптимального решения для ваших задач в 1С:

← На главную