Dev ›
ХранилищеЗначения без записи в базу ›
#1
18.03.24 12:58
Здравствуйте.
Имеется табличная часть, один из реквизитов которой имеет тип ХранилищеЗначения. Задача помещать файлы в данный реквизит без обязательной записи в базу.
Код |
---|
&НаКлиенте
Процедура ЗагрузитьДанные(Команда)
ПриЗавершении = Новый ОписаниеОповещения("ПоместитьФайлКомандаЗавершение", ЭтотОбъект);
ПередПомещением = Новый ОписаниеОповещения("ПоместитьФайлКомандаПередПомещением", ЭтотОбъект);
ДиалогВыбораФайлов = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайлов.Заголовок = "Выбор файл вложения";
ДиалогВыбораФайлов.МножественныйВыбор = Ложь;
НачатьПомещениеФайла(ПриЗавершении, , ДиалогВыбораФайлов, Истина, , ПередПомещением);
КонецПроцедуры
&НаКлиенте
Процедура ПоместитьФайлКомандаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
Если Результат Тогда
ОбработатьНаСервере(Адрес);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоместитьФайлКомандаПередПомещением(ПомещаемыйФайл, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт
Если ПомещаемыйФайл.Размер() > 25000000 Тогда //примерно 25 мегабайт
ПоказатьПредупреждение(, "Превышен максимальный размер файла: " + Строка(ПомещаемыйФайл.Размер()));
ОтказОтПомещенияФайла = Истина;
КонецЕсли;
Файл = ПомещаемыйФайл.Файл.ПолноеИмя;
ИмяФайлаДиалог = ПомещаемыйФайл.Файл.ИмяБезРасширения;
РасширениеИзДиалога = ПомещаемыйФайл.Файл.Расширение;
КонецПроцедуры
&НаСервере
Процедура ОбработатьНаСервере(Адрес)
ДанныеИзФайла = ПолучитьИзВременногоХранилища(Адрес);
ДокументОбъект = РеквизитФормыВЗначение("Объект");
КоличествоСтрок = ДокументОбъект.Документация.Количество();
ДокументОбъект.Документация.Добавить();
ДокументОбъект.Документация[КоличествоСтрок].Файл = Новый ХранилищеЗначения(ДанныеИзФайла, Новый СжатиеДанных(9));
ДокументОбъект.Документация[КоличествоСтрок].ИмяФайла = ИмяФайлаДиалог;
ДокументОбъект.Документация[КоличествоСтрок].РасширениеФайла = РасширениеИзДиалога;
ДокументОбъект.Записать();
ЗначениеВРеквизитФормы(ДокументОбъект,"Объект");
КонецПроцедуры |
Как видим, объект записывается автоматически в процедуре ОбработатьНаСервере, если убрать из этой процедуры ДокументОбъект.Записать(), тогда при нажатии кнопки записи, реквизиты ИмяФайла,и РасширениеФайла сохраняются, а вот реквизит Файл с типом ХранилищеЗначения - нет.
Тут дилемма, с одной стороны хочется дать возможность пользователю не сохранять сделанные изменения, а с другой - все таки хранить в базе присоединенные файлы.
Да, можно заполнять реквизит Файл в событии ПриЗаписи, но я не понимаю как передать туда несколько адресов из временного хранилища - вдруг пользователь добавил не один файл в табличную часть, а несколько! А вдруг добавил, удалил, снова добавил...
Хотелось бы заполнять реквизит файл так же независимо от сохранения как и реквизиты ИмяФайла,и РасширениеФайла.