Имя: Пароль:
1C
1С v8
Хранилище значений
,
0 PetrPervuy
 
05.12.11
16:07
Пытаюсь поместить картинку в хранилище значений, но она не сохраняется.
&НаСервере
Функция ПолучитьИзХранилища(НомерСтроки)
   ЭтотОбъект=РеквизитФормыВЗначение("Объект");
   Хранилище=ЭтотОбъект.Приложение[НомерСтроки].Файл;
   АдресХранилища=ПоместитьВоВременноеХранилище(Хранилище,ЭтаФорма.УникальныйИдентификатор);
   Возврат АдресХранилища;
КонецФункции

&НаСервере
Функция ЗаписатьВХранилище(НомерСтроки,АдресКартинки)

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

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


&НаКлиенте
Процедура Приложение1ОписаниеФайлаОткрытие(Элемент, СтандартнаяОбработка)
   
   ТекущаяСтрока = Элементы.ПриложениеФРМ.ТекущиеДанные;
   
   НомерСтроки=Элементы.ПриложениеФРМ.ТекущаяСтрока;
   Адрес=ПолучитьИзХранилища(НомерСтроки);
   Файл =ПолучитьИзвременногоХранилища(Адрес);
   
   Если ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
       Путь = КаталогВременныхФайлов() + "\" + ТекущаяСтрока.ИмяФайла;
       Файл.Записать(Путь);
       ЗапуститьПриложение(Файл);
   Иначе
       ВыбратьФайл(Хранилище, НомерСтроки);
   КонецЕсли;
   
КонецПроцедуры
1 Defender aka LINN
 
05.12.11
16:10
ПередЗаписьюНаСервере
2 PetrPervuy
 
05.12.11
16:17
а что надо написать? у меня надо фиксировать картинку для каждой строки
3 Buster007
 
05.12.11
16:18
поиск пробовал? разницы между ТЧ и реквизитом никакой нет.
4 PetrPervuy
 
05.12.11
16:25
все таки что я должен поместить в событие ПередЗаписьюНаСервер?? я ж вроже и так заполняю тч  функцией  ЗаписатьВХранилище
5 PetrPervuy
 
05.12.11
16:37
??
6 Buster007
 
05.12.11
16:39
запись в хранилище происходит только в процедуре ПередЗаписьюНаСервере.
7 Defender aka LINN
 
05.12.11
16:41
(4) Помещать в эту процедуру ничего не надо, да и не выйдет. Платформа и так тебе все нужное поместит.
8 PetrPervuy
 
05.12.11
16:50
ну тогда почему картинка не получается достать из хранилища?
   Файл =ПолучитьИзвременногоХранилища(Адрес);
   
   Если ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
Файл имеет тип "ХранилищеЗначений" и значение тоже равно "Хранилище значений". Файл.Получить() возвращает неопределено.
9 Defender aka LINN
 
05.12.11
16:53
(8) А какой тип ему еще иметь, если это реквизит объекта?
10 Buster007
 
05.12.11
17:00
АдресВХранилище = "";
       ПоместитьФайл(АдресВХранилище, Диалог.ВыбранныеФайлы[0],, Ложь, УникальныйИдентификатор);

В перед записью
КакойТоРеквизитСХранилищем = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВХранилище));
11 PetrPervuy
 
05.12.11
17:08
"Defender aka LINN" поидее насколько я понимаю при выполнении Файл.Получить(), я должен получить двоичные данные, а не неопределенно.

"Buster007" - перед записью . Т.е. я во временное хранилище закидываю все картинки, с индексом например номер строки + "какое-то слово". и при записи достаю из временного хранилища и записываю.
Т.Е. эта процедура неправильная
&НаСервере
Функция ЗаписатьВХранилище(НомерСтроки,АдресКартинки)

   ЭтотОбъект=РеквизитФормыВЗначение("Объект");
   ЭтотОбъект.Приложение[НомерСтроки].Файл = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресКартинки));
   ЗначениеВРеквизитФормы(ЭтотОбъект,"Объект");
   УдалитьИзВременногоХранилища(АдресКартинки);
   
КонецФункции // ЗаписатьВХранилище()
12 Defender aka LINN
 
05.12.11
17:18
(11) ЗначениеВРеквизитФормы(ЭтотОбъект,"Объект") - вот тут все твои данные теряются нахрен. Ибо в данных формы хранилища нет. Объект, с которым можно работать, система тебе покажет только перед записью
13 PetrPervuy
 
05.12.11
22:35
это что при вводе каждо строки надо записывать документ?
14 H A D G E H O G s
 
05.12.11
22:36
(13) Храни все двоичные данные во временных хранилищах, а на клиенте - адреса этих хранилищ, в структуре, напрример
15 H A D G E H O G s
 
05.12.11
22:37
Надо в БЗ статью написать
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.