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

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

В процессе разработки отчетов, печатных форм или интерфейсов в 1С часто возникает задача по аккуратному и читаемому отображению числовых данных. Стандартное форматирование не всегда подходит. Например, нам нужно, чтобы целые числа, такие как 15, выводились без дробной части, а не как "15,00", в то время как дробные числа, например 15,78924, должны быть округлены и представлены с двумя знаками после запятой, то есть как "15,79".

Рассмотрим два основных способа решения этой задачи: программный, с использованием встроенного языка 1С, и декларативный, через настройку условного оформления, который идеально подходит для отчетов в СКД и динамических списков.

Решение 1: Программный способ с функцией "Формат"

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

Основная логика

Для проверки, имеет ли число значимую дробную часть, можно сравнить его с его же целой частью, полученной с помощью функции Цел().

  1. Если исходное число равно своей целой части (например, 15,0000 равно Цел(15,0000)), то считаем его целым и выводим без дробных знаков.
  2. Если число не равно своей целой части (например, 15,789 не равно Цел(15,789)), значит, у него есть дробная часть, и мы форматируем его с двумя знаками после запятой.

Посмотрим на пример кода:

Предположим, у нас есть переменная ИсходноеЧисло, которую нужно правильно отформатировать.


Процедура ПримерФорматирования(ИсходноеЧисло)

    Перем Результат;

    // Проверяем, является ли число целым
    Если ИсходноеЧисло = Цел(ИсходноеЧисло) Тогда
        // Если число целое, выводим его без дробной части.
        // Параметр "ЧГ=0" отключает разделение групп разрядов (пробелы в тысячах).
        Результат = Формат(ИсходноеЧисло, "ЧГ=0");
    Иначе
        // Если у числа есть дробная часть, выводим с двумя знаками.
        // Функция Формат автоматически выполнит округление.
        // Параметр "ЧДЦ=2" означает "Число Десятичных Знаков = 2".
        Результат = Формат(ИсходноеЧисло, "ЧДЦ=2; ЧГ=0");
    КонецЕсли;

    Сообщить(Результат);

КонецПроцедуры

Разберем, как этот код обработает разные значения:

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


// Более строгая проверка для чисел, которые могут иметь незначительные "хвосты"
Если Окр(ИсходноеЧисло, 2) = Цел(ИсходноеЧисло) Тогда
    // Считаем число целым
    Результат = Формат(ИсходноеЧисло, "ЧГ=0");
Иначе
    // Считаем число дробным
    Результат = Формат(ИсходноеЧисло, "ЧДЦ=2; ЧГ=0");
КонецЕсли;

Этот вариант сначала округляет число до 2 знаков, а потом сравнивает с целой частью. Например, для 15.001 результат Окр(15.001, 2) будет 15.00, что равно Цел(15.001), и число будет отформатировано как "15".

Решение 2: Использование условного оформления

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

Рассмотрим настройку на примере отчета в СКД.

Разберем по шагам:

  1. Откройте настройки вашего отчета и перейдите на вкладку "Условное оформление".
  2. Нажмите кнопку "Добавить", чтобы создать новое правило оформления.
  3. На вкладке "Оформление" задайте формат, который должен применяться к дробным числам. Нажмите на ячейку "Формат" и в конструкторе форматной строки укажите точность 2 знака, или просто впишите строку ЧДЦ=2.
  4. Перейдите на вкладку "Условие". Здесь мы должны указать, при каких обстоятельствах будет срабатывать наше правило. Добавьте новое условие:
    • Левое значение: Поле, которое вы форматируете (например, Цена).
    • Вид сравнения: "Не равно".
    • Правое значение: Выражение на языке компоновки данных Цел(Цена).

    В итоге у вас получится условие вида: Цена <> Цел(Цена).

  5. Наконец, на вкладке "Оформляемые поля" укажите то поле, к которому будет применяться это правило. Обычно это то же поле, что и в условии (в нашем примере — Цена).

Как это работает?

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

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

Какой подход выбрать?

Выбор между программным методом и условным оформлением зависит от вашей задачи:

Оба метода эффективно решают исходную задачу, позволяя сделать представление числовых данных в вашей системе более аккуратным и удобным для восприятия.

← На главную