Имя: Пароль:
1C
1С v8
8.2 Управляемое приложение, тонкий клиент, сохранить двоичные данные на диск
0 lynx06
 
01.08.12
06:44
Управляемое приложение, тонкий клиент. 8.2

Есть документ, к нему привязан регистр сведений в котором хранятся двоичные данные (файлы картинок). Необходимо при открытии документа сохранить эти данные на клиенте во временный каталог пользователя.

Как правильно сделать? Не получается совсем, т.к. с клиента ПриОткрытии документа запускаю процедуру, и она, естесственно сохраняет файлы на сервере :(

[code]
&НаСервере
Процедура СохранитьФайлыВложенийКартинкиВоВременныйКаталог(КаталогВремФайлов)
   
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Файлы.Ссылка,
   |    Файлы.Наименование,
   |    Файлы.Расширение,
   |    Файлы.Описание,
   |    Файлы.ВладелецФайла
   |ИЗ
   |    Справочник.ЭлектронноеЗаданиеПрисоединенныеФайлы КАК Файлы
   |ГДЕ
   |    Файлы.ВладелецФайла = &ВладелецФайла
   |    И (НЕ Файлы.ПометкаУдаления)";
   //|    И Файлы.Описание ПОДОБНО ""cid""";
   
   Запрос.УстановитьПараметр("ВладелецФайла", Объект.Ссылка);
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       Если Лев(Выборка.Наименование, 5)="image" Тогда
           МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи();
           МенеджерЗаписи.ПрисоединенныйФайл = Выборка.Ссылка;
           МенеджерЗаписи.Прочитать();
           ДвоичныеДанные = МенеджерЗаписи.ХранимыйФайл.Получить();
           
           Попытка
               ПолноеИмяВремФайла = КаталогВремФайлов+Объект.ИдентификаторПочтовойЗаявки+"_"+Выборка.Наименование;
               ДвоичныеДанные.Записать(ПолноеИмяВремФайла);
               ВременныеФайлыКартинокДляHTML.Добавить(ПолноеИмяВремФайла, "cid:"+Выборка.Описание);
           Исключение
               Сообщить("Не удаётся записать временный файл на диск!!! "+"("+ПолноеИмяВремФайла+")");
           КонецПопытки;
       КонецЕсли;
   КонецЦикла;

[/code]
1 izekia
 
01.08.12
06:48
ПоместитьВоВременноеХранилище
ПолучитьИзВременногоХранилища
2 Рэйв
 
01.08.12
06:49
Сделай функцию и возвращай их на клиент в виде списка или тз
3 Avalone2010
 
01.08.12
06:56
А вам не кажется странным что сохранение дв данных идет на сервере. Может имеет смысл получить дв данные на сервере, через временное хранилище передать их на клиент и записать уже на клиенте?
4 izekia
 
01.08.12
06:57
(3) "А вам не кажется странным что сохранение дв данных идет на сервере."
по-моему автору это и кажется странным)
5 Avalone2010
 
01.08.12
07:00
(4) читаю между строк, именно эту строку и пропустил :-(
6 izekia
 
01.08.12
07:00
(5) да может он уже курит (1), соответственно скоро что-то получится)
7 Avalone2010
 
01.08.12
07:03
(6) наверное. С месяц назад то же столкнулся с такой бядой. Только надо было наоборот с клиента не сервер двоичные данные передать(создание документов из текстовых файликов).
8 lynx06
 
01.08.12
07:11
То есть надо сделать так:

1 На сервере записать файлы во временное хранилище
2 Вернуть список ссылок временного хранилища на клиент
3 На клиенте сохранить файлы по списку

Прокатит?
9 izekia
 
01.08.12
07:13
да, должно
10 lynx06
 
01.08.12
07:55
Спасибо, заработало! Ещё такой вопрос: какое время жизни объектов во временном хранилище?
Если я передаю вторым параметром функции УИД формы, то при её закрытии данные временного хранилища удаляются?

Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтаФорма.УникальныйИдентификатор);
11 izekia
 
01.08.12
07:58
(10) да, в сп же четко написано
12 lynx06
 
01.08.12
08:01
(11) Были некоторые сомнения в трактовке СП :)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший