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

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

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

Разбор причины проблемы: почему «Список выбора» не всегда работает сам по себе

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

Поскольку типом данных колонки в ТаблицаЗначений является Число, платформа пытается отрисовать именно число. Если в списке выбора числу 0 соответствует текст «Арифметическое», то в режиме просмотра платформа увидит «0». А если у поля не задан специальный формат, то нулевые значения могут и вовсе не отображаться (скрываться), что создает иллюзию пустой ячейки. Выясним, как обойти это ограничение платформы.

Решение 1: Использование условного оформления формы (рекомендуемый метод)

Этот способ является наиболее универсальным и «чистым» с точки зрения архитектуры управляемого интерфейса, так как он не требует изменения типов данных в запросах или базе данных. Мы оставляем в колонке числа (0, 1, 2), но визуально подменяем их текстом.

Разберем по шагам настройку условного оформления:

  1. Перейдем на закладку «Условное оформление» в редакторе формы.
  2. Создадим новое правило оформления.
  3. В поле «Оформление» выберем параметр Текст. Именно здесь мы прописываем то слово, которое должен видеть пользователь. Например, «Арифметическое».
  4. В поле «Условие» укажем: Объект.ТвояТаблица.ВидОкругления Равно 0.
  5. В поле «Оформляемые поля» выберем колонку ВидОкругления.
  6. Повторим эти действия для всех остальных значений (для 1 — «Всегда вверх», для 2 — «Всегда вниз»).

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

Решение 2: Переход на использование перечислений

Проанализируем ситуацию: если мы используем фиксированный набор значений (0, 1, 2), то с точки зрения проектирования системы это классический случай для объекта метаданных Перечисление. Если данные в запросе можно привести к типу перечисления, это решит проблему отображения автоматически.

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


// Пример преобразования числа в перечисление при заполнении ТЗ
Для Каждого СтрокаТЗ Из ТаблицаДанных Цикл
    Если СтрокаТЗ.ВидОкругленияЧислом = 0 Тогда
        СтрокаТЗ.ВидОкругления = Перечисления.МетодыОкругления.Арифметическое;
    ИначеЕсли СтрокаТЗ.ВидОкругленияЧислом = 1 Тогда
        СтрокаТЗ.ВидОкругления = Перечисления.МетодыОкругления.ВсегдаВверх;
    // и так далее
    КонецЕсли;
КонецЦикла;

Когда тип колонки — ПеречислениеСсылка, платформа сама заботится о том, чтобы пользователь видел синонимы значений, а выбор из списка строится автоматически. При сохранении данных в базу можно выполнить обратную конвертацию, используя метод Перечисления.МетодыОкругления.Индекс(Значение).

Решение 3: Свойство «Формат» (для простых случаев с нулем)

Если проблема только в том, что не отображается именно нулевое значение (а 1 и 2 отображаются как цифры), можно воспользоваться свойством Формат. В строке формата можно указать параметр ЧН='Текст для нуля'.

Рассмотрим пример строки формата:

ЧЦ=1; ЧН=Арифметическое

В этом случае платформа вместо пустого поля или нуля всегда будет выводить слово «Арифметическое». Однако, как было замечено в обсуждении, этот метод не позволяет задать разные текстовые представления для единицы или двойки — формат в 1С не является полноценным инструментом подстановки слов для разных чисел.

Решение 4: Паттерн «Виртуальная колонка» (Число + Строка)

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

  1. ВидОкругления (тип Число) — скрыта от пользователя, используется для логики и запросов.
  2. ВидОкругленияПредставление (тип Строка) — выведена на форму, именно с ней взаимодействует пользователь.

При изменении строковой колонки мы программно обновляем числовую:


&НаКлиенте
Процедура ТаблицаВидОкругленияПредставлениеПриИзменении(Элемент)
    ТекущаяСтрока = Элементы.Таблица.ТекущиеДанные;
    Если ТекущаяСтрока.ВидОкругленияПредставление = "Арифметическое" Тогда
        ТекущаяСтрока.ВидОкругления = 0;
    ИначеЕсли ТекущаяСтрока.ВидОкругленияПредставление = "Всегда вверх" Тогда
        ТекущаяСтрока.ВидОкругления = 1;
    КонецЕсли;
КонецПроцедуры

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

Выясним причину выбора конкретного метода

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

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

← На главную