При разработке интерфейсов на платформе 1С:Предприятие 8.3 часто возникает задача сделать ввод данных максимально понятным для пользователя. Один из таких сценариев — отображение единиц измерения (например, "руб.", "кг", "шт.") прямо в поле ввода или в ячейке табличной части рядом с числом. Это позволяет избежать загромождения формы лишними колонками и делает таблицу более читаемой.
В этой статье мы подробно разберем несколько способов реализации этой задачи: от использования стандартных свойств платформы до обходных путей с применением программного кода и условного оформления. Мы проанализируем ситуацию, когда единицы измерения статичны, и когда они должны меняться динамически в зависимости от контекста строки.
Начнем с самого современного и элегантного метода. Начиная с версии платформы 8.3.10, у элементов формы типа ПолеВвода появилось замечательное свойство — Суффикс. Рассмотрим подробнее, как оно работает.
Суффикс — это строка текста, которая отображается в правой части поля ввода. Она не является частью значения (числа), не мешает вычислениям и не требует преобразования типов. Пользователь просто вводит число "100", а платформа сама дописывает " кг".
Разберем по шагам, как это настроить:
ПолеФормы в дереве элементов.руб.).Если нам нужно менять единицу измерения динамически (например, в табличной части для каждой строки своя единица), мы можем управлять этим свойством программно. Посмотрим на пример кода в обработчике события ПриАктивизацииСтроки:
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
// Устанавливаем суффикс динамически из реквизита строки
Элементы.СписокКоличество.Суффикс = " " + ТекущиеДанные.ЕдиницаИзмерения;
КонецЕсли;
КонецПроцедуры
Этот метод идеален для одиночных полей ввода, однако в табличных частях стоит учитывать, что при изменении суффикса у элемента колонки, он изменится визуально сразу во всех видимых строках. Если в таблице одновременно должны отображаться разные единицы измерения, перейдем к следующему методу.
Выясним причину, по которой стандартная форматная строка иногда не справляется. Форматная строка (Формат) хорошо работает для статических приписок, но плохо подходит для динамики. В таких случаях на помощь приходит Условное оформление формы.
С помощью условного оформления мы можем подменить отображаемый текст в ячейке, не меняя само значение. Проанализируем ситуацию: у нас есть колонка Цена и колонка Валюта. Мы хотим, чтобы в цене отображался символ валюты.
Рассмотрим алгоритм настройки:
Число + " руб.", так как платформа ожидает строковый литерал.Если же вариантов много, программно настроить условное оформление можно так:
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", "100 руб.");
// Здесь задается условие, при котором будет срабатывать подмена текста
ПолеУсловия = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ПолеУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Цена");
ПолеУсловия.ПравоеЗначение = 100;
Важный нюанс: использование параметра Текст в условном оформлении полностью перекрывает ввод данных в этой ячейке, если не настроить правильную видимость элементов. Поэтому данный способ чаще используется в списках Только просмотр.
Если использование суффикса невозможно (например, старая версия платформы), разберем способ визуальной группировки. Этот метод позволяет создать иллюзию единого поля.
Для этого выполним следующие действия:
Группа колонок (если в таблице) или Группа без отображения (если на самой форме).Горизонтальная.Поле ввода и второе поле — Поле надписи (декорация).В результате пользователь будет видеть число и единицу измерения рядом, как в одной ячейке. Это надежный метод, который работает на любых версиях платформы 1С v8.3.
Посмотрим на пример использования форматной строки, который обсуждался на форуме. Для числовых данных форматная строка задается параметром Формат. Хотя в стандартном конструкторе нет прямого поля "Суффикс", мы можем использовать параметры ЧН (текст для нулевого значения) или специфические настройки для представления числа.
Как отмечали участники обсуждения, параметр ЧФ (формат даты) не применим к числам. Для чисел формат строится иначе. Если нам нужно жестко закрепить приписку, мы можем использовать программную установку формата:
// Пример установки формата для поля "Сумма"
Элементы.Сумма.Формат = "ЧЦ=15; ЧДЦ=2; ЧН='0,00 руб.'; ЧГ=3";
Однако помните, что форматная строка в 1С для чисел предназначена в первую очередь для разделителей групп, точности и отображения нуля. Дописать произвольный текст (как в Excel через формат ячейки # "руб.") встроенный конструктор 1С позволяет не во всех случаях. Именно поэтому свойство Суффикс является предпочтительным.
Проанализируем ситуацию, когда нам нужно отображать в таблице сложную конструкцию, например: "150 шт. (по 10 кг)". В этом случае лучше всего использовать "виртуальную" колонку.
Разберем по шагам:
ПредставлениеКоличества (тип Строка).ПриИзменении числового поля или в обработчике ПриЧтенииНаСервере будем заполнять эту колонку программно:
&НаСервере
Процедура ЗаполнитьПредставленияКоличества()
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
СтрокаТЧ.ПредставлениеКоличества = Строка(СтрокаТЧ.Количество) + " " + СтрокаТЧ.ЕдиницаИзмерения;
КонецЦикла;
КонецПроцедуры
При этом, когда пользователь захочет отредактировать значение, мы можем программно менять видимость: скрывать строковую колонку и показывать числовое Поле ввода для ввода значения. Это часто используется в сложных складских системах.
Мы рассмотрели различные подходы к добавлению единиц измерения. Подведем итоги:
Суффикс. Это самый быстрый и правильный путь.Выбор метода зависит от конкретной бизнес-задачи и версии платформы, которую вы используете в своем проекте.