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

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

При разработке интерфейсов на платформе 1С:Предприятие 8.3 часто возникает задача сделать ввод данных максимально понятным для пользователя. Один из таких сценариев — отображение единиц измерения (например, "руб.", "кг", "шт.") прямо в поле ввода или в ячейке табличной части рядом с числом. Это позволяет избежать загромождения формы лишними колонками и делает таблицу более читаемой.

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

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

Начнем с самого современного и элегантного метода. Начиная с версии платформы 8.3.10, у элементов формы типа ПолеВвода появилось замечательное свойство — Суффикс. Рассмотрим подробнее, как оно работает.

Суффикс — это строка текста, которая отображается в правой части поля ввода. Она не является частью значения (числа), не мешает вычислениям и не требует преобразования типов. Пользователь просто вводит число "100", а платформа сама дописывает " кг".

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

  1. Выделим нужное ПолеФормы в дереве элементов.
  2. В палитре свойств найдем раздел Оформление.
  3. В поле Суффикс впишем необходимый текст (например, руб.).

Если нам нужно менять единицу измерения динамически (например, в табличной части для каждой строки своя единица), мы можем управлять этим свойством программно. Посмотрим на пример кода в обработчике события ПриАктивизацииСтроки:


&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    ТекущиеДанные = Элемент.ТекущиеДанные;
    Если ТекущиеДанные <> Неопределено Тогда
        // Устанавливаем суффикс динамически из реквизита строки
        Элементы.СписокКоличество.Суффикс = " " + ТекущиеДанные.ЕдиницаИзмерения;
    КонецЕсли;
КонецПроцедуры

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

Способ 2. Условное оформление и свойство «Текст»

Выясним причину, по которой стандартная форматная строка иногда не справляется. Форматная строка (Формат) хорошо работает для статических приписок, но плохо подходит для динамики. В таких случаях на помощь приходит Условное оформление формы.

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

Рассмотрим алгоритм настройки:

  1. Перейдем на закладку Условное оформление в редакторе формы.
  2. Добавим новое правило.
  3. В оформлении выберем параметр Текст. К сожалению, сюда нельзя напрямую вставить выражение типа Число + " руб.", так как платформа ожидает строковый литерал.
  4. Однако, если вариантов единиц измерения немного (например, только "руб." и "USD"), мы можем создать несколько правил оформления с разными условиями.

Если же вариантов много, программно настроить условное оформление можно так:


ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", "100 руб.");
// Здесь задается условие, при котором будет срабатывать подмена текста
ПолеУсловия = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ПолеУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Цена");
ПолеУсловия.ПравоеЗначение = 100;

Важный нюанс: использование параметра Текст в условном оформлении полностью перекрывает ввод данных в этой ячейке, если не настроить правильную видимость элементов. Поэтому данный способ чаще используется в списках Только просмотр.

Способ 3. Комбинированный метод «Поле ввода + Надпись»

Если использование суффикса невозможно (например, старая версия платформы), разберем способ визуальной группировки. Этот метод позволяет создать иллюзию единого поля.

Для этого выполним следующие действия:

  1. Создадим Группу элементов с видом Группа колонок (если в таблице) или Группа без отображения (если на самой форме).
  2. Установим группировку Горизонтальная.
  3. Внутрь группы поместим наше числовое Поле ввода и второе поле — Поле надписи (декорация).
  4. Для поля надписи привяжем путь к данным к реквизиту, содержащему название единицы измерения.
  5. Уберем у поля ввода границы с правой стороны, а у надписи — с левой (через свойства оформления), чтобы они визуально "слиплись".

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

Способ 4. Использование форматной строки (Format)

Посмотрим на пример использования форматной строки, который обсуждался на форуме. Для числовых данных форматная строка задается параметром Формат. Хотя в стандартном конструкторе нет прямого поля "Суффикс", мы можем использовать параметры ЧН (текст для нулевого значения) или специфические настройки для представления числа.

Как отмечали участники обсуждения, параметр ЧФ (формат даты) не применим к числам. Для чисел формат строится иначе. Если нам нужно жестко закрепить приписку, мы можем использовать программную установку формата:


// Пример установки формата для поля "Сумма"
Элементы.Сумма.Формат = "ЧЦ=15; ЧДЦ=2; ЧН='0,00 руб.'; ЧГ=3";

Однако помните, что форматная строка в 1С для чисел предназначена в первую очередь для разделителей групп, точности и отображения нуля. Дописать произвольный текст (как в Excel через формат ячейки # "руб.") встроенный конструктор 1С позволяет не во всех случаях. Именно поэтому свойство Суффикс является предпочтительным.

Способ 5. Вычисляемая строковая колонка

Проанализируем ситуацию, когда нам нужно отображать в таблице сложную конструкцию, например: "150 шт. (по 10 кг)". В этом случае лучше всего использовать "виртуальную" колонку.

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

  1. В реквизиты формы (не в объект!) добавим новую колонку ПредставлениеКоличества (тип Строка).
  2. Разместим её в таблице вместо основной колонки с числом.
  3. В событии ПриИзменении числового поля или в обработчике ПриЧтенииНаСервере будем заполнять эту колонку программно:

&НаСервере
Процедура ЗаполнитьПредставленияКоличества()
    Для Каждого СтрокаТЧ Из Объект.Товары Цикл
        СтрокаТЧ.ПредставлениеКоличества = Строка(СтрокаТЧ.Количество) + " " + СтрокаТЧ.ЕдиницаИзмерения;
    КонецЦикла;
КонецПроцедуры

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

Резюме

Мы рассмотрели различные подходы к добавлению единиц измерения. Подведем итоги:

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

← На главную