Отчеты и Аналитика · 10 мин
Как вывести нули в отчете 1С
Почему в отчетах 1С пропадают нулевые значения и как вывести нули: настройки СКД, параметры отчета, формат чисел и обработка результата запроса.
Нулевые значения в отчетах 1С часто «пропадают»: ячейка остается пустой, строка с нулевым остатком не выводится, а итог по группировке схлопывается. Причина почти всегда одна из трех — отборы и соединения в запросе, настройки системы компоновки данных (СКД) или формат отображения чисел. Понимание, на каком уровне теряется ноль, позволяет вернуть его в отчет без доработки конфигурации.
Важно различать две ситуации. Первая — данные с нулевым значением физически отсутствуют в выборке: например, регистратор не делал движений, и виртуальная таблица остатков не возвращает строку. Вторая — значение в выборке есть, но СКД или формат ячейки скрывает его при выводе. От этого зависит, где исправлять: в запросе, в настройках отчета или в свойствах поля.
Почему нули исчезают из отчета
Основная причина — особенность виртуальных таблиц регистров. Таблицы «Остатки», «Обороты», «ОстаткиИОбороты» возвращают только те строки, по которым были движения или есть ненулевой остаток. Если по номенклатуре не было ни прихода, ни расхода, строки в выборке просто нет, и в отчете товар не появится даже с нулем.
Вторая причина — внутреннее соединение таблиц. Если справочник номенклатуры соединяется с остатками через ВНУТРЕННЕЕ СОЕДИНЕНИЕ, все позиции без остатков отсекаются. Третья причина — отбор в СКД вида «Количество > 0» или «Сумма <> 0», который пользователь мог добавить в настройках и забыть.
Наконец, ноль может быть в данных, но не отображаться из-за формата. Если в формате числа задано подавление нуля (например, «ЧН= » — пустое представление нуля), ячейка визуально пустая, хотя значение равно нулю. Это частая ситуация в типовых печатных формах и макетах.
Проверьте тип соединения и виртуальную таблицу в запросе
Проверьте формат поля и параметр ЧН
Проверьте отборы в настройках отчета
Вывод нулей через запрос: левое соединение и ЕСТЬNULL
Если отчет построен на запросе, первый шаг — заменить внутреннее соединение на левое. Справочник (номенклатура, контрагенты, склады) ставится слева, виртуальная таблица остатков или оборотов — справа. Тогда все элементы справочника попадут в выборку, а по позициям без движений числовые поля будут содержать NULL.
NULL — это не ноль, а отсутствие значения. Чтобы вместо NULL выводился ноль, оберните числовые поля в функцию ЕСТЬNULL: ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Количество. Это стандартный прием, безопасный для любых конфигураций.
ВЫБРАТЬ
Номенклатура.Ссылка КАК Товар,
ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Остаток
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК Остатки
ПО Остатки.Номенклатура = Номенклатура.Ссылка
ГДЕ
НЕ Номенклатура.ЭтоГруппаАльтернатива левому соединению — таблица «ОстаткиИОбороты» с периодичностью. Она возвращает строки по всем комбинациям измерений, у которых были движения за период, включая конечный нулевой остаток. Это удобно, когда нужно показать позиции, у которых остаток обнулился внутри периода.
Когда левое соединение замедляет отчет
Левое соединение со справочником без отбора может сильно раздуть выборку: выводятся все тысячи позиций, включая архивные. Ограничьте левую таблицу условием — по группе номенклатуры, признаку «не помечен на удаление», актуальному виду. Это ускорит формирование и сделает отчет читаемым.
Настройка СКД: параметры и отборы
В отчетах на СКД нули могут отсекаться на уровне настроек, независимо от запроса. Откройте расширенные настройки отчета (кнопка «Еще» или «Настройки») и проверьте вкладку «Отбор»: условия вида «Ресурс > 0» или «Ресурс заполнено» убирают нулевые строки. Удалите или отключите такой отбор, и нули появятся.
Также проверьте параметры виртуальной таблицы в самой схеме компоновки. Если в параметрах остатков задан отбор по складу или организации, позиции вне отбора не попадут даже в левое соединение. В этом случае перенесите условие из параметров виртуальной таблицы в отбор СКД — тогда оно будет применяться после соединения.
- 1Откройте настройки отчета и проверьте вкладку «Отбор» — отключите условия по числовым ресурсам
- 2Откройте схему компоновки (в конфигураторе или через «Изменить вариант») и проверьте тип соединения в запросе
- 3Замените ВНУТРЕННЕЕ СОЕДИНЕНИЕ на ЛЕВОЕ для справочника измерений
- 4Оберните числовые поля в ЕСТЬNULL(Поле, 0)
- 5Сформируйте отчет и убедитесь, что позиции без движений выводятся с нулем
Формат числа и подавление нуля в ячейке
Если значение есть, но ячейка пустая, причина в формате. В свойствах поля СКД (закладка «Наборы данных» → поле → «Формат») или в параметре макета может быть задана строка формата с подавлением нуля. Конструкция «ЧН=» определяет представление нуля: если после знака равенства пусто, ноль отображается как пустая строка.
Чтобы ноль выводился, уберите параметр ЧН из формата или задайте ему значение: ЧН=0. В обычных формах аналогичное свойство есть у поля ввода и табличного документа — «Формат» и «Форматная строка». В макетах табличных документов формат задается в свойствах ячейки.
Нули в типовых отчетах без доработки
В типовых конфигурациях (Бухгалтерия, Управление торговлей, ERP) многие отчеты уже имеют настройки, влияющие на вывод нулевых строк. Например, в отчетах по остаткам товаров есть вариант «с нулевыми остатками» или переключатель показа позиций без движений. Перед доработкой проверьте список вариантов отчета — нужный вариант может уже существовать.
Если варианта нет, создайте свой: откройте настройки, снимите отборы по ресурсам, сохраните как новый вариант с понятным именем. Это не требует прав конфигуратора и не затрагивает конфигурацию, а значит, не сломается при обновлении.
Как выбрать действие
Типичные ошибки и ограничения
Частая ошибка — заменять NULL на ноль до группировки, а потом удивляться лишним строкам в итогах. ЕСТЬNULL нужно применять к полю, которое затем суммируется, либо к результату агрегатной функции: ЕСТЬNULL(СУММА(Обороты.Количество), 0). Оба варианта рабочие, но смешивать их бессмысленно.
Вторая ошибка — выводить нули по всем комбинациям измерений. Декартово произведение «все товары × все склады» даст огромный отчет, где большинство строк — нули. Выводите нулевые строки только по осмысленным сочетаниям: например, товары, которые когда-либо двигались по данному складу.
Проверка результата
После изменений сформируйте отчет на тестовом периоде, где точно есть позиции без движений. Проверьте три вещи: позиция без оборотов присутствует в отчете, в числовой ячейке стоит 0, а не пусто, итоги по группам не изменились по сравнению с прежней версией (нули не должны влиять на суммы).
Дополнительно выгрузите отчет в Excel и убедитесь, что нулевые ячейки содержат число 0, а не текст и не пустоту. Это важно, если файл передается для дальнейшей обработки.
Как проверить результат
Строка выводится, в поле стоит 0
Строки нет — проверяйте соединение и отборы
Суммы совпадают с прежней версией отчета
Итоги изменились — проверьте дублирование строк из-за соединения
Ячейки содержат число 0
Ячейки пустые или текстовые — проверьте формат
Что важно запомнить
Нули в отчете 1С теряются на трех уровнях: запрос (внутреннее соединение и виртуальные таблицы), настройки СКД (отборы) и формат ячейки (подавление нуля). Основные инструменты — левое соединение, функция ЕСТЬNULL и отключение отборов по ресурсам. Типовые отчеты сначала проверяйте на наличие готового варианта, прежде чем дорабатывать.
Частые вопросы
Почему ЕСТЬNULL не помогает, строки всё равно нет?
ЕСТЬNULL заменяет NULL на ноль только в уже существующих строках выборки. Если строка отсекается внутренним соединением или отбором в параметрах виртуальной таблицы, ее нет в выборке, и заменять нечего. Сначала обеспечьте попадание строки в выборку через левое соединение, затем применяйте ЕСТЬNULL.
Как вывести нулевые остатки в типовом отчете по складу?
Откройте настройки отчета и поищите вариант с показом всех позиций или отключите отбор по количеству. В ряде конфигураций есть отдельный переключатель «показывать нулевые остатки». Если такого нет, сохраните собственный вариант настроек — это не требует доработки конфигурации.
Чем NULL отличается от нуля в 1С?
NULL означает отсутствие значения — так платформа обозначает поля, для которых соединение не нашло соответствия. Ноль — конкретное числовое значение. NULL нельзя сравнивать обычным равенством и использовать в арифметике: любая операция с NULL дает NULL. Поэтому перед вычислениями NULL заменяют через ЕСТЬNULL.
Почему в Excel нули выглядят как пустые ячейки?
Скорее всего, в формате поля задано подавление нуля (параметр ЧН с пустым значением). При выгрузке такая ячейка передается как пустая. Уберите подавление нуля в формате поля отчета или макета, и в Excel попадет реальное число 0.
Можно ли вывести нули по всем товарам и всем складам сразу?
Технически можно через соединение справочников товаров и складов, но результатом будет произведение их количеств — отчет из сотен тысяч строк, который формируется долго и нечитаем. Практичнее ограничить состав: например, выводить только товары, у которых были движения по складу за последний год, или только активную номенклатуру.
Влияет ли вывод нулевых строк на итоги отчета?
На суммовые итоги добавление строк с нулевыми значениями не влияет — суммы останутся прежними. Но могут измениться итоги по количеству строк и средние значения, если они рассчитываются по числу записей. Проверяйте такие показатели после изменения запроса.