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