09.12.2009

Как в форме списка показать изображение товара?

Зачастую возникает задача в форме списка показать картинку, соответствующую выделенному элементу списка. Например, изображение товара, загруженное пользователем.

Чтобы вывести картинку в поле формы типа Картинка, нужно получить навигационную ссылку на реквизит объекта, хранящий данные картинки, методом глобального контекста ПолучитьНавигационнуюСсылку(), и записать ее в строковой реквизит формы, связанный с полем картинки в форме.

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

Рассмотрим пример. Допустим, существует справочник Номенклатура, с реквизитом ДанныеФайлаКартинки (типа ХранилищеЗначения), содержащим данные картинки.

Создадим форму списка справочника Номенклатура.

Добавим в форму реквизит АдресКартинки (типа Строка), в котором будет храниться навигационная ссылка на реквизит справочника ДанныеФайлаКартинки.

Перетащим реквизит АдресКартинки в дерево элементов формы.

Установим свойства элемента: Имя - Картинка, Вид - Поле картинки, ПоложениеЗаголовка - Нет и Видимость - Нет.

Таким образом, мы создали в форме поле картинки, связанное с реквизитом АдресКартинки.

Затем добавим в форму еще один реквизит ОтображатьКартинки типа Булево.

Перетащим его в дерево элементов формы и поместим над полем картинки. Вид поля платформа установит автоматически - Поле флажка. Это нас устраивает, так как в зависимости от значения этого флажка мы будем показывать или скрывать картинку элемента номенклатуры.

 

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

Копировать в буфер обмена

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    Если ОтображатьКартинки Тогда
        АдресКартинки = ПолучитьНавигационнуюСсылку(Элементы.Список.ТекущаяСтрока, "ДанныеФайлаКартинки");
    КонецЕсли;
КонецПроцедуры

Данный код выполняется при навигации по списку. В этом обработчике, в случае если значения реквизита ОтображатьКартинки - Истина (флажок ОтображатьКартинки - включен), с помощью метода ПолучитьНавигационнуюСсылку() реквизиту АдресКартинки присваивается навигационная ссылка на реквизит ДанныеФайлаКартинки и картинка отображается в форме.

В первом параметре метода ПолучитьНавигационнуюСсылку() передается ссылка на элемент справочника - Элементы.Список.ТекущаяСтрока, а во втором - имя реквизита.

После этого создадим обработчик события ПриИзменении для поля формы вида Поле флажка - ОтображатьКартинки. Заполним обработчик следующим образом:

Копировать в буфер обмена

&НаКлиенте
Процедура ОтображатьКартинкиПриИзменении(Элемент)
    Если ОтображатьКартинки Тогда
        АдресКартинки = ПолучитьНавигационнуюСсылку(Элементы.Список.ТекущаяСтрока, "ДанныеФайлаКартинки");
        Элементы.Картинка.Видимость = Истина;
    Иначе
        Элементы.Картинка.Видимость = Ложь;
    КонецЕсли;
КонецПроцедуры

Данный код выполняется при включении/выключении флажка ОтображатьКартинки. В этом обработчике в зависимости от значения реквизита ОтображатьКартинки устанавливается видимость элемента формы Картинка, отображающем картинку элемента номенклатуры. В случае видимости картинки с помощью метода ПолучитьНавигационнуюСсылку() реквизиту АдресКартинки присваивается навигационная ссылка на реквизит ДанныеФайлаКартинки и картинка отображается в форме.

Изначально флажок ОтображатьКартинки выключен из соображений эффективности, и картинка в форме не видна. Но если его включить, форма списка примет следующий вид.

 

Демонстрационный пример находится в каталоге 1CITS/EXE/FAQ/ИзображениеТовараВФормеСписка.dt. Пример выполнен на версии платформы 8.2.9.356.

Скачать демонстрационный пример

Подробнее об использовании метода ПолучитьНавигационнуюСсылку() можно прочитать в синтакс-помощнике: Глобальный контекст - Прочие процедуры и функции.