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