1
0
mirror of https://github.com/netology-code/1c-homeworks.git synced 2024-11-24 08:02:20 +02:00
1c-homeworks/homework-5-9.md
2020-06-29 22:49:47 +08:00

4.4 KiB

Задание к занятию "Двоичные данные"

Задача 1 Создать в справочнике Номенклатура возможность загрузки и хранения картинки.

Описание задачи

Добавить возможность загрузки и хранения картинки в справочнике Номенклатура.

Требования к результату

Конфигурация из предыдущих заданий, в которой реализована возможность загружать и просматривать из формы элемента номенклатуры.

Можно выбрать каталог и картинку для загрузки.

Процесс выполнения

  1. Добавим реквизит "ПутьКартинки" с типом Хранилище значений в справочнике Номенклатура.

  2. Добавим реквизит "ФайлКартинки" на форму элемента, укажем имя "ФайлКартинки" тип "Строка".

  3. Добавим на событие Нажатие процедуру "ПутьКартинкиНажатие".

  4. Внутри процедуры добавим выбор файла с логичными для этого фильтрами отбора формата файла.

&НаКлиенте
Процедура ПутьКартинкиНажатие(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогВыбораФайла.Фильтр = "Картинка (*.jpg)|*.jpg";
	ОписаниеОповещения = Новый ОписаниеОповещения("ПутьКартинкиНажатиеПослеДиалога",
	ЭтотОбъект);
	ДиалогВыбораФайла.Показать(ОписаниеОповещения);
КонецПроцедуры

Используем асинхронный способ.

&НаКлиенте
Процедура ПутьКартинкиНажатиеПослеДиалога(ВыбранныеФайлы, ДопПараметры) Экспорт
	ОписаниеОповещения = Новый ОписаниеОповещения("ПутьКартинкиНажатиеПослеПомещения",
	ЭтотОбъект);
	НачатьПомещениеФайлаНаСервер(ОписаниеОповещения,,,,
	ВыбранныеФайлы[0],
	УникальныйИдентификатор)
КонецПроцедуры

Сохраним картинку во временное хранилище.

&НаКлиенте
Процедура ПутьКартинкиНажатиеПослеПомещения(ОписаниеФайла, ДопПараметры) Экспорт
	ПутьКартинки = ОписаниеФайла.Адрес;
КонецПроцедуры
  1. Перед записью на сервере запишем в хранилище значений картинку.

  2. При чтении на сервере получим картинку из хранилища значений.

Пример получения через временное хранилище и записи в реквизит объекта через Хранилище значений.

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПутьКартинки);
	ТекущийОбъект.ФайлКартинки = Новый ХранилищеЗначения(ДвоичныеДанные);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	ДвоичныеДанные = ТекущийОбъект.ФайлКартинки.Получить();
	ПутьКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
КонецПроцедуры