====== Картинки в управляемых формах ====== Картинка - это двоичные данные, и в базе они хранятся в виде реквизитов с типом [[http://howknow1c.ru/jazyk-1s/hranilishhe-znachenij-1s.html|ХранилищеЗначения]]. Значения такого типа недоступны на клиенте. Поэтому не совсем очевидно, как же с ними работать. На самом деле всё очень просто, разработчики платформы придумали изящное решение данной проблемы. Между сервером и клиентом двоичные данные передаются через [[http://1s-portal.ru/index.php/stati/common-questions/1-project/110-vremennoe-hranilishe-v-1s-82.html|временное хранилище]]. Точнее, передаются не сами данные, а специальный идентификатор, имеющий тип [[1c:база:примитивные_типы_данных#Строка|Строка]]. Строки прекрасно передаются от клиента к серверу и обратно. Идея работы с картинками в управляемых формах заключается в следующем. Создаётся реквизит формы строкового типа. На форму помещается поле, у которого свойство ''Вид'' равно ''Картинка'', связанный с ранее созданным реквизитом формы. С этого момента если в созданный реквизит поместить тот самый идентификатор, платформа его распознает, загрузит картинку и отобразит её на форме. Никаких дополнительных усилий со стороны программиста предпринимать не требуется. А сам реквизит вполне можно использовать для доступа к сохранённому во временном хранилище изображению как на стороне клиента, так и на сервере. Заполняется реквизит обычно в обработчике события ''ПриСозданииНаСервере''. Вот пример, когда само изображение хранится в реквизите объекта под названием ''Изображение'': &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ЗагруженныйФайл = ПоместитьВоВременноеХранилище(Объект.Ссылка.Изображение.Получить(), ЭтаФорма.УникальныйИдентификатор); КонецПроцедуры Здесь мы сохраняем картинку из базы данных во временном хранилище и запоминаем полученный идентификатор в реквизите формы ''ЗагруженныйФайл''. Разумеется, реквизит можно назвать как угодно. Изменить картинку несложно - достаточно просто записать в реквизит формы новый идентификатор картинки. Вот пример того, как на клиенте можно загрузить картинку из указанного файла: ВыбранноеИзображение = Новый Картинка(ИмяФайла, Ложь); ЗагруженныйФайл = ПоместитьВоВременноеХранилище(ВыбранноеИзображение, ЭтаФорма.УникальныйИдентификатор); ЭтаФорма.Модифицированность = Истина; Здесь мы загружаем картинку стандартным способом - соответствующим конструктором объекта типа [[1c:общие:Картинка|Картинка]]. Далее, помещаем её во временное хранилище и запоминаем идентификатор в реквизите формы. Последняя строка нужна если при замене картинки требуется устанавливать флаг изменения в форме. Как вариант - можно установить свойство "Сохраняемые данные" реквизита формы. Если изображение хранится в основном объекте формы, то при записи объекта необходимо записать и картинку. Самое лучшее место для этого - событие ''ПриЗаписиНаСервере''. В нём есть доступ ко всем необходимым данным: &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если ЗначениеЗаполнено(ЗагруженныйФайл) Тогда ТекущийОбъект.Изображение = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(ЗагруженныйФайл)); ТекущийОбъект.Записать(); КонецЕсли; КонецПроцедуры Здесь мы получаем данные из временного хранилища, помещаем их в реквизит типа [[1c:общие:ХранилищеЗначения|ХранилищеЗначения]] с именем ''Изображение''. **Не забываем записать объект!** Приведённый пример максимально упрощён, он записывает картинку даже если она не менялась. В реальном коде лучше добавить признак изменения и соответствующие проверки. Если картинка хранится в другом объекте, код будет аналогичным, только добавится строка с получением другого объекта. ===== См. также ===== [[1c:общие:формы|Формы]], [[1c:общие:ХранилищеЗначения|ХранилищеЗначения (тип)]], [[1c:общие:временное хранилище|работа с временным хранилищем]], [[1c:общие:Картинка|Картинка (тип)]]. [[http://1clancer.ru/article/opasnost_v_rekvizite_s_tipom_khranilischeznachenij_793|Картинки и производительность]] Официальная документация: [[http://its.1c.ru/db/v836doc/bookmark/dev/TI000000803|Глава 21. Механизм временного хранилища, работа с файлами и картинками]]