новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Вывод изображения на управляемую форму

  • Добавить свою публикацию
  • для этого требуется регистрация

Небольшая задача

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

Изображение

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

Как это было раньше

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

Изображение

 
 

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

 

И, вуаля! При открытии отображается прикрепеленной ранее фото!

Изображение

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

На управляемой форме

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

 

Для отображения изображения для начала добавим строковой реквизит формы "ФотоСотрудника", для которого на форме создадим элемент с типом "Поле картинки".

Изображение

Теперь в обработчике формы "ПриСозданииНаСервере" добавим следующий программный код:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ОбновитьИзображение();
	
КонецПроцедуры

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

Здесь методом "ПоместитьВоВременноеХранилище" мы помещаем двоичные данные из реквизита "Фото" элемента справочника во временное хранилище. Метод возвращает адрес помещенных данных во временном хранилище в виде строки. Подробнее о временном хранилище, его назначении и примеров работы с ним Вы можете прочитать по ссылке.

 

В результате при открытии элемента мы увидим следующее:

Изображение

На этом задача полностью решена!

Задача решена

Задачу мы решили, но есть куда оптимизировать! Файл лучше вынести в отдельную таблицу, чтобы время открытия элемента справочника не возросло при прикреплении изображений больших размеров. Но оптимизация уже выходит за рамки статьи.

 

Скачать тестовую конфигурацию с примером из статьи.

 
0
Читайте также
Разработки
Прайс-лист с картинками для УТ 11 Упр.
Прайс-лист для УТ 11, выводит остатки
Автоматическое заполнение ЗСО
Обработка для заполнения Зачисление Свойств Объектов
Программка рисования фракталов мандельброта
"Как нарисовать картинки фракталов мандельброта"
Еще от автора
≡ к списку статей