При разработке интерфейсов в 1С (особенно в конфигурациях на обычных формах, таких как УПП или КА 1.1) разработчики часто сталкиваются с эстетическим требованием заказчика: убрать «лишние» нули в дробной части числа. Например, если в конфигураторе для реквизита установлена точность 3 знака, то число 1.5 будет отображаться как 1,500. С точки зрения пользователя это может загромождать форму. В этой статье мы подробно разберем, как сделать отображение чисел более лаконичным, сохраняя при этом точность расчетов.
Прежде всего проанализируем, почему платформа ведет себя именно так. Когда мы задаем тип данных Число с длиной 12 и точностью 3, 1С резервирует место под три десятичных знака. По умолчанию форматная строка настроена так, чтобы всегда заполнять эти разряды, даже если они равны нулю. Это гарантирует единообразие колонок в списках, но неудобно для полей ввода на форме элемента.
Рассмотрим наиболее правильный метод, который предусмотрен самой платформой 1С. В обычных формах у элемента управления ПолеВвода есть специфическое свойство, которое управляет отображением нулей.
ФиксДробнаяЧасть).Важное уточнение: этот метод сработает только в том случае, если в поле «Формат» (или «Формат редактирования») у вас не прописан жесткий параметр ЧДЦ (Число Десятичных Цифр). Если там указано ЧДЦ=3, платформа будет игнорировать настройку фиксации и все равно выведет три нуля. Чтобы нули ушли, очистите строку формата или убедитесь, что в ней нет принудительного указания точности.
Бывают ситуации, когда свойство ФиксДробнаяЧасть не помогает (например, если поле связано с данными, которые навязывают свой формат). В этом случае проанализируем ситуацию и применим динамическое изменение формата элемента при вводе данных. Нам понадобится обработчик события ОкончаниеВводаТекста или ПриИзменении.
Рассмотрим пример кода, который определяет количество значащих цифр после запятой и на лету меняет формат отображения:
Процедура ТестОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
Перем Ч;
Ч = 0;
// Циклом проверяем, меняется ли значение при округлении до разного количества знаков
Пока Ч < 3 Цикл // 3 - это максимальная точность вашего поля
Если Окр(Значение, Ч) = Значение Тогда
Прервать;
КонецЕсли;
Ч = Ч + 1;
КонецЦикла;
// Устанавливаем формат с вычисленным количеством знаков
Элемент.Формат = "ЧЦ=12; ЧДЦ=" + Строка(Ч);
КонецПроцедуры
В этом примере мы используем функцию Окр() (Округление). Если округленное до 0 знаков число равно исходному, значит, дробной части нет вовсе, и мы ставим ЧДЦ=0. Если нет — проверяем округление до 1 знака и так далее. Это позволяет превратить 1,500 в 1,5, а 1,550 в 1,55.
Если вы работаете в современном интерфейсе «Такси» или на управляемых формах, механизм аналогичен, но названия свойств немного отличаются. Выясним, как это работает в 1С 8.3 (где также доступна смена интерфейса пользователя: компактный или обычный):
В свойствах поля формы (путь к данным которого имеет тип Число) найдите группу «Оформление». Там находится свойство «Фиксация дробной части». Оно имеет два значения: «Фиксировать» и «Не фиксировать». Выберите «Не фиксировать».
Также в управляемых формах можно использовать параметр формата ЧС (Сдвиг), но для скрытия незначащих нулей лучше всего работает именно комбинация пустой точности в формате и отключенной фиксации дробной части. Проанализируем настройки формата:
ЧДЦ=3; ЧН=0; ЧГ=3,0 при отключенной фиксации дробной части будет автоматически скрывать нули.Иногда (крайне редко и обычно в печатных формах или специфических отчетах) требуется вообще уйти от числового типа при выводе. Посмотрим на пример функции Формат(), которая позволяет подготовить «красивое» число без нулей:
// Пример для формирования строкового представления без лишних нулей
СтрокаДляВывода = Формат(ЧисловоеЗначение, "ЧГ=0");
// Если "Фикс. дробная часть" не задана в глобальных настройках,
// 1С по умолчанию не выводит лишние нули в функции Формат().
Однако помните, что для поля ввода на форме этот метод плох тем, что он превращает число в строку, и пользователь не сможет нормально использовать калькулятор 1С или агрегатные функции в списках.
Проанализировав все доступные методы, мы рекомендуем придерживаться следующей стратегии:
1,5), а при нажатии в поле — снова превращается в 1,500. Очистите оба этих свойства, чтобы настройки платформы вступили в силу.Таким образом, мы выяснили, что задача решается стандартными средствами 1С. Главное — помнить о приоритете настроек: параметры строки Формат (такие как ЧДЦ) всегда будут главнее, чем галочки в палитре свойств. Удачного программирования!