Имя: Пароль:
1C
1С v8
COMConnector - синхронизация справочников
0 zenik
 
12.06.15
11:45
делаю обмен между двумя базенками на 8.2. Подключаюсь:

OLE = Новый COMОбъект("V82.COMConnector");
Попытка
    База = OLE.Connect("File=""c:\base82\temp\"";Usr=""обмен"";Pwd=""123"";");
Исключение
    Сообщить(ОписаниеОшибки());
    Возврат;
КонецПопытки;

Далее запрашиваю справочник:

ЗапросНоменклатура = База.NewObject("Запрос");
ЗапросНоменклатура.Текст =
    "ВЫБРАТЬ
    |    Номенклатура.ЭтоГруппа            КАК ЭтоГруппа,
    |    Номенклатура.Код                КАК Код,
    |    Номенклатура.Наименование        КАК Наименование,
    |    Номенклатура.Родитель.Код         КАК Родитель,
    |    Номенклатура.Артикул            КАК Артикул,
    |    Номенклатура.ПометкаУдаления    КАК ПометкаУдаления
    |ИЗ
    |    Справочник.Номенклатура         КАК Номенклатура
    |
    |УПОРЯДОЧИТЬ ПО
    |    Ссылка ИЕРАРХИЯ";

Обхожу выборку и создаю элементы (поиск соответствий по коду справочника). Но попался один справочник с длинной кода = 0. Как быть?
Вижу у элемента близкий по духу реквизит "UUID", но у него "Ошибка чтения значения" (в отладчике гляжу). Да и как потом по этому UUID сделать обратный поиск в базе источнике?
1 Рэйв
 
12.06.15
11:52
(0)
Получаешь текстовый УИД по СОМ, а потом

УИД=Новый уникальныйИдентификатор(ТекстовыйУИД_СОМ)
Справоник.Номенклатура.получитьссылку(УИД)
2 Рэйв
 
12.06.15
11:55
+но лучше бы ты наоборот подключался.
3 Рэйв
 
12.06.15
11:55
оттужа в источник
4 Рэйв
 
12.06.15
11:55
*оттуда
5 zenik
 
12.06.15
11:57
Лучше то лучше... но конфу источника изменять нельзя, поэтому и строю городуху :)
Подскажи лучше как этот УИД поиметь через запрос?
6 ДенисЧ
 
12.06.15
12:06
(5) уид через запрос поиметь никак не сможешь ты.
7 zenik
 
12.06.15
12:07
(6) Спасибо, мастер Йода :)
(4) Вам, сударь, тоже спасибо.
8 zenik
 
12.06.15
12:22
Чет я не понял:

УИД = ЗначениеВСтрокуВнутр(Выборка.Ссылка);
ГУИД = База.String(УИД);

Сообщить(УИД);
Сообщить(ГУИД);

Результат:
{"#",2319dcf1-f4ee-438d-b16f-6a145d6b9422}
{"#",2319dcf1-f4ee-438d-b16f-6a145d6b9422}

Если уже в УИД есть то что нас интересует, нафига нам делать База.String(УИД)? (это нагуглился такой вариант).

И как кошерно выделить "чистый UUID" из полученной строки?
9 Рэйв
 
12.06.15
12:26
(8)У тебя и так УИД чище не бывает:-)  Получай ссылку по нему
10 Рэйв
 
12.06.15
12:27
хотя нет..."{"#"" наверное лишнее
11 Рэйв
 
12.06.15
12:27
вот оно: 2319dcf1-f4ee-438d-b16f-6a145d6b9422
:-)
12 zenik
 
12.06.15
12:31
(11) неа :)

Сделал так:
ГУИД = База.String(Выборка.Ссылка.УникальныйИдентификатор());
Получил совсем другой UUID - ща проверю его кошерность в оригинале :)
13 zenik
 
12.06.15
12:49
Да. все норм. Валидный UUID по COM вытаскиваем вот так:
UUID = База.String(Выборка.Ссылка.УникальныйИдентификатор());

Всем еще раз спасиб.