Как в отчете 1С вывести 0 вместо пустого значения в конечных остатках

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

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

В этой статье мы подробно разберем, почему возникают «пустые дырки» в отчетах, и рассмотрим все профессиональные способы вывода нуля вместо пустоты в 1С.

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

Самый надежный и правильный с точки зрения производительности способ — это обработка данных на уровне обращения к базе данных. Если поле в результате выполнения запроса может содержать NULL, мы должны явно указать системе, чем его заменить.

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

  1. Перейдем на закладку «Описания полей» или непосредственно в текст запроса.
  2. Обернем наше поле в функцию ЕСТЬNULL.

Рассмотрим пример кода в запросе (его также можно проверить через модифицированную консоль запросов УФ — для этого подойдёт инструментарий разработчика с консолью запросов и СКД):


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

Важно: Функция ЕСТЬNULL принимает два параметра. Первый — проверяемое поле, второй — значение, которое будет подставлено, если первое поле равно NULL. Использование этого метода гарантирует, что в СКД придут уже подготовленные числовые данные.

Метод 2. Настройка формата поля в СКД

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

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

  1. Откроем схему компоновки данных (для работы на стороне клиента подойдет Пользовательская СКД).
  2. Перейдем на закладку «Наборы данных».
  3. Найдем в списке нужное поле (например, КонечныйОстаток).
  4. В колонке «Оформление» нажмем на кнопку выбора.
  5. В появившемся окне найдем параметр «Формат».
  6. В конструкторе формата в строке «Представление нуля» впишем «0», или в строке «Форматная строка» укажем ЧН=0.

Параметр ЧН=0 (Число: Ноль = 0) сообщает системе: «Если значение числовое и оно пустое или равно нулю, выведи на экран цифру 0».

Метод 3. Условное оформление (Гибкий подход)

Иногда требуется выводить ноль только при определенных условиях или в конкретных группировках. В этом случае нам поможет механизм «Условного оформления» на закладке «Настройки» СКД.

Проанализируем алгоритм настройки:

  1. Перейдем на вкладку «Настройки», затем вниз на вкладку «Условное оформление».
  2. Добавим новый элемент оформления.
  3. В поле «Оформление» выберем параметр «Текст» и впишем значение «0».
  4. В поле «Условие» укажем: ВашеПоле НЕ Заполнено (или ВашеПоле Равно <пусто>).
  5. В «Оформляемых полях» выберем только те колонки, где мы хотим видеть нули.

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

Метод 4. Работа с ресурсами (Для итогов и кросс-таблиц)

Выясним причину, по которой ЕСТЬNULL в запросе иногда не помогает. В кросс-отчетах (матрицах), где по строкам идет Номенклатура, а по колонкам Склады, на пересечении может просто не быть записи в базе. В этом случае поле даже не вычисляется в запросе для этой конкретной «дырки».

Чтобы решить проблему на уровне итогов, разберем настройку на закладке «Ресурсы»:

  1. В поле выражения для ресурса вместо стандартного Сумма(Остаток) напишем выражение с проверкой.

Пример выражения в ресурсах:


Сумма(ЕСТЬNULL(КонечныйОстаток, 0))

Такой подход заставит СКД выводить ноль на пересечении строк и колонок даже там, где данных в базе нет совсем (а при необходимости можно скрыть столбцы, в которых нет данных).

Метод 5. Вычисляемые поля и выражение представления

Если поле является сложным и рассчитывается уже внутри СКД, мы можем использовать вкладку «Вычисляемые поля». Создадим новое поле и в колонке «Выражение» пропишем ту же логику ЕСТЬNULL(МоеСложноеПоле, 0).

Также у каждого поля в СКД есть свойство «Выражение представления». Рассмотрим его подробнее. Если мы напишем там: Формат(ИмяПоля, "ЧН=0"), то система будет использовать эту функцию при каждом выводе данных в отчет. Это удобно, если вы хотите централизованно управлять форматом вывода конкретного показателя во всех вариантах отчета.

Метод 6. Особенности виртуальных таблиц остатков

Рассмотрим ситуацию с «Конечными остатками». Если за выбранный период по товару не было движений и остаток равен нулю, виртуальная таблица 1С может вообще не вернуть строку. В итоге товар исчезнет из отчета.

Чтобы этого избежать и увидеть заветный «0»:

Резюме

Мы рассмотрели различные способы борьбы с пустыми ячейками в отчетах. Подведем итоги: Запрос (ЕСТЬNULL) — лучший выбор для простых списков. Формат поля (ЧН=0) — самый быстрый способ для СКД. Ресурсы — обязателен для кросс-таблиц и матриц. Условное оформление — если нужно заменить пустоту на 0 только визуально в определенных строках.

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

← На главную