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