Две строки собственного реквизита ТаблицаЗначений отображаются как метки. Значение, подпись и встроенная картинка имеют разные пути к данным.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
Создайте отдельную учебную внешнюю обработку с пустой управляемой основной формой. Каждую задачу запускайте в своей копии формы.
Не добавляйте вручную реквизит Метки, поле ПолеМеток и команду УчебноеДействие: их создаст код.
В свойствах формы → События свяжите ПриСозданииНаСервере с одноимённой процедурой. Вставьте весь модуль, включая клиентские и серверные процедуры.
Сохраните учебную EPF и откройте через Файл → Открыть в тонком или толстом клиенте Windows. Рабочие данные не читаются и не записываются.
Картинка 32×32 полностью включена в код через Base64. Не нужны файл макета, скачивание или доступ к каталогу картинок.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Новые = Новый Массив;
Новые.Добавить(Новый РеквизитФормы("Метки", Новый ОписаниеТипов("ТаблицаЗначений")));
Новые.Добавить(Новый РеквизитФормы("Значение", Новый ОписаниеТипов("Строка"), "Метки"));
Новые.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), "Метки"));
Новые.Добавить(Новый РеквизитФормы("Картинка", Новый ОписаниеТипов("Картинка"), "Метки"));
ЭтаФорма.ИзменитьРеквизиты(Новые);
Данные = Новый ТаблицаЗначений;
Данные.Колонки.Добавить("Значение", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка"));
Байты = Base64Значение("iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAArklEQVR4nO3VOxKAIAxF0SzEtbgk99/FRhuE8F4+0lCkc3LPCDOIqsrKWRrfADfguE7tTSlgFI1iSuIMoiyOIkrjD8BE/BE3/0R5/AWMEFXn/om7Ae0SbxwGWOcYiY8QMGCGIL7jAMhyNO4GTC4We0w+QC/GxsOANsrGIQCLiMTDACaeDmDjFCDrPZjFTUAmwmqYgKSHSUKACALZDQE8CHQvDEAwnl0uQOZsgKwG3AxgSxA9ZssYAAAAAElFTkSuQmCC");
УчебнаяКартинка = Новый Картинка(Байты);
Метка = Данные.Добавить();
Метка.Значение = "book";
Метка.Представление = "Книга";
Метка.Картинка = УчебнаяКартинка;
Метка = Данные.Добавить();
Метка.Значение = "pen";
Метка.Представление = "Ручка";
Метка.Картинка = УчебнаяКартинка;
ЭтаФорма.ЗначениеВРеквизитФормы(Данные, "Метки");
Поле = Элементы.Добавить("ПолеМеток", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "Метки";
Поле.Заголовок = "Две собственные метки";
Поле.ПутьКДаннымЗначенияМножественногоЗначения = "Метки.Значение";
Поле.ПутьКДаннымПредставленияМножественногоЗначения = "Метки.Представление";
Поле.ПутьКДаннымКартинкиМножественногоЗначения = "Метки.Картинка";
Поле.РасширенноеРедактированиеМножественныхЗначений = Ложь;
Поле.ГиперссылкаМножественныхЗначений = Ложь;
Поле.ЦветТекстаМножественныхЗначений = Новый Цвет(24, 40, 60);
Поле.ЦветФонаМножественныхЗначений = Новый Цвет(235, 244, 255);
Поле.ШрифтМножественныхЗначений = Новый Шрифт(Поле.ШрифтМножественныхЗначений, , 11, Ложь);
Поле.Ширина = 60;
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Проверить значения и выделение";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Если Метки.Количество() <> 2 Тогда
ВызватьИсключение "Ожидались две собственные метки";
КонецЕсли;
Книга = Метки[0];
Ручка = Метки[1];
Сообщить(Книга.Значение = "book" И Книга.Представление = "Книга");
Сообщить(Ручка.Значение = "pen" И Ручка.Представление = "Ручка");
Сообщить(ТипЗнч(Книга.Картинка) = Тип("Картинка"));
Поле = Элементы.ПолеМеток;
Сообщить("Размер картинки из настройки: " + Строка(Поле.РазмерКартинкиМножественногоЗначения));
Сообщить("Фигура картинки из настройки: " + Строка(Поле.ФигураКартинкиМножественногоЗначения));
Идентификаторы = Новый Массив;
Идентификаторы.Добавить(Книга.ПолучитьИдентификатор());
Поле.УстановитьВыделенныеМножественныеЗначения(Идентификаторы);
Выделенные = Поле.ПолучитьВыделенныеМножественныеЗначения();
Сообщить(Выделенные.Количество() = 1 И Выделенные.Найти(Книга.ПолучитьИдентификатор()) <> Неопределено);
Сообщить(Метки.Количество() = 2);
КонецПроцедурыРазбор по шагам
Сервер создаёт ТаблицаЗначений с колонками Значение, Представление и Картинка и переносит её в реквизит формы.
В клиентском модуле реквизит представлен ДанныеФормыКоллекция. Пути ко всем трём колонкам задаются на сервере.
Картинки находятся непосредственно в колонке типа Картинка: здесь нет индексов в наборе картинок и сетевых адресов.
РасширенноеРедактированиеМножественныхЗначений выключено: для коллекции строки показываются без интерактивного редактирования через поле.
Цвета относятся к оформлению. РазмерКартинкиМножественногоЗначения и ФигураКартинкиМножественногоЗначения только читаются: установленная справка не разрешает программную запись.
ШрифтМножественныхЗначений и РазмерКартинкиМножественногоЗначения не применяются в интерфейсе Версия 8.5.
После проверки двух строк выбираем Книга по идентификатору строки формы, не по её индексу.
Как проверить результат
Пять сообщений Истина и две диагностические строки о размере/фигуре картинки; две собственные метки сохраняются после выделения.
Подписи Книга/Ручка отличаются от значений book/pen. Фактический внешний вид проверьте в своей теме клиента.
Ожидаемый результат
Разделены источник коллекции, значение метки, представление, картинка и выделение.
На что обратить внимание
Индекс 0 используется только после проверки количества для получения известной собственной строки; в метод выделения передаётся её идентификатор.
Пути множественных значений доступны на сервере; не присваивайте их в клиентской команде.
Не присваивайте значения свойствам размера и фигуры картинки: для этих свойств документировано только чтение.
Установка шрифта не подтверждает, что он будет применён в интерфейсе 8.5 или любой теме.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.