Как в СКД вывести целое число без нулей, а дробное — с двумя знаками после запятой?

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

При разработке отчетов на схеме компоновки данных (СКД) программисты часто сталкиваются с эстетической задачей форматирования числовых полей. По умолчанию стандартная строка форматирования в 1С не умеет гибко подстраиваться под тип числа. Если мы зададим жесткий формат ЧДЦ=2 (два десятичных знака), то целое число 3 превратится в 3,00. Если же мы уберем формат вовсе, то дробное число 3.14159 выведется со всеми своими многочисленными знаками после запятой, что перегружает отчет и делает его нечитаемым.

В этой статье мы подробно разберем, как решить эту задачу изящно, сохранив при этом числовой тип данных для корректного подсчета итогов и красивого выравнивания в таблицах.

Почему не стоит решать задачу в запросе или «резать» строки?

Иногда у начинающих разработчиков возникает соблазн решить проблему «в лоб» — преобразовать число в строку прямо в запросе или в коде, а затем обрезать лишние символы с помощью строковых функций. Этот подход крайне не рекомендуется по следующим причинам:

  1. Потеря числового типа данных. Как только число превращается в строку, СКД больше не может использовать его в качестве ресурса. Вы не сможете посчитать сумму, среднее или другие итоги по этой колонке.
  2. Проблемы с выравниванием. Текстовые поля по умолчанию выравниваются по левому краю, а числовые — по правому. Текст, имитирующий числа, будет выглядеть в таблице неаккуратно.
  3. Экспорт в Excel. При выгрузке отчета в табличный документ Excel ячейки с текстовыми числами получат предупреждение «Число сохранено как текст», и пользователи не смогут применять к ним стандартные математические формулы.

Выяснив причины, почему строковые манипуляции в запросе не подходят, перейдем к правильным методам решения средствами СКД.

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

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

Рассмотрим по шагам процесс настройки во вкладке «Условное оформление» схемы компоновки данных:

  1. Перейдите на вкладку «Настройки», затем выберите вкладку «Условное оформление».
  2. Добавьте первое правило для целых чисел:
    • В колонке «Оформление» найдите параметр «Формат» и укажите строковое значение ЧДЦ=0 (ноль десятичных знаков).
    • В колонке «Условие» добавьте сравнение: МоеЧисло = Выразить(МоеЧисло, "Число(15, 0)"). Также можно использовать более простое выражение через остаток от деления: МоеЧисло % 1 = 0.
    • В колонке «Оформляемые поля» выберите ваше числовое поле.
  3. Добавьте второе правило для дробных чисел:
    • В колонке «Оформление» задайте формат как ЧДЦ=2 (два десятичных знака).
    • В колонке «Условие» укажите обратное выражение: МоеЧисло <> Выразить(МоеЧисло, "Число(15, 0)") или МоеЧисло % 1 <> 0.
    • В колонке «Оформляемые поля» снова выберите ваше поле.

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

Способ 2. Использование выражения представления поля

Если вы не хотите перегружать вкладку условного оформления (особенно если таких полей в отчете много), можно прописать логику форматирования непосредственно в свойствах самого поля набора данных.

Проанализируем этот вариант. Перейдите на вкладку «Наборы данных», найдите ваше числовое поле и в колонке «Выражение представления» напишите следующее условие:


Выбор 
    Когда МоеЧисло = Выразить(МоеЧисло, "Число(15, 0)") 
        Тогда Формат(МоеЧисло, "ЧДЦ=0") 
    Иначе Формат(МоеЧисло, "ЧДЦ=2") 
Конец

Как это работает? СКД вычисляет выражение представления в момент вывода данных на экран. Если число делится на единицу без остатка (то есть оно целое), применяется формат без десятичных знаков. В противном случае число округляется до двух знаков после запятой, при этом одиночные дробные знаки (например, 3.1) будут дополнены нулем до двух знаков (3,10), что соответствует правилам бухгалтерского и финансового учета.

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

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

Посмотрим на пример кода такой функции:


Функция ПолучитьФорматированноеЧисло(Значение) Экспорт
    
    Если Не ЗначениеЗаполнено(Значение) Или Не ТипЗнч(Значение) = Тип("Число") Тогда
        Возврат "0";
    КонецЕсли;
    
    Если Значение = Цел(Значение) Тогда
        Возврат Формат(Значение, "ЧДЦ=0");
    Иначе
        Возврат Формат(Значение, "ЧДЦ=2");
    КонецЕсли;
    
КонецФункции

После создания функции ее можно вызвать прямо в схеме компоновки данных. В поле «Выражение представления» для нужного числового реквизита укажите путь к этой функции:

ИмяВашегоОбщегоМодуля.ПолучитьФорматированноеЧисло(МоеЧисло)

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

Резюме

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

← На главную