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