Почему в отчете СКД нулевой остаток отображается как пустота и как это исправить?

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

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

Причины скрытия нулей в отчетах СКД

Рассмотрим, почему числовое значение 0 или отсутствие данных может отображаться в отчете пустой ячейкой:

  1. Стандартное поведение форматирования чисел в СКД: в настройках оформления полей по умолчанию для чисел может быть активирован параметр скрытия нулей (ЧЗ=0) либо не задано строковое представление для пустых значений и нулей.
  2. Попадание значения NULL: если в отчете используются группировки или соединения таблиц, по которым нет движений, платформа возвращает значение NULL. По умолчанию СКД не выводит для NULL никаких символов.
  3. Специфика виртуальных таблиц регистров накопления: виртуальная таблица ОстаткиИОбороты возвращает записи только по тем комбинациям измерений, по которым за указанный период были движения либо существовал начальный остаток. При равенстве оборотов конечный остаток равен 0, но при отсутствии движений строка вовсе не сформируется без соединения с основной таблицей.

Посмотрим на пример запроса к виртуальной таблице, в котором может проявиться данная проблема:


ВЫБРАТЬ
    ОбъектыНаУчетеОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ОбъектыНаУчетеОстаткиИОбороты.ИнвентарныйНомер КАК ИнвентарныйНомер,
    ОбъектыНаУчетеОстаткиИОбороты.КоличествоПриход КАК Приход,
    ОбъектыНаУчетеОстаткиИОбороты.КоличествоРасход КАК Расход,
    ОбъектыНаУчетеОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остаток
ИЗ
    РегистрНакопления.ОбъектыНаУчете.ОстаткиИОбороты КАК ОбъектыНаУчетеОстаткиИОбороты

Способ 1. Настройка формата поля в схеме компоновки данных

Разберем по шагам наиболее быстрое и простое решение через конструктор СКД:

  1. Откроем схему компоновки данных и перейдем на вкладку Наборы данных.
  2. В таблице полей найдем нужное числовое поле (например, Остаток или КоличествоКонечныйОстаток).
  3. В колонке Оформление нажмем кнопку выбора и перейдем к параметру Формат.
  4. В конструкторе форматной строки проверим, чтобы флаг Не отображать ноль (параметр ЧЗ=0) был отключен.
  5. В поле Представление нуля или Представление Неопределено/NULL укажем значение 0 (в строке формата это выглядит как ЧН=0).

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

Способ 2. Обработка через выражение ресурса СКД

Проанализируем ситуацию, когда поле является числовым ресурсом отчета. Если остаток рассчитывается на разных уровнях группировок, на пустых ветках может возникать NULL.

Чтобы гарантировать вывод числового нуля, перейдем на вкладку Ресурсы и зададим выражение с функцией ЕстьNull:

ЕстьNull(Сумма(Остаток), 0)

Такой подход обеспечивает получение корректного типа Число со значением 0 во всех итогах и группировках.

Способ 3. Использование функции ЕСТЬNULL в тексте запроса

Если в схеме компоновки используется соединение справочника с таблицей остатков (чтобы вывести все элементы, даже без движений), ненайденные строки будут содержать NULL. В этом случае обработаем поля непосредственно в запросе:


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

Способ 4. Настройка условного оформления отчета

Рассмотрим вариант, когда необходимо принудительно задать текстовое отображение через интерфейс настроек:

  1. В СКД перейдем на вкладку Настройки и откроем раздел Условное оформление.
  2. Добавим новый элемент оформления.
  3. На вкладке Оформление установим флаг Текст и введем 0.
  4. На вкладке Условие добавим правило: Остаток Не Заполнено ИЛИ Остаток Равно 0.
  5. На вкладке Оформляемые поля выберем колонку Остаток.

Использование правильной строки формата ЧН=0 в сочетании с функцией ЕстьNull позволяет полностью исключить появление нежелательных пустых ячеек в числовых колонках отчетов.

← На главную