При разработке отчетов в Системе компоновки данных (СКД) программисты часто сталкиваются с эстетической проблемой: платформа принудительно выводит установленное количество знаков после запятой, даже если они являются нулевыми. Например, вместо лаконичного числа 722 пользователь видит 722,00, а вместо 0,1 — 0,100. Это загромождает отчет и затрудняет восприятие информации, особенно когда речь идет о весовых характеристиках, ценах или объемах с разной степенью точности.
В этой статье мы подробно разберем, как избавиться от «паразитических» нулей, проанализируем различные подходы — от стандартных настроек формата до хитростей в тексте запроса, и выясним, какой метод является наиболее предпочтительным в разных ситуациях.
Самый правильный и «цивилизованный» метод решения проблемы заключается в тонкой настройке строки формата числового поля. Рассмотрим, как это работает. В 1С существует параметр формата ЧС (сдвиг/точность), который при определенных значениях позволяет управлять выводом незначащих разрядов.
Разберем алгоритм настройки:
Цена или Количество).ЧС=0.Проанализируем результат: если мы зададим строку формата как ЧДЦ=3; ЧС=0, то для числа 5,100 система выведет 5,1. При этом для числа 5,123 будет выведено три знака. Таким образом, параметр ЧС=0 фактически сообщает системе: «выводи дробную часть только в том случае, если там есть значащие цифры, отличные от нуля».
Иногда настройки формата непосредственно в наборе данных могут перекрываться другими настройками или не срабатывать для итоговых полей. В таком случае мы можем воспользоваться механизмом Условного оформления.
Рассмотрим по шагам, как это сделать:
ЧЦ=15; ЧДЦ=2; ЧС=0).Этот метод удобен тем, что позволяет гибко управлять визуализацией данных в зависимости от условий (например, убирать нули только для определенных видов номенклатуры), но чаще всего используется как глобальная настройка для всего отчета.
Один из самых необычных, но эффективных способов был предложен опытными разработчиками: выполнение фиктивной арифметической операции прямо в тексте запроса. Посмотрим на пример кода:
ВЫБРАТЬ
ТоварыНаСкладах.Номенклатура КАК Номенклатура,
ТоварыНаСкладах.КоличествоОстаток + 0 КАК Количество
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладах
Выясним причину, почему это работает. Когда мы выбираем поле ресурса, оно имеет жестко заданный тип (например, Число(15, 3)). СКД видит эту точность и старается заполнить все три знака после запятой нулями. Однако при выполнении операции + 0 типизация результата становится более «мягкой» или динамической. Система компоновки в этом случае часто перестает принудительно дополнять число нулями до максимальной точности, выводя только значащие цифры.
Если нам нужно жестко ограничить количество знаков, но при этом минимизировать количество нулей, можно использовать конструкцию ВЫРАЗИТЬ. Рассмотрим пример:
ВЫБРАТЬ
ВЫРАЗИТЬ(ЦеныНоменклатуры.Цена КАК ЧИСЛО(15, 2)) КАК Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
Хотя этот метод ограничивает точность до двух знаков, он не всегда гарантирует отсутствие нулей в выводе (например, может получиться 36,00). Поэтому данный способ лучше комбинировать с настройкой формата в самой СКД, описанной в первом способе.
Если мы хотим сохранить точность числа для расчетов в итогах, но визуально в детальных записях видеть «чистые» числа, можно воспользоваться колонкой Выражение представления на закладке Наборы данных.
Пропишем в этой колонке следующее выражение:
Окр(Значение, 2)
В этом случае в ячейку отчета будет выводиться результат функции округления, который зачастую избавляется от лишних знаков, если они равны нулю. При этом само поле останется полноценным числом, и сумма по группировкам будет считаться корректно, исходя из исходного точного значения.
Для случаев, когда отчет носит чисто информационный характер и не предполагает дальнейшей выгрузки в Excel для расчетов, можно прибегнуть к функции XMLСтрока(). Эту функцию можно указать в Вычисляемых полях или в Выражении представления.
Особенность XMLСтрока(Число) заключается в том, что она преобразует число в строку в соответствии со стандартом XML, который автоматически отсекает все незначащие нули. Например, 12.500 превратится в "12.5".
Важный момент: помните, что этот метод превращает данные в текст. Если пользователь захочет выделить колонку в отчете и посмотреть «Сумму» в строке состояния 1С или Excel, он увидит ноль, так как для системы это будут строковые данные.
Мы проанализировали несколько подходов к решению задачи. Подведем итоги:
ЧС=0 в настройках поля набора данных или условном оформлении. Это сохраняет числовой тип данных и обеспечивает чистоту вывода.Поле + 0, что часто снимает избыточную типизацию.XMLСтрока(), но с осторожностью.Выбирайте метод исходя из того, насколько важна дальнейшая работа с числами после формирования отчета. Правильная настройка визуализации — это залог того, что ваш клиент или конечный пользователь будет доволен качеством продукта.