HelpF.pro

Загрузка картинок в базу 1С (сохранение в хранилище значений)

В теме форма: v8: Получение данных из ХралищаЗначений

Bell в управляемом интерфейсе пробует сохранить выбранные картинки в базу 1С, но возникли сложности с сохранением в хранилище значений. как пример Bell приложил CF файл с мини конфигурацией, за что ему большое спасибо, т.к. большая часть материалов этой статьи написана им, я лишь поправил небольшие участки кода связанные с передачей файлов и сохранение в хранилище значений.


Так как везде уже Такси, то CF я перевел в этот режим и в нем демонстрирую.

Имеется справочник Хранилище данных:

Основная Форма Элемента:

Ее код:

Код 1C v 8.3
 // ПРОЦЕДУРЫ ФОРМЫ
//======================================================================================================
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Объект.Ссылка.Пустая() Тогда
			Объект.Наименование = ".";
	КонецЕсли;
		
	Если НЕ Параметры.Ключ.Пустая() Тогда
	   ДанныеАдрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеХЗ");
	КонецЕсли;
	
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Если Объект.Ссылка.Пустая() Тогда
	КонецЕсли;


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


КонецПроцедуры


// ПРОЦЕДУРЫ ЭЛЕМЕНТОВ ФОРМЫ
//======================================================================================================


&НаКлиенте
Процедура ВыбратьДанные(Команда)
	
	ДанныеВыбрать();


КонецПроцедуры


&НаКлиенте
Процедура СохранитьДанные(Команда)
  	
	Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
		Предупреждение(НСтр("ru = 'Элемент не записан !!!'"));
		Возврат;
	КонецЕсли;
	
	ДанныеСохранения = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеХЗ");
	ИмяСохранения    = Объект.Наименование; 
	//ИмяСохранения    = Объект.Наименование + Объект.ДанныеРасширение; 
    ПолучитьФайл(ДанныеСохранения, ИмяСохранения, Истина);
	
КонецПроцедуры


// ПРОЦЕДУРЫ ПРОЧИЕ
//======================================================================================================


&НаКлиенте
Процедура ДанныеВыбрать()
	
	ПолученныеДанныеАдрес = "";
	Если ПоместитьФайл(ПолученныеДанныеАдрес, , Объект.ДанныеПуть, Истина, УникальныйИдентификатор)Тогда
		
		ДанныеАдрес = ПолученныеДанныеАдрес;
		
		ВыбранныйФайл = Новый Файл(Объект.ДанныеПуть);
		Объект.Наименование          =  ВыбранныйФайл.Имя;
		Объект.ДанныеТекущаяДата     =  ТекущаяДата();
		
		Модифицированность = Истина; 		
	КонецЕсли;
 	
КонецПроцедуры   

так же имеется общая форма ФормаЗагрузкиФайлов

При помощи ее выбираются файлы изображений и загружаются в справочник - одновременно можно загружать несколько файлов

код формы:

Код 1C v 8.3
 // ПРОЦЕДУРЫ ЭЛЕМЕНТОВ ФОРМЫ
//======================================================================================================
&НаКлиенте
Процедура СписокФайловПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Отказ = Истина;
	
	ДобавитьФайлы();


КонецПроцедуры

// ПРОЦЕДУРЫ ПРОЧИЕ
//======================================================================================================
&НаКлиенте
Процедура ДобавитьФайлы()
	
	ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ВыборФайла.МножественныйВыбор = Истина;
	ВыборФайла.Заголовок = НСтр("ru = 'Выбор файла'", "ru");
	ВыборФайла.Фильтр = НСтр("ru = 'Все файлы'", "ru") + " (*.*)|*.*";
	ВыборФайла.ПредварительныйПросмотр = Истина;
	Если ВыборФайла.Выбрать() Тогда
		
		Для каждого СтрокаФайл Из ВыборФайла.ВыбранныеФайлы Цикл
			
			ОписаниеФайла = Новый Файл(СтрокаФайл);
			
			НВС = СписокФайлов.Добавить();
			НВС.ПолноеИмяФайла   = СтрокаФайл; 
			НВС.РазмерФайла      = ОписаниеФайла.Размер();
			
		КонецЦикла;
		
	КонецЕсли;
		
КонецПроцедуры
&НаКлиенте
Процедура Загрузить()
	
	Если НЕ ПроверитьЗаполнение() Тогда
		Возврат;
	КонецЕсли;
	
	ОчиститьСообщения();
	Если СписокФайлов.Количество() = 0 Тогда
		Сообщить("Файлы не выбраны !!!'");
		Возврат;
	КонецЕсли;
	
	ПомещаемыеФайлы = Новый Массив;
	Для каждого СтрокаФайл Из СписокФайлов Цикл
		Описание = Новый ОписаниеПередаваемогоФайла(СтрокаФайл.ПолноеИмяФайла, "");
		ПомещаемыеФайлы.Добавить(Описание);
	КонецЦикла;
	
	// -------------------------------------------------------------------------------
	ПомещенныеФайлы         = Новый Массив;
	СписокЗагруженныхФайлов = Новый СписокЗначений;
	
	Если ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, УникальныйИдентификатор) Тогда
		
		Закрыть(Истина);
		
	Иначе
		
		Сообщение = Новый СообщениеПользователю();
		Сообщение.Текст = НСтр("ru = 'Файлы не загружены'", "ru");
		Сообщение.Сообщить();
		
	КонецЕсли;


	ОповеститьОВыборе(ПомещенныеФайлы);


КонецПроцедуры
&НаСервере
Функция ПоместитьВыбранныеФайлыВХранилище(ПомещаемыеФайлы)
	
	АдресХЗ = ПоместитьВоВременноеХранилище(ПомещаемыеФайлы, УникальныйИдентификатор);
	Возврат АдресХЗ;
КонецФункции


   

в коде вызывается ОповеститьОВыборе(ПомещенныеФайлы) и срабатывает обработчик в ФормаСпискаДополнительно

Код 1C v 8.3
 &НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	Если ИсточникВыбора.ИмяФормы = "ОбщаяФорма.ФормаЗагрузкиФайлов" Тогда
		ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение);
	КонецЕсли;
	
КонецПроцедуры   

и следующим кодом идет создание элементов справочника и загрузка изображений из временного хранилища

Код 1C v 8.3
 &НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение)
	
	Для Каждого СтрокаФайл Из ВыбранноеЗначение Цикл 		
		Файл = Новый Файл(СтрокаФайл.Имя);
		ХранимыйФайл = Справочники.ХранилищеДанныхСправочники.СоздатьЭлемент();
		ХранимыйФайл.Наименование                      = Файл.Имя;
		ХранимыйФайл.ДанныеПуть                        = Файл.Путь;
		ХранимыйФайл.ДанныеТекущаяДата                 = ТекущаяДата();
		ХранимыйФайл.ДанныеХЗ = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(СтрокаФайл.Хранение), Новый СжатиеДанных());
 		ХранимыйФайл.Записать();
	КонецЦикла;
	
	Элементы.Список.Обновить();
	
КонецПроцедуры   

Скачать DT - Платформа 8.3.4


Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/1562.html