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