|
Как получить ГУИД элемента по 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
|
Не за что :)
|
Форум | Правила | Описание | Реклама | Секции | Поиск | Книга знаний | Вики-миста |