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

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

При разработке управляемых форм часто возникает задача ограничить ввод реквизита табличной части фиксированным набором значений. Например, в реквизите с числовым типом данных нужно хранить код состояния (0, 1, 2), но пользователю при выборе и просмотре необходимо показывать понятные текстовые надписи («Новый», «В работе», «Завершен»).

Разработчик настраивает у поля таблицы свойства: устанавливает флаг РежимВыбораИзСписка, добавляет кнопку выпадающего списка и заполняет коллекцию СписокВыбора парами «Значение — Представление». Однако после выбора значения ячейка теряет фокус, и в таблице отображается либо числовой код, либо пустое поле, хотя в шапке документа аналогичная настройка работает штатно.

Разберем причины такого поведения платформы 1С:Предприятие 8.3 и рассмотрим практические способы настройки корректного отображения представлений.

Выясним, почему одинаковая настройка поля ввода ведет себя по-разному в шапке и в строках таблицы:

  1. Элементы шапки формы: одиночное поле ввода напрямую связано с реквизитом объекта или формы. Платформа постоянно сопоставляет текущее значение со списком выбора и отображает его синоним (представление).
  2. Колонки табличной части: в целях оптимизации скорости отрисовки больших списков и таблиц ячейки вне режима редактирования отображают «сырые» данные напрямую из строки. Коллекция СписокВыбора активируется платформой исключительно в момент перехода ячейки в режим редактирования. Как только пользователь завершает ввод и переходит к другой ячейке, отображение возвращается к исходному сохраненному значению.

Для реализации задуманного интерфейса можно применить несколько подходов. Проанализируем каждый из них подробно.

Вариант 1. Настройка условного оформления формы

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

Правила можно настроить интерактивно в свойствах формы на закладке Условное оформление, либо сформировать программно в обработчике ПриСозданииНаСервере. Рассмотрим программный способ, который автоматически переносит представления из списка выбора поля в оформление:


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

Такой подход избавляет от дублирования настроек: при изменении списка выбора в конфигураторе правила оформления сформируются автоматически при открытии формы.

Вариант 2. Использование объекта метаданных «Перечисление»

Хранение фиксированных состояний в виде числовых кодов с ручной подменой представлений считается устаревшей практикой. Если набор вариантов известен заранее и не меняется динамически пользователем в режиме 1С:Предприятие, правильнее использовать объект метаданных Перечисление.

Разберем шаги перехода на перечисление:

  1. В дереве метаданных создаем объект ПеречислениеСсылка.СтатусыСтрок и добавляем необходимые значения с синонимами.
  2. У реквизита табличной части меняем тип данных с Число на созданное перечисление.
  3. Размещаем поле на форме документа.

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

Вариант 3. Хранение текстового значения

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

← На главную