4.4 KiB
Задание к занятию "Двоичные данные"
Задача 1 Создать в справочнике Номенклатура возможность загрузки и хранения картинки.
Описание задачи
Добавить возможность загрузки и хранения картинки в справочнике Номенклатура.
Требования к результату
Конфигурация из предыдущих заданий, в которой реализована возможность загружать и просматривать из формы элемента номенклатуры.
Можно выбрать каталог и картинку для загрузки.
Процесс выполнения
-
Добавим реквизит "ПутьКартинки" с типом Хранилище значений в справочнике Номенклатура.
-
Добавим реквизит "ФайлКартинки" на форму элемента, укажем имя "ФайлКартинки" тип "Строка".
-
Добавим на событие Нажатие процедуру "ПутьКартинкиНажатие".
-
Внутри процедуры добавим выбор файла с логичными для этого фильтрами отбора формата файла.
&НаКлиенте
Процедура ПутьКартинкиНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = "Картинка (*.jpg)|*.jpg";
ОписаниеОповещения = Новый ОписаниеОповещения("ПутьКартинкиНажатиеПослеДиалога",
ЭтотОбъект);
ДиалогВыбораФайла.Показать(ОписаниеОповещения);
КонецПроцедуры
Используем асинхронный способ.
&НаКлиенте
Процедура ПутьКартинкиНажатиеПослеДиалога(ВыбранныеФайлы, ДопПараметры) Экспорт
ОписаниеОповещения = Новый ОписаниеОповещения("ПутьКартинкиНажатиеПослеПомещения",
ЭтотОбъект);
НачатьПомещениеФайлаНаСервер(ОписаниеОповещения,,,,
ВыбранныеФайлы[0],
УникальныйИдентификатор)
КонецПроцедуры
Сохраним картинку во временное хранилище.
&НаКлиенте
Процедура ПутьКартинкиНажатиеПослеПомещения(ОписаниеФайла, ДопПараметры) Экспорт
ПутьКартинки = ОписаниеФайла.Адрес;
КонецПроцедуры
-
Перед записью на сервере запишем в хранилище значений картинку.
-
При чтении на сервере получим картинку из хранилища значений.
Пример получения через временное хранилище и записи в реквизит объекта через Хранилище значений.
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПутьКартинки);
ТекущийОбъект.ФайлКартинки = Новый ХранилищеЗначения(ДвоичныеДанные);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ДвоичныеДанные = ТекущийОбъект.ФайлКартинки.Получить();
ПутьКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
КонецПроцедуры