Имя: Пароль:
   
1C
 
Как получить ГУИД элемента по OLE, записать и получить по нему ссылку?
0 Parti
 
13.10.09
10:24
Делаю запрос к базе по OLE, получаю список элементов. Записываю в ТЧ:

НоваяСтрока.УникальныйИдентификатор = ЗначениеВСтрокуВнутр(Выборка.Ссылка.УникальныйИдентификатор());

Получаю по нему ссылку на OLE-Объект:
База8 = Новый COMОбъект("V81.Application");
Результат = База8.Connect("File=""C:\Documents and Settings\**\Мои документы\InfoBase3"";Usr=""1"";");
ВыбранныйМатериал = База8.Справочники.Номенклатура.ПОлучитьСсылку(ЗначениеВСтрокуВнутр(Идентификатор));

Что я делаю не так? Как получить ссылку правильно?
1 Parti
 
13.10.09
10:25
+ Идентификатор - это переменная модуля, она равна выбранному из ТЧ УникальномуИдентификатору
2 Parti
 
13.10.09
10:32
Как переменной Идентификатор присвоить тип значения УникальныйИдентификатор??
3 IronDemon
 
13.10.09
10:35
КлючУникальности = Новый УникальныйИдентификатор(СокрЛП(УИД));
ВыбранныйМатериал = База8.Справочники.Номенклатура.ПОлучитьСсылку(КлючУникальности);
4 Parti
 
13.10.09
10:47
Идентификатор = {"#",2319dcf1-f4ee-438d-b16f-6a145d6b9422}// тип - строка
УникИден = Новый УникальныйИдентификатор(СокрЛП(Идентификатор));

Ошибка - Недопустимое значение параметра!
Разве не из строки делается уникальный идентификатор?
5 Immortal
 
13.10.09
10:51
из строки..
только вот у тебя строка неправильная
6 Parti
 
13.10.09
11:00
Сообщить(Идентификатор);// переемнная модуля
КлючУникальности = Новый УНикальныйИдентификатор(Сред(Идентификатор, 6, СтрДлина(Идентификатор)-6));
Сообщить(КлючУникальности);
Материал = База8.Справочники.Номенклатура.ПОлучитьСсылку(КлючУникальности);

Результат:

{"#",2319dcf1-f4ee-438d-b16f-6a145d6b9422}
2319dcf1-f4ee-438d-b16f-6a145d6b9422

Ошибка: несоответствие типов!
7 IronDemon
 
13.10.09
11:04
Функция ВернутьУИД(Ссылка)
   Возврат глV8.String(Ссылка.UUID());
КонецФункции    // ВернутьУИД

УИД = ВернутьУИД(Выборка.Ссылка);
КлючУникальности = Новый УникальныйИдентификатор(УИД);
Кл = Спр.ПолучитьСсылку(КлючУникальности);
8 Mitriy
 
13.10.09
11:13
если используешь ЗначениеВСтрокуВнутр, то используй и ЗначениеИзСтрокиВнутр...
9 Parti
 
13.10.09
11:16
Материал = База8.Справочники.Номенклатура.ПОлучитьСсылку(КлючУникальности); // OLE-база. Ошибка - несоответствие типов
Материал = Справочники.Номенклатура.ПОлучитьСсылку(КлючУникальности); //Моя база. Объект не найден

Значит, дело все-таки в соединении..

Почему не получается полуичть ссылку базы?
10 Parti
 
13.10.09
11:17
+ надо создавать новый  объект в OLE-базе?? Через NewObject ?
11 hhhh
 
13.10.09
11:18
(9) потому-что ЗначениеВСтрокуВнутр() - это совсем из другой оперы. Делай просто через строки.
12 Irbis
 
13.10.09
11:23
(10) через оле лучше простые типы гонять. Пользуй (8) и будь счастлив.
13 DUDE
 
13.10.09
11:24
если тебе нужно в ту базу передать гуид, то и создавать ты его должен "там":
База8.Newobject("УникальныйИдентификатор"[,<параметры конструктора>]).
По нему уже и ищи.
14 Parti
 
13.10.09
11:29
(13) спс
УИД = СокрЛП(Сред(Идентификатор, 6, СтрДлина(Идентификатор)-6));// тип - строка, значение = 2319dcf1-f4ee-438d-b16f-6a145d6b9422
КлючУникальности = База8.Newobject("УникальныйИдентификатор",УИД);// правильно?
МатериалОб = База8.Справочники.Номенклатура.ПОлучитьСсылку(КлючУникальности);
15 Parti
 
13.10.09
11:31
+14 ошибка к 14 та же - несоответствие типов
16 DUDE
 
13.10.09
11:33
Вот так можно получить уид в "получателе" на основе уид текущей базы:
UIDИсточник = ТекДокумент.УникальныйИдентификатор();
UIDПолучатель = БазаПолучатель.NewObject("УникальныйИдентификатор", СокрЛП(UIDИсточник));

а вот так - наоборот:
ДругойUID = Новый УникальныйИдентификатор(БазаПолучатель.XMLСтрока(РеквизитОЛЕ.УникальныйИдентификатор()));
17 Parti
 
13.10.09
11:44
(16) даже так:
Ключ = Справочники.Материалы.НайтиПоКоду("000000000825").УникальныйИдентификатор();
КлючУникальности = База8.Newobject("УникальныйИдентификатор",Ключ);
МатериалОб = База8.Справочники.Номенклатура.ПОлучитьСсылку(КлючУникальности);

Результат:

Ошибка при вызове метода контекста (NewObject): Произошла исключительная ситуация (V81.Application): Недопустимое значение параметра (параметр номер '1')
    КлючУникальности = База8.Newobject("УникальныйИдентификатор",Ключ);

система должна сообщить, что ничего не нашла, а возвращает ошибку.. из-за чего?
18 Parti
 
13.10.09
11:45
сорри, СокрЛП()  забыл(((( вроде работает....
19 Parti
 
13.10.09
11:48
Уже без ошибки, но
Материал = База8.Справочники.Номенклатура.ПОлучитьСсылку(КлючУникальности);
Сообщить(Материал.Цена);  // Возвращает 0

значит, не находит..
20 Parti
 
13.10.09
11:51
DUDE, выручай..
21 DUDE
 
13.10.09
11:52
Озвучь еще раз задачу.
Есть база1, откуда ты получаешь исходную ссылку, и база2, в которой ищешь, так?
22 DUDE
 
13.10.09
11:54
В моей ситуации было две разных базы, обменивавшихся через правила КД с поиском при загрузке по УИД. Поэтому в обеих базах УИДы мигрировавших объектов были, и обработка по сверке перенесенных данных работала отлично.
23 Parti
 
13.10.09
11:57
(21)Есть моя база, самописная. есть база Бухи, откуда я получаю ссылки и Гуиды.
В обработку в самописке в ТЧ я выгружаю гуиды элементов из Бухии. В ТЧ они хранятся строковым типом. Затем запоминаю выбранный Гуид переменной модуля (При активизации ячейки ТП) и хочу по этому Гуиду получить ссылку на элемент в Бухии.
24 Parti
 
13.10.09
11:58
т.е. получаю от элемента Гуид и получаю по гуиду элеемнт
25 Parti
 
13.10.09
11:58
Гоняю гуиды туда-обратно..
26 Parti
 
13.10.09
12:02
DUDE....
27 DUDE
 
13.10.09
12:23
(17) Ошибка у тебя выдается тк ты в конструктор передавал в качестве параметров УникальныйИдентификатор, а надо было - строковое представление.

(23) Если у тебя твое строковое значение = СокрЛП() УИДа, без всяких там Сред(), Лев() и тп, то ссылка должна найтись.

Например:
МенДокументов = БазаПолучатель.Документы[ЦелевойТипДокумента];
UIDПолучатель = БазаПолучатель.NewObject("УникальныйИдентификатор", СокрЛП(UIDИсточник));

ДругойДокумент = МенДокументов.ПолучитьСсылку(UIDПолучатель);
// проверим - удалось ли найти..
Если ДругойДокумент.ПолучитьОбъект() = НЕОПРЕДЕЛЕНО Тогда  // не нашли
...
КонецЕсли;
28 DUDE
 
13.10.09
12:26
Если у тебя не будет явных ошибок типа "Ошибка при вызове метода контекста ....", а просто нулевая цена, то стоит посмотреть другие свойства, проверить: а доступен ли объект по данной ссылке и пр. Сама по себе "цена = 0" ничего не говорит.
29 Parti
 
13.10.09
12:38
DUDE, спс, все получилось!!
30 DUDE
 
13.10.09
12:54
Не за что :)