1С:Предприятие 8
Система программ

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

25.06.2012

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

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

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

Рассмотрим пример.

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

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

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

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

Установим свойства элемента: 

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

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

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

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

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

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

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

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

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

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

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

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

  

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