Почему в консоли запросов 1С выводится 0, а в готовом отчете СКД — пустое поле?

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

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

В этой статье мы подробно разберем причины такого поведения платформы 1С:Предприятие и рассмотрим несколько надежных практических способов решения этой проблемы.

Выясняем причины: почему исчезают нули?

Прежде чем переходить к настройкам, давайте разберемся в механике работы платформы. Существует три основных фактора, из-за которых числовой ноль превращается в пустоту:

  1. Стандартное поведение платформы по скрытию нулей. По умолчанию во многих системных шрифтах и табличных документах 1С настроено скрытие нулевых значений. Это сделано для того, чтобы не перегружать отчеты лишней информацией и упростить визуальное восприятие таблиц.
  2. Разница между числовым нулем и значением NULL. В запросе автора темы используется левое соединение с регистром сведений:
    
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСостоянийОбъектов.СрезПоследних(...) КАК РегистрСостоянийОбъектовСрезПоследних
    ПО ЛотыВыбранныеПоставщики.Договор = РегистрСостоянийОбъектовСрезПоследних.Объект
    
    Если для какого-то договора записи в регистре отсутствуют, результатом соединения будет значение NULL. В консоли запросов NULL и 0 визуально разделяются, но СКД при выводе детальных записей может отображать оба этих значения одинаково — в виде пустой ячейки.
  3. Специфика расчета ресурсов в СКД. Даже если вы жестко прописали 0 КАК Количество в объединении запросов (как это сделано в примере автора темы), при расчете групповых итогов СКД вычисляет выражение ресурса (например, Сумма(Количество)). Если в группировку не попало ни одной детальной записи, результатом агрегации на уровне итогов станет NULL, который по умолчанию выводится как пустая строка.

Теперь рассмотрим пошагово, как заставить отчет выводить цифру "0" во всех необходимых случаях.

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

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

Рассмотрим этот процесс по шагам:

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

После этого СКД будет принудительно заменять любые нулевые значения указанным символом при выводе отчета пользователю.

Способ 2. Использование условного оформления (Для сложных таблиц и кросс-таблиц)

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

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

  1. Перейдите на вкладку Настройки в схеме компоновки данных.
  2. В нижней части экрана выберите вкладку Условное оформление.
  3. Добавьте новый элемент оформления.
  4. В поле Оформление найдите параметр Формат и задайте для него представление нуля: ЧН=0. Также можно воспользоваться параметром Текст, указав в нем значение 0.
  5. Перейдите к заполнению вкладки Условие. Нам необходимо отловить два состояния поля (когда оно равно нулю и когда оно не заполнено вообще из-за NULL). Добавьте группу условий ИЛИ, а внутрь нее поместите два условия:
    • ВашеПоле Равно 0
    • ВашеПоле Не заполнено
  6. На вкладке Оформляемые поля выберите ваше числовое поле (например, Сумма или Количество).

Этот способ является универсальным и гарантирует вывод нуля даже в самых сложных структурах отчетов.

Способ 3. Преобразование NULL в выражении ресурсов СКД

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

Давайте исправим выражение ресурса:

  1. Перейдите на вкладку Ресурсы вашей СКД.
  2. Найдите нужное поле.
  3. В колонке Выражение вместо стандартного вычисления: Сумма(Сумма) Напишите конструкцию с проверкой на пустоту: ЕстьNull(Сумма(Сумма), 0)

Использование встроенной функции СКД ЕстьNull() на уровне расчета ресурсов принудительно преобразует пустоту в числовой ноль на всех уровнях группировок и общих итогов отчета.

Способ 4. Корректировка исходного запроса

Чтобы минимизировать проблемы на уровне компоновки, мы рекомендуем обрабатывать потенциальные пустые значения еще на этапе написания текста запроса. Для этого используйте функцию ЕСТЬNULL в полях, которые получаются в результате левых соединений.

Посмотрим на примере фрагмента запроса автора темы. Вместо обращения к реквизиту через точку напрямую:

ЛотыВыбранныеПоставщики.Договор.Стоимость КАК Сумма,

Безопаснее написать конструкцию, которая вернет числовой ноль в случае отсутствия договора или его стоимости:

ЕСТЬNULL(ЛотыВыбранныеПоставщики.Договор.Стоимость, 0) КАК Сумма,

Это заложит правильную структуру данных еще до того, как компоновщик СКД начнет строить итоговый макет отчета.

Резюме и рекомендации

Для достижения гарантированного результата при разработке отчетов в СКД мы рекомендуем использовать комплексный подход:

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

← На главную