Имя: Пароль:
1C
1С v8
Преобразование ComОбъекта, содержащего ХранилищеЗначения в двоичные данные
, ,
0 kiabs
 
20.09.12
15:59
Ситуация. Запросом через внешнее СОМсоединение получаю ХранилищеЗначния. Как мне его преобразовать в двоичные данные? (Нужно для последующего преобразования его в картинку).
Через отладчик нашел такую штуку (Строка.СотрудникИзображение - собственно и есть СОМобъект с хранилищем) -  
Строка.СотрудникИзображение.Get().GetBinaryData() , но в этом случае тип объекта остается COMобъект....
1 vmv
 
20.09.12
16:05
все правильно из от слона никогда не получить маленькую зебру - даже если он ей вдует, все же просто
2 kiabs
 
20.09.12
16:09
Значит не тем путем иду...
Подскажите хоть в каком направлении копать ... как из этого СОМобъекта получить картинку?
3 zladenuw
 
20.09.12
16:11
(1) если слон знает. как найти зебру. пусть он подскажет. а зрителей много
4 aleks-id
 
20.09.12
16:12
COMSafeArray не поможет?
5 zladenuw
 
20.09.12
16:13
6 vmv
 
20.09.12
16:13
(2) надо в обеих в общих модулях делать экспортные процедуры, которые будут кормиться параметрами из СВОИХ хранилищзначений и строковыми параметрами.

В параметрах УИД (строкой), а потом если тебе повезет плевать, что это комы, зная уид(свой/чужой) из общаковых функций делаем и обратные связи пересылки.

Зы: картинки придеться через файл гонять или еще как-то
7 Kashemir
 
20.09.12
16:14
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Сериализуется. Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен
8 zladenuw
 
20.09.12
16:14
Файл = Новый ХранилищеЗначения(ЗначениеИзСтрокиВнутр(ВнешнееСоединение.ЗначениеВСтрокуВнутр(ОбъектДрБазы.ХранилищеДопИнформацииФайл.Получить())));
9 zladenuw
 
20.09.12
16:14
ТС и итог. спасибо всем .ну!
10 Kashemir
 
20.09.12
16:15
+(7) П.с. это о двоичных данных. Серизализуй через хтдо и разверни на приемнике.
11 vmv
 
20.09.12
16:15
(8) не взлетит
12 zladenuw
 
20.09.12
16:15
(11) за бросал фикалиаем. почему ?
13 Axel2009
 
20.09.12
16:15
ИмяФайла = ПолучитьИмяВременногоФайла();
           КартинкаУПП.ПолучитьДвоичныеДанные().Записать(ИмяФайла);
           
           Картинка                        = новый Картинка(ИмяФайла, Истина);
           
           ХранилищеОбъект.Хранилище        = новый ХранилищеЗначения(Картинка);
14 vmv
 
20.09.12
16:16
(13) через временный файл взлетит - уже писало)
15 zladenuw
 
20.09.12
16:18
16 zladenuw
 
20.09.12
16:18
(9) ТС. жду похвалы для всех!
17 Kashemir
 
20.09.12
16:21
(0) ЗаписьXML = ВнешнееСоединение.NewObject("ЗаписьXML");
ЗаписьXML.УстановитьСтроку();
ВнешнееСоединение.СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Строка.СотрудникИзображение);
ХранилищеВСтроке = ЗаписьXML.Закрыть();


ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ХранилищеВСтроке);
ХранилищеНаВызывающейСтороны = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
18 ptiz
 
20.09.12
16:23
а Base64Строка не катит?
19 zladenuw
 
20.09.12
16:42
(18) а решение какое ?
20 zladenuw
 
20.09.12
16:42
хотя я понимаю. надо создать ник. ждать пока он будет синий и писать гадости. бу га га
21 zladenuw
 
20.09.12
16:43
(13) вуду. у нас ком. а не забытый файл
22 zladenuw
 
20.09.12
16:44
(13) хотя намеки есть
23 Serginio1
 
20.09.12
16:44
24 Serginio1
 
20.09.12
16:45
Через ХранилищеЗначения XmlСтрока и XmlЗначение
25 zladenuw
 
20.09.12
16:52
сериализован в хмл. забыл
26 kiabs
 
21.09.12
14:42
Всем большое спасибо, но мне удалось сделать все намного проще =)


COM_Изображение = Строка.СотрудникИзображение.Get().GetBinaryData();
ДвоичнаяКартинка = Base64Значение(Соединение.Base64Строка(COM_Изображение));
27 Serginio1
 
21.09.12
14:53
Проще
УдаленноеХранилище = СоединениеCOM.NewObject("ХранилищеЗначения",  Строка.СотрудникИзображение);
СтрокаXML = СоединениеCOM.XMLСтрока(УдаленноеХранилище);

Хранилище = XMLЗначение(Тип("ХранилищеЗначения"), СтрокаXML);
РезультатЗапроса = Хранилище.Получить();
28 kiabs
 
21.09.12
15:07
(27) Это даст какие-то преимущества над мои методом?
29 Serginio1
 
21.09.12
15:16
В общем то да. Меньшее количество преобразований.
30 Serginio1
 
21.09.12
15:20
Хотя у тебя Строка.СотрудникИзображение это и есть Хранилище
То можно еще проще
СтрокаXML = СоединениеCOM.XMLСтрока(Строка.СотрудникИзображение);

СотрудникИзображение= XMLЗначение(Тип("ХранилищеЗначения"), СтрокаXML);
31 kiabs
 
21.09.12
15:25
(30)Спасибо за подсказку. по замеру производительности действительно работает быстрее, правда в моем случае прирост незначителен, но буду знать теперь =)
32 Serginio1
 
21.09.12
16:28
(31) Там суть в том что в хранилище может храниться сжатые данные. Таким образом XMLСтрока(Строка.СотрудникИзображение) преобразует двоичные данные сжатого изображение и соответственно обратно из строки. А вот двоичные данные картинки по размерам может существенно различаться от Хранилища
См v8: Помогите с загрузкой изображения в XML