ХранилищеЗначения без записи в базу

1. user1312100 203 18.03.24 12:58 Сейчас в теме
Здравствуйте.
Имеется табличная часть, один из реквизитов которой имеет тип ХранилищеЗначения. Задача помещать файлы в данный реквизит без обязательной записи в базу.

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

&НаКлиенте
Процедура ПоместитьФайлКомандаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
	Если Результат Тогда
		ОбработатьНаСервере(Адрес);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПоместитьФайлКомандаПередПомещением(ПомещаемыйФайл, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт
	Если ПомещаемыйФайл.Размер() > 25000000 Тогда //примерно 25 мегабайт
		ПоказатьПредупреждение(, "Превышен максимальный размер файла: " + Строка(ПомещаемыйФайл.Размер()));
		ОтказОтПомещенияФайла = Истина;
	КонецЕсли;
	Файл = ПомещаемыйФайл.Файл.ПолноеИмя;
	ИмяФайлаДиалог = ПомещаемыйФайл.Файл.ИмяБезРасширения;
	РасширениеИзДиалога = ПомещаемыйФайл.Файл.Расширение;
КонецПроцедуры

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


Как видим, объект записывается автоматически в процедуре ОбработатьНаСервере, если убрать из этой процедуры ДокументОбъект.Записать(), тогда при нажатии кнопки записи, реквизиты ИмяФайла,и РасширениеФайла сохраняются, а вот реквизит Файл с типом ХранилищеЗначения - нет.

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

Да, можно заполнять реквизит Файл в событии ПриЗаписи, но я не понимаю как передать туда несколько адресов из временного хранилища - вдруг пользователь добавил не один файл в табличную часть, а несколько! А вдруг добавил, удалил, снова добавил...

Хотелось бы заполнять реквизит файл так же независимо от сохранения как и реквизиты ИмяФайла,и РасширениеФайла.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 298 18.03.24 13:35 Сейчас в теме
(1) как вариант на форме можно сделать адреса временного хранилища в строках,
файлы помещать во временное хранилище, а адреса оставлять на форме..
а при записи по адресам достаем файлы и помещаем в хранилище значения.

а еще можно двоичные данные в строку сериализовать
3. Sashares 34 18.03.24 13:39 Сейчас в теме
(2)
а еще можно двоичные данные в строку сериализовать

А можно не надо?)
user1880116; SlavaKron; +2 1 Ответить
4. Boneman 298 18.03.24 13:42 Сейчас в теме
(3) неприлично на техническом форуме разводить флуд не по делу.
Если есть, что ответить топикстартеру - отвечайте ему по существу.
5. Sashares 34 18.03.24 13:43 Сейчас в теме
(4) То есть советовать хрень норм, а говорить, что это хрень нет? С чего бы?
Ну ты и обиженка. Поплачь еще))
user1880116; +1 1 Ответить
6. Boneman 298 18.03.24 13:56 Сейчас в теме
(5) хамством в интернете сейчас никого не удивить. И уж тем более, обижаться.
Неприятно встречаться с такими персонажами в профессиональной среде.

А по поводу хрень - не хрень, это никак не вам решать. Критикуешь - предлагай.
Я считаю, что человеку надо подсказывать возможности платформы, и это его наведет на идеи решения конкретно его прикладной задачи и это конструктивный диалог.
А обиженка, это походу ты, минусы в ответ на конструктивную критику ставить..
7. Sashares 34 18.03.24 14:10 Сейчас в теме
(6)У тебя 2 предложения во (2) - первое нормальное, адреса в каждую строку, второе какая то херня.
Дополнительно тут больше нечего предлагать. С адресами это нормальное и рабочее решение.
Зачем ты начал минусы ставить для меня загадка, но я тоже могу, мне не сложно.
14. newlogin1 18.03.24 17:20 Сейчас в теме
(1)
реквизит Файл с типом ХранилищеЗначения

Новый реквизит формы ДвоичныеДанные - тип произвольный, туда пишите двоичные данные. Код делаете так чтобы при открытии формы хранилище грузилось в ДвоичныеДанные, при открытии данные брались из ДвоичныеДанные. Пишите туда же при подборе. При сохранении надо просто перекинуть в ХЗ.
15. user1880116 18.03.24 19:50 Сейчас в теме
(14)
при открытии формы хранилище грузилось в ДвоичныеДанные, при открытии данные брались из ДвоичныеДанные.
Не, я понимаю конечно, что тебе нравится вот это туда-сюда наяривать с контекстом формы, но в приличном обществе это называется порнографией.
8. user1312100 203 18.03.24 14:58 Сейчас в теме
Проблема в том, что количество файлов заранее не известно. У разных контрагентов разное количество документов. И вопрос № 2: как отображать на форме еще не записанные данные? Так же как и сейчас?
А если хранить ссылки на файлы, а при записи ти файлы подгружать, а ссылки очищать?
9. Vadim_174 2 18.03.24 15:34 Сейчас в теме
Несовсем понятно что нужно в итоге, чтобы к одной строке можно было привязать несколько файлов ?
10. Vadim_174 2 18.03.24 15:44 Сейчас в теме
получать объект из реквизита формы нужно только в случае если нужен доступ к контексту, а если необязательно то и незачем, в коде ниже получается будет добавляться строка в данные формы коллекцию, и передаваться на клиент соответственно. А после окончания редактирования уже запишете объект через стандартную кнопку записи.
По моему так должно работать
&НаСервере
Процедура ОбработатьНаСервере(Адрес)
        
    ДанныеИзФайла = ПолучитьИзВременногоХранилища(Адрес);
  
    КоличествоСтрок = Объект.Документация.Количество();
    Объект.Документация.Добавить();
    Объект.Документация[КоличествоСтрок].Файл = Новый ХранилищеЗначения(ДанныеИзФайла, Новый СжатиеДанных(9));
    Объект.Документация[КоличествоСтрок].ИмяФайла = ИмяФайлаДиалог;
    Объект.Документация[КоличествоСтрок].РасширениеФайла = РасширениеИзДиалога;
    
КонецПроцедуры
Показать
12. user1312100 203 18.03.24 16:23 Сейчас в теме
(10)Так не работает. В самом начале я писал, что в этом случае реквизиты ИмяФайла,и РасширениеФайла работают как надо, а реквизит Файл почему-то нет.
16. Vadim_174 2 19.03.24 07:29 Сейчас в теме
(12) Вы писали "если убрать из этой процедуры ДокументОбъект.Записать()" а я предлагаю вообще не получать объект из реквизита и работать с данными формы коллекцией, не работает точно ?
17. user1880116 19.03.24 07:40 Сейчас в теме
(16)
не работает точно ?
Я так понимаю, самому делать то, что советуешь, здесь не принято.
Прикрепленные файлы:
19. user1312100 203 19.03.24 08:03 Сейчас в теме
(17)и как с этим бороться?
21. user1880116 19.03.24 08:23 Сейчас в теме
(19)
и как с этим бороться?
Удерживать и обновлять адреса временного хранилища, при чтении и при записи синхронизировать с текущим объектом.
22. Vadim_174 2 19.03.24 08:57 Сейчас в теме
(17) По моему не корректно так отвечать когда Вам помогают, действительно хранилище значений не пройдет, значит нужно обойти это через временное хранилище как уже советовали в комментариях. Либо вообще просится отдельный справочник файлов, примеров как это реализовать море. Вам стоит более сдержано реагировать на комментарии и побольше изучать возможности платформы и прокачивать свои скиллы, а не требовать готовых решений.
23. user1880116 19.03.24 10:44 Сейчас в теме
(22)
когда Вам помогают
Да ты, оказывается, мало того, что советуешь вещи, которые не знаешь как работают, так еще и тупо невнимательный - не понимаешь кому отвечаешь.

Как ты вообще работаешь?
24. Vadim_174 2 19.03.24 11:00 Сейчас в теме
(23) нормально работаю) а вот у тебя с софт скилами судя по всему всё плохо
25. user1880116 19.03.24 12:09 Сейчас в теме
(24) Какой ужас. Я очень расстроен.
13. user1312100 203 18.03.24 16:24 Сейчас в теме
(11)Мы отказались от этого метода
18. user1312100 203 19.03.24 07:58 Сейчас в теме
Друзья, попробуйте сами!
Прикрепляю демобазу.
P.S. Один, но главный ньюанс - у нас клиент серверная конфигурация. Файлы хранятся и код выполняется на другом ПК.
Прикрепленные файлы:
ТестоваяБаза.dt
20. user1880116 19.03.24 08:21 Сейчас в теме
(18)
Друзья, попробуйте сами!
Не-не-не, Дэвид Блейн. Иди-ка ты на курсы, да сам делай.
Vadim_174; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот