При разработке отчетов в системе компоновки данных (СКД) мы часто сталкиваемся с ситуацией, когда числовое поле в конфигурации имеет фиксированную точность (например, 3 знака после запятой для весового товара или количества). Однако в самом отчете это выглядит не всегда эстетично: если значение целое, пользователь видит громоздкое 15.000 вместо лаконичного 15. В этой статье мы разберем несколько эффективных способов, как сделать формат числа «гибким», чтобы дробная часть отображалась только тогда, когда она действительно содержит значимые цифры.
Самый быстрый и простой способ, который часто игнорируют разработчики, — это применение специальной строки формата. Рассмотрим, как это работает. В платформе 1С существует формат ЧФ=Ч (Числовой Формат = Число), который предназначен именно для таких случаев.
Проанализируем алгоритм действий:
ЧФ=Ч.Этот формат заставляет систему выводить число «как есть». Если число целое — оно выведется без точки и нулей. Если дробное — выведется с дробной частью. Однако у этого метода есть важный нюанс: формат ЧФ=Ч часто сбрасывает другие настройки оформления, такие как группировка разрядов (пробел между тысячами). Если вам важно разделять тысячи, этот способ может не подойти.
Этот метод считается наиболее профессиональным и «правильным», так как он не превращает число в строку и сохраняет возможность корректного суммирования итогов, а также адекватный экспорт в Excel. Разберем ситуацию по шагам.
Идея заключается в том, чтобы применять формат ЧДЦ=0 (ноль знаков после запятой) только к тем ячейкам, где число является целым. Для определения «целости» числа мы будем использовать математическую операцию остатка от деления на единицу.
Настроим условное оформление в СКД:
ЧДЦ=0. Это укажет системе, что мы хотим видеть целое число.Поле % 1 Равно 0. Здесь % — это оператор получения остатка от деления. Если остаток от деления на 1 равен нулю, значит, перед нами целое число.Важное дополнение: если вы работаете с данными, которые могут содержать пустые значения (NULL), то условие может отработать некорректно. В таком случае в выражении условия лучше использовать проверку ЕСТЬNULL(Поле, 0) % 1 = 0.
Если по каким-то причинам предыдущие методы не подходят, мы можем создать вычисляемое поле, которое будет динамически определять свою строку формата. Посмотрим на пример формулы, которую можно вставить в колонку Выражение на закладке Вычисляемые поля:
Формат(ИмяВашегоПоля, ?(ИмяВашегоПоля % 1 = 0, "ЧДЦ=0", "ЧДЦ=3"))
Разберем, что здесь происходит. Мы используем тернарный оператор ?(). Если остаток от деления числа на 1 равен 0, система применяет формат без десятичных знаков (ЧДЦ=0), иначе применяется стандартный формат с тремя знаками (ЧДЦ=3). Для более сложных вычислений в выражениях полей можно использовать методы глобального контекста в системе компоновки данных.
Внимание: У этого способа есть существенный недостаток. Функция Формат() превращает число в строку. Это означает, что:
Проанализируем ситуацию, когда наше поле является ресурсом (например, «Количество»). Если мы настроили формат только для самого поля, в детальных записях все будет красиво, но в строках итогов (группировках) могут снова появиться три нуля. Это происходит потому, что для ресурсов формат нужно настраивать отдельно. Если вам требуется реализовать более сложные алгоритмы подведения результатов в отчете, можно применить метод расчета различных итогов для разных группировок в СКД.
Чтобы формат применялся ко всему отчету, включая итоги:
Иногда при использовании метода Поле % 1 = 0 вы можете заметить, что число 5 все равно выводится как 5.000. Это может быть связано с особенностями хранения чисел с плавающей точкой в базе данных. Выясним причину: на самом деле число может храниться как 5.000000000001.
В таких случаях условие в оформлении стоит немного усложнить, используя функцию округления:
Окр(Поле, 3) % 1 = 0
Это позволит отсечь микроскопические погрешности вычислений и корректно определить, является ли число целым для пользователя.
Подводя итог, можно сказать, что наиболее универсальным и надежным способом является Условное оформление с проверкой остатка от деления. Оно сохраняет тип данных «Число», корректно работает с итогами и обеспечивает правильное поведение при экспорте в сторонние редакторы.