Имя: Пароль:
1C
1С v8
Получение данных из ХранилищеЗначения через V82.COMConnector
,
0 ddiimmaann
 
02.07.13
13:38
Помогите ответиь на вопрос в теме, пожалуйста! Имеем у справочника "ФизЛица" реквизит "Достижение", Тип - ХранилищеЗначения, Хранимое значение - ФорматированныйДокумент. Необходимо это значение перенести в аналогичную базу:

   ДругаяИБ = Новый COMОбъект("V82.COMConnector");
   Попытка
       СоединениеДругаяБаза = ДругаяИБ.Connect("File=E:\Тест1;Usr=1;Pwd=1");
       СправочникиДругойБазы = СоединениеДругаяБаза.Справочники.ФизическиеЛица;
       Выборка = СправочникиДругойБазы.Выбрать();
       ФизЛица = Справочники.ФизическиеЛица;
       
       Пока Выборка.Следующий() Цикл
           ТекущееФизЛицо = ФизЛица.НайтиПоКоду(Выборка.Код);
           ФизлицоОбъект.Достижения = Новый ХранилищеЗначения(Выборка.Достижения.Получить());
           ФизлицоОбъект.Записать();
       КонецЦикла;
       Сообщить ("Готово");
   Исключение
       Сообщить ("Не удалось соединится с другой базой");
   КонецПопытки;

В отладчике "Выборка.Достижения.Получить()" имеет тип и значение "COMОбъект". Как получить данные, записанные в реквизите "Достижения"?
1 H A D G E H O G s
 
02.07.13
13:39
ФорматированныйДокумент - не примитивный тип, неперенесешь.
2 Fragster
 
гуру
02.07.13
13:40
(1) через сериализацию, не?
3 Smallrat
 
02.07.13
13:41
ПолучитьHTML (GetHTML)
УстановитьHTML (SetHTML)

не сделает идентичный документ ?
4 H A D G E H O G s
 
02.07.13
13:41
(2) Чебынет, нуавдруг там что то привязанное к удаленной базе есть.
5 ddiimmaann
 
02.07.13
14:05
Так?
Выборка.НаучныеИнтересы.Получить().GetHTML()    {(1)}: Ошибка при вызове метода контекста (GetHTML)    

Внутри привязок нет. В виде HTML  можно было бы перенести.
6 ddiimmaann
 
02.07.13
14:06
Выборка.НаучныеИнтересы.Получить().ПолучитьHTML()    {(1)}: Ошибка при вызове метода контекста (ПолучитьHTML)    
Аналогично, если возникнет вопрос про язык.
7 ddiimmaann
 
02.07.13
14:07
(2) А через сериализацию - это как?
8 Serginio1
 
02.07.13
14:08
(7) XMLЗначение
9 Serginio1
 
02.07.13
14:10
10 Smallrat
 
02.07.13
14:21
(6) может както так, в теории (сам с таким не сталкивался):

ТекстHTML = "";
Вложения = Новый Структура;
Выборка.НаучныеИнтересы.Получить().ПолучитьHTML(ТекстHTML, Вложения);

комФМ = СоединениеДругаяБаза.NewObject("ФорматированныйДокумент");
комФМ.УстановитьHTML(ТекстHTML, СоединениеДругаяБаза.NewObject("Структура"));

это если без вложений - если с вложениями, то тут надо мутить передачу двоичных значений.
11 ddiimmaann
 
02.07.13
14:41
Получилось! (кривовато, но для разовой операции сойдет)

ДругаяИБ = Новый COMОбъект("V82.COMConnector");
   Попытка
       СоединениеДругаяБаза = ДругаяИБ.Connect("File=E:\Тест1;Usr=1;Pwd=1");
       СправочникиДругойБазы = СоединениеДругаяБаза.Справочники.ФизическиеЛица;
       Выборка = СправочникиДругойБазы.Выбрать();
       ФизЛица = Справочники.ФизическиеЛица;
       
       Пока Выборка.Следующий() Цикл
           ТекущееФизЛицо = ФизЛица.НайтиПоКоду(Выборка.Код);
           УдаленноеХранилище = СоединениеДругаяБаза.NewObject("ХранилищеЗначения",  Выборка.Достижения);
       СтрокаXML = СоединениеДругаяБаза.XMLСтрока(УдаленноеХранилище);
       Хранилище = XMLЗначение(Тип("ХранилищеЗначения"), СтрокаXML);
                               
       ФизлицоОбъект.Достижения = Новый ХранилищеЗначения(Хранилище.Получить().Получить());

           ФизлицоОбъект.Записать();
       КонецЦикла;
       Сообщить ("Готово");
   Исключение
       Сообщить ("Не удалось соединится с другой базой");
   КонецПопытки;

Всем ПРЕОГРОМНОЕ спасибо!!!
12 Serginio1
 
02.07.13
15:01
(10) Можно проще
СтрокаXML = СоединениеДругаяБаза.XMLСтрока(Выборка.Достижения);

Достижения= XMLЗначение(Тип("ХранилищеЗначения"), СтрокаXML);
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший