Как настроить динамическое количество знаков после запятой в макете 1С?

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

При разработке печатных форм и отчетов в 1С:Предприятии часто возникает задача сделать вывод чисел (особенно цен и сумм) максимально удобным для восприятия. Стандарт бухгалтерского учета обычно требует отображения двух знаков после запятой (копеек), например: 123,00 или 123,45. Однако в некоторых случаях, для предотвращения погрешностей при расчетах, цена в документе может содержать 3 или 4 знака. Если задать в макете жесткий формат с 4 знаками, то обычные цены превратятся в 123,0000, что создает лишний визуальный шум. Разберем, как реализовать «умный» формат, который показывает 2 знака, если дробная часть простая, и расширяется до 4 знаков при необходимости.

Проблема стандартной форматной строки

Проанализируем работу стандартного конструктора форматной строки в 1С. Параметр ЧДЦ (Число десятичных цифр) работает статично. Если мы установим ЧДЦ=2, платформа принудительно округлит число до сотых. Если установим ЧДЦ=4, платформа добавит недостающие нули до четвертого знака. В отличие от языков программирования типа C# или масок в Excel (где используется символ # для необязательных знаков), встроенный формат 1С не поддерживает условие «минимум 2, максимум 4 знака» внутри одной строки.

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

Способ 1. Использование системы компоновки данных (СКД)

Если ваша печатная форма или отчет строятся на базе Системы компоновки данных, задачу можно решить через Условное оформление. Этот метод считается наиболее «чистым», так как он не требует внесения изменений в запрос или программный код.

Выполним следующие шаги:

  1. Откроем вкладку Настройки в схеме компоновки данных.
  2. Перейдем на закладку Условное оформление.
  3. Добавим новый элемент оформления. В поле Оформление выберем параметр Формат и настроим его как ЧДЦ=2.
  4. В поле Условие пропишем логику, при которой число имеет не более 2 знаков. Это можно проверить через остаток от деления:
    
    (Цена * 100) % 1 = 0
    
    (Если цена, умноженная на 100, дает целое число, значит, знаков после запятой не более двух).
  5. Добавим второй элемент оформления. В поле Оформление установим Формат ЧДЦ=4.
  6. В поле Условие укажем обратное:
    
    (Цена * 100) % 1 <> 0
    

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

Способ 2. Свойство «Выражение» в параметрах макета (для платформы 8.3)

В современных версиях платформы 8.3 в обычных табличных документах (макетах) для ячеек с типом Параметр появилось мощное свойство — Выражение. Это позволяет нам описать логику форматирования непосредственно в свойствах ячейки макета, не используя модуль менеджера или модуль объекта.

Разберем по шагам, как это настроить:

  1. Выделим ячейку в макете, где выводится цена.
  2. В свойствах ячейки убедимся, что Заполнение установлено в значение Параметр.
  3. Найдем свойство Выражение и нажмем кнопку открытия (лупу).
  4. Введем выражение на языке выражений СКД. Проанализируем пример логики:
    
    Выбор 
        Когда (Цена * 100) = Целое(Цена * 100) 
        Тогда Формат(Цена, "ЧДЦ=2; ЧН=0,00") 
        Иначе Формат(Цена, "ЧДЦ=4; ЧН=0,00") 
    Конец
    

Важный нюанс: использование параметра ЧН=0,00 гарантирует, что если цена будет равна нулю, пользователь увидит 0,00, а не пустую ячейку, что критично для финансовых документов.

Способ 3. Отказ от жесткого формата (быстрый, но несовершенный)

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

Посмотрим на результат:

Этот метод прост, но он не решает задачу автора полностью, так как пропадают обязательные два нуля для целых чисел. Бухгалтерские стандарты обычно требуют единообразия, поэтому 123,00 выглядит предпочтительнее, чем просто 123. Поэтому данный способ рекомендуем использовать только в черновых отчетах или внутренних ведомостях.

Резюме и рекомендации

Мы выяснили причину, по которой стандартная маска формата не справляется с задачей: платформа 1С ориентирована на строгую типизацию вывода. Для достижения «плавающей» точности в макете наиболее профессиональным решением будет использование Условного оформления в СКД или Выражения параметра в макете 8.3.

Совет: При работе с дробными числами всегда учитывайте возможные ошибки плавающей запятой. При проверке условий (например, умножение на 100) старайтесь использовать функцию Окр(), чтобы избежать ситуаций, когда число 0.00000000001 из-за особенностей хранения в памяти не будет распознано как ноль.

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

← На главную