При разработке печатных форм и отчетов в 1С:Предприятии часто возникает задача сделать вывод чисел (особенно цен и сумм) максимально удобным для восприятия. Стандарт бухгалтерского учета обычно требует отображения двух знаков после запятой (копеек), например: 123,00 или 123,45. Однако в некоторых случаях, для предотвращения погрешностей при расчетах, цена в документе может содержать 3 или 4 знака. Если задать в макете жесткий формат с 4 знаками, то обычные цены превратятся в 123,0000, что создает лишний визуальный шум. Разберем, как реализовать «умный» формат, который показывает 2 знака, если дробная часть простая, и расширяется до 4 знаков при необходимости.
Проанализируем работу стандартного конструктора форматной строки в 1С. Параметр ЧДЦ (Число десятичных цифр) работает статично. Если мы установим ЧДЦ=2, платформа принудительно округлит число до сотых. Если установим ЧДЦ=4, платформа добавит недостающие нули до четвертого знака. В отличие от языков программирования типа C# или масок в Excel (где используется символ # для необязательных знаков), встроенный формат 1С не поддерживает условие «минимум 2, максимум 4 знака» внутри одной строки.
Рассмотрим подробнее способы обхода этого ограничения, которые позволяют добиться нужного результата без написания громоздкого кода в модулях объектов.
Если ваша печатная форма или отчет строятся на базе Системы компоновки данных, задачу можно решить через Условное оформление. Этот метод считается наиболее «чистым», так как он не требует внесения изменений в запрос или программный код.
Выполним следующие шаги:
ЧДЦ=2.
(Цена * 100) % 1 = 0
ЧДЦ=4.
(Цена * 100) % 1 <> 0
Таким образом, система будет динамически применять нужную точность вывода для каждой строки отчета.
В современных версиях платформы 8.3 в обычных табличных документах (макетах) для ячеек с типом Параметр появилось мощное свойство — Выражение. Это позволяет нам описать логику форматирования непосредственно в свойствах ячейки макета, не используя модуль менеджера или модуль объекта.
Разберем по шагам, как это настроить:
Параметр.
Выбор
Когда (Цена * 100) = Целое(Цена * 100)
Тогда Формат(Цена, "ЧДЦ=2; ЧН=0,00")
Иначе Формат(Цена, "ЧДЦ=4; ЧН=0,00")
Конец
Важный нюанс: использование параметра ЧН=0,00 гарантирует, что если цена будет равна нулю, пользователь увидит 0,00, а не пустую ячейку, что критично для финансовых документов.
Существует еще один вариант, который упоминали в обсуждении: полностью убрать формат из ячейки макета. Если в свойствах ячейки не задана форматная строка, 1С выводит число «как есть» — со всеми значащими цифрами, которые хранятся в базе данных.
Посмотрим на результат:
123, выведется 123 (без нулей).123.4, выведется 123,4.123.4567, выведется 123,4567.Этот метод прост, но он не решает задачу автора полностью, так как пропадают обязательные два нуля для целых чисел. Бухгалтерские стандарты обычно требуют единообразия, поэтому 123,00 выглядит предпочтительнее, чем просто 123. Поэтому данный способ рекомендуем использовать только в черновых отчетах или внутренних ведомостях.
Мы выяснили причину, по которой стандартная маска формата не справляется с задачей: платформа 1С ориентирована на строгую типизацию вывода. Для достижения «плавающей» точности в макете наиболее профессиональным решением будет использование Условного оформления в СКД или Выражения параметра в макете 8.3.
Совет: При работе с дробными числами всегда учитывайте возможные ошибки плавающей запятой. При проверке условий (например, умножение на 100) старайтесь использовать функцию Окр(), чтобы избежать ситуаций, когда число 0.00000000001 из-за особенностей хранения в памяти не будет распознано как ноль.
Выбирая между предложенными методами, ориентируйтесь на то, как строится ваша печатная форма. Если через универсальный механизм печати БСП или СКД — используйте условное оформление. Если это классический макет с ручным заполнением параметров — используйте свойство Выражение.