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

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

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

Выясним причину проблемы и ограничения платформы

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

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


&НаКлиенте
Процедура РабочееМестоОбработкаВыбора(Элемент, ВыбранноеЗначение, ДополнительныеДанные, ВыборДобавлением, СтандартнаяОбработка)
    Наименование = РабочиеМеста.НайтиСтроки(Новый Структура("УИДРабочегоМеста", ВыбранноеЗначение))[0].РабочееМесто;
    РабочееМесто.Добавить(ВыбранноеЗначение, Наименование);
КонецПроцедуры

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

Также важно помнить, что обработчик ОбработкаПолученияПредставления здесь не поможет, так как он работает только для ссылочных типов (справочники, документы и т.д.), но не для строк.

Проанализируем проверенные способы решения этой задачи, которые не ломают стандартные механизмы 1С.

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

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

Способ 2: Разделение отображения и скрытого хранения (Теневой реквизит)

Если по каким-то причинам использовать ссылки невозможно и необходимо работать именно со строковыми УИДами, разберем по шагам создание "теневой" архитектуры. Нам потребуется отказаться от стандартного выпадающего списка у поля ввода.

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

Способ 3: Использование отдельной формы подбора

Вместо выпадающего списка можно пойти путем программного открытия отдельной формы подбора. Это может быть стандартная форма выбора справочника или специально созданная вами форма с таблицей значений или динамическим списком. Главное условие — передать при открытии параметр МножественныйВыбор = Истина.

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

Способ 4: Использование новых возможностей платформы (начиная с версии 8.3.23)

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

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

← На главную