Имя: Пароль:
1C
1С v8
ComConnector и хранилищеЗначения
0 Phil_McLaren
 
26.09.13
08:13
Доброго!
Картина такая: есть подключение к двум базам через ComConnector из стороннего приложения на c#. Одна база в роли источника данных, другая - приемник. В частности, из полей элемента справочника в источнике я создаю подобный элемент в приемнике. Один из переносимых реквизитов имеет тип ХранилищеЗначения, с ним-то и возникли проблемы - прямое присвоение реквизиту в приемнике значения реквизита из источника не дает никакого результата, реквизит приемника остается пустым. Методы платформы, насколько я знаю, можно вызывать только через V82.Application, но не ComConnector, так что сделать Execute("ПолучитьАдресФайлаВИнформационнойБазе(Ссылка, ИмяРеквизита)") или что-то подобное я не могу.
Направлений для разрешения проблемы вижу два:
-либо додуматься до способа выполнения произвольного кода через ComConnector и, собственно, сообразить порядок передачи сохраненного значения реквизита
-либо найти верный алгоритм прямого присвоения значений реквизитов, без каких-либо промежуточных буферов типа сериализации
Мнения, советы?
Заранее спасибо всем нашедшим время
1 Phil_McLaren
 
26.09.13
08:27
P.S.:
присваивать пробовал несколькими путями
Приемник.Реквизит=Источник.Реквизит; //непосредственное присвоение
Приемник.Реквизит=Коннектор.NewObject("ХранилищеЗначения",Источник.Реквизит); //через промежуточный объект, лазейку видел разве что в том, что третье ХЗ являлось для приемника "родным" объектом
Приемник.Реквизит=Коннектор.NewObject("ХранилищеЗначения",Коннектор.NewObject("ДвоичныеДанные",Источник.Реквизит.Получить())); //аналогично, только спускаемся до содержимого ХЗ и тоже создаем как "родной" объект приемника
2 Галахад
 
гуру
26.09.13
08:36
Что-то не понял как можно реквизиту в этой базе присвоить значение из той.

Может выгрузить файлик там и загрузить тут?
3 Phil_McLaren
 
26.09.13
08:40
(2) ну ссылку присваивать было бы глуповато, пожалуй, но с двоичными данными из ХЗ не улавливаю в чем объективно может быть проблема
файлик - один из вариантов, как промежуточное хранилище, но для этого нужно оперировать методами платформы, которые недоступны ComConnector
Описание функций модуля внешнего соединения пока не рассматривается, не думаю, что исчерпал все варианты -)
4 Галахад
 
гуру
26.09.13
08:43
(3) Ну как вариант можно написать функцию. И запускать ее на той стороне.
Если менять конфигурацию неудобно, можно запихать ее во внешнюю обработку.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший