Как убрать незначащие нули справа в поле ввода числового типа в 1С?

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

При разработке интерфейсов в 1С (особенно в конфигурациях на обычных формах, таких как УПП или КА 1.1) разработчики часто сталкиваются с эстетическим требованием заказчика: убрать «лишние» нули в дробной части числа. Например, если в конфигураторе для реквизита установлена точность 3 знака, то число 1.5 будет отображаться как 1,500. С точки зрения пользователя это может загромождать форму. В этой статье мы подробно разберем, как сделать отображение чисел более лаконичным, сохраняя при этом точность расчетов.

Разберем причину появления лишних нулей

Прежде всего проанализируем, почему платформа ведет себя именно так. Когда мы задаем тип данных Число с длиной 12 и точностью 3, 1С резервирует место под три десятичных знака. По умолчанию форматная строка настроена так, чтобы всегда заполнять эти разряды, даже если они равны нулю. Это гарантирует единообразие колонок в списках, но неудобно для полей ввода на форме элемента.

Способ 1: Использование свойства «Фикс. дробная часть» (самый простой)

Рассмотрим наиболее правильный метод, который предусмотрен самой платформой 1С. В обычных формах у элемента управления ПолеВвода есть специфическое свойство, которое управляет отображением нулей.

  1. Откроем форму элемента в конфигураторе.
  2. Выделим нужное поле ввода и перейдем в палитру свойств (клавиша F4) или используйте редактор форм в режиме предприятия.
  3. Найдем флажок «Фикс. дробная часть» (в программном коде это свойство называется ФиксДробнаяЧасть).
  4. Снимем этот флажок.

Важное уточнение: этот метод сработает только в том случае, если в поле «Формат» (или «Формат редактирования») у вас не прописан жесткий параметр ЧДЦ (Число Десятичных Цифр). Если там указано ЧДЦ=3, платформа будет игнорировать настройку фиксации и все равно выведет три нуля. Чтобы нули ушли, очистите строку формата или убедитесь, что в ней нет принудительного указания точности.

Способ 2: Программное управление форматом через события

Бывают ситуации, когда свойство ФиксДробнаяЧасть не помогает (например, если поле связано с данными, которые навязывают свой формат). В этом случае проанализируем ситуацию и применим динамическое изменение формата элемента при вводе данных. Нам понадобится обработчик события ОкончаниеВводаТекста или ПриИзменении.

Рассмотрим пример кода, который определяет количество значащих цифр после запятой и на лету меняет формат отображения:


Процедура ТестОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
    
    Перем Ч;
    Ч = 0;
    
    // Циклом проверяем, меняется ли значение при округлении до разного количества знаков
    Пока Ч < 3 Цикл // 3 - это максимальная точность вашего поля
        Если Окр(Значение, Ч) = Значение Тогда
            Прервать;
        КонецЕсли;
        Ч = Ч + 1;
    КонецЦикла;
    
    // Устанавливаем формат с вычисленным количеством знаков
    Элемент.Формат = "ЧЦ=12; ЧДЦ=" + Строка(Ч);
    
КонецПроцедуры

В этом примере мы используем функцию Окр() (Округление). Если округленное до 0 знаков число равно исходному, значит, дробной части нет вовсе, и мы ставим ЧДЦ=0. Если нет — проверяем округление до 1 знака и так далее. Это позволяет превратить 1,500 в 1,5, а 1,550 в 1,55.

Способ 3: Особенности для управляемых форм (8.3)

Если вы работаете в современном интерфейсе «Такси» или на управляемых формах, механизм аналогичен, но названия свойств немного отличаются. Выясним, как это работает в 1С 8.3 (где также доступна смена интерфейса пользователя: компактный или обычный):

В свойствах поля формы (путь к данным которого имеет тип Число) найдите группу «Оформление». Там находится свойство «Фиксация дробной части». Оно имеет два значения: «Фиксировать» и «Не фиксировать». Выберите «Не фиксировать».

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

  1. Зайдите в настройку свойства «Формат».
  2. Убедитесь, что флаг «Максимальная точность» (ЧДЦ) установлен в нужное значение (например, 3), но не заполнено поле «Минимальная точность» (если бы оно было доступно в строке формата).
  3. В управляемых формах строка формата ЧДЦ=3; ЧН=0; ЧГ=3,0 при отключенной фиксации дробной части будет автоматически скрывать нули.

Способ 4: Использование строкового представления (Крайний случай)

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


// Пример для формирования строкового представления без лишних нулей
СтрокаДляВывода = Формат(ЧисловоеЗначение, "ЧГ=0"); 
// Если "Фикс. дробная часть" не задана в глобальных настройках, 
// 1С по умолчанию не выводит лишние нули в функции Формат().

Однако помните, что для поля ввода на форме этот метод плох тем, что он превращает число в строку, и пользователь не сможет нормально использовать калькулятор 1С или агрегатные функции в списках.

Рекомендации и итоги

Проанализировав все доступные методы, мы рекомендуем придерживаться следующей стратегии:

Таким образом, мы выяснили, что задача решается стандартными средствами 1С. Главное — помнить о приоритете настроек: параметры строки Формат (такие как ЧДЦ) всегда будут главнее, чем галочки в палитре свойств. Удачного программирования!

← На главную