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