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