Как отобразить представление вместо значения при выборе из списка в табличной части?

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

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

Способ 1: Архитектурный подход с двумя реквизитами

Этот метод считается наиболее надежным и универсальным. Вместо того чтобы пытаться обмануть платформу, мы разделяем данные на две колонки: ту, где храним «идентификатор» (код/значение), и ту, где храним «представление» (строку, которую видит пользователь).

  1. Добавьте в табличную часть два реквизита: Значение (тип — идентификатор) и Представление (тип — строка).
  2. На форме для поля Представление установите РежимВыбораИзСписка в Истина и заполните список значений.
  3. В обработчике события ПриИзменении поля Представление напишите код, который будет транслировать выбор пользователя в структуру данных:

Процедура ТЧПредставлениеПриИзменении(Элемент)
    СтрокаТаблицы = Элементы.ТЧ.ТекущиеДанные;
    СтрокаТаблицы.Значение = СтрокаТаблицы.Представление;
    СтрокаТаблицы.Представление = Элемент.ТекстРедактирования;
КонецПроцедуры

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

Способ 2: Программное условное оформление

Если вы не хотите менять структуру данных (добавлять лишние колонки), можно использовать УсловноеОформление. Суть метода заключается в том, чтобы заставить систему подменять отображаемый текст в ячейке на основании значения, хранящегося в ней. Для упрощения этой задачи можно использовать конструктор кода условного оформления для табличных частей, который автоматически формирует необходимый программный код.

Этот код выполняется на сервере и для каждого элемента списка выбора создает правило оформления:


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

Важно: Этот способ очень изящен, так как сохраняет исходную логику работы с данными, но при большом количестве элементов списка (сотни и тысячи) стоит быть осторожным с производительностью формы.

Способ 3: Настройка свойств элемента

Иногда достаточно правильно настроить свойства самой колонки в конфигураторе. Попробуйте отключить РасширенноеРедактирование и активировать КнопкуВыпадающегоСписка. Однако учитывайте, что этот метод работает стабильно далеко не для всех типов данных и версий платформы. Если в вашем списке выбора есть повторяющиеся значения или сложные типы данных, платформа может некорректно сопоставлять выбор пользователя с представлением.

Советы по улучшению UX

Чтобы поле не «пустело» в момент выбора до того, как сработает обновление данных, используйте свойство ПодсказкаВвода. В событиях НачалоВыбора и ПриИзменении вы можете записывать выбранный пользователем текст в Элемент.ПодсказкаВвода. Это создаст визуальную плавность интерфейса: пользователь сразу увидит выбранное значение, даже если обновление самой ячейки табличной части требует завершения транзакции или пересчета строки.

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

← На главную