Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

  • После того, пользователь, например, сделал фото, создается запись в справочнике Файлы в мобильном устройстве и регистрируется к отправке как в Облако, так и на сервер 1С

  • Фоновая отправка передает двоичные данные в Облако. В Облаке создается объект с именем, равным УИД записи справочника, чтобы потом можно было его найти в миллионах объектов в Облаке

  • Если файл успешно отправлен в Облако, то в записи справочника Файлы можно смело удалять двоичные данные. Так я экономлю место на устройстве пользователя. Файл теперь ему доступен по ссылке.

  • Параллельно на сервер 1С отправляется запись справочника Файлы без двоичных данных. Достаточно знать УИД файла, чтобы найти его в Облаке

Дополнительно

После получения

Код

После сделанного фото или видео двоичные данные записываются в справочник Файлы в реквизит Данные с типом ХранилищеЗначений и передаются в Яндекс.Облако

...

Раскрыть
titleОчистка двоичных данных из справочника Файлы
Блок кода
Процедура ПередатьВсеФайлыВЯндексОблако()
    ЗапросФайлов = Новый Запрос;
	ЗапросФайлов.Текст = 
		"ВЫБРАТЬ
		|	Файлы.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.Файлы КАК Файлы
		|ГДЕ
		|	Файлы.МестоХраненияФайла = ЗНАЧЕНИЕ(Перечисление.РВ_МестоХраненияФайла.ВИнформационнойБазе)";			
	РезультатЗапросаФайлов = ЗапросФайлов.Выполнить();			
	ВыборкаДетальныеЗаписиФайлов = РезультатЗапросаФайлов.Выбрать();			
	Пока ВыборкаДетальныеЗаписиФайлов.Следующий() Цикл
		Попытка
			РезультатПередачи = ПередатьФайлВЯндексОблако(ВыборкаДетальныеЗаписиФайлов.Ссылка);
		Исключение
			РезультатПередачи = ОписаниеОшибки();
		КонецПопытки;
		Если РезультатПередачи = Истина Тогда
			ФайлОбъект = ВыборкаДетальныеЗаписиФайлов.Ссылка.ПолучитьОбъект();
			ФайлОбъект.МестоХраненияФайла = Перечисления.РВ_МестоХраненияФайла.YandexCloud;
			ФайлОбъект.Данные = Новый ХранилищеЗначения(Неопределено);
			Попытка
				ФайлОбъект.Записать();
			Исключение
				Ошибка = НСтр("ru = 'Не удалось изменить место хранения фото'");
				Ошибка = Ошибка + ". " + НСтр("ru = 'Ошибка'") + ": " + ОписаниеОшибки();
				Сообщить(Ошибка);	
			КонецПопытки;
		Иначе
			Ошибка = НСтр("ru = 'Не удалось передать фото в ЯндексОблако'");
			Ошибка = Ошибка + ". " + НСтр("ru = 'Ошибка'") + ": " + РезультатПередачи;
			Сообщить(Ошибка);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Триггеры и Cloud Functions

На этом можно было бы и закончить, но мне для быстрого отображения фото в тонком клиенте 1С нужны небольшие “снимки” размером примерно 1024х768, а для отображения в виде компактной галереи - готовые пиктограммы размером 100х100.

Для этого я делаю следующее:

  • В бакете, куда прилетают фотки, создаю Триггер, называю его autoresize. При создании в префикс ключа объекта вписываю имя папки, для которой будет выполняться триггер:

    Image Added
  • В разделе “настройки функции” указываю имя облачной функции, которую необходимо выполнить после создания объекта. В моем случае это функция, написанная на Python, которая и создает пиктограмму и “снимок” с фото

Далее я могу в тонком клиенте 1С или в мобильном приложении быстро отображать снимки как угодно.

...