|
|
|
Обмен данными через OLE по средствам GIUD | ☑ | ||
|---|---|---|---|---|
|
0
bazifal
06.11.08
✎
16:14
|
Приветсвую, Вас, коллеги!
Такой вопрос: Я хочу настроить обмен между 2 торговлями на 8.1. Причем перегрузка ведется в одностороннем порядке. При создании новых элементов справочников в базе приемнике я беру уникальные идентификаторы ссылок в базе источнике и присваиваю их новым элементам в базе приемнике. Таким образом, соответствие между элементами в обоих базах реализуется через guid'ы. код примерно такой: //v8 - соеденение с базой источником стрУИ = V8.String(V8.Справочники.Номенклатура.Ссылка.УникальныйИдентификатор()); НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(стрУИ)); НовЭлемент.УстановитьСсылкуНового(НоваяСсылка); Проблема в следующем: Например стрУИ = "aed6dbea-5fb2-11dc-a529-aadb14561398" тогда Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(стрУИ)) возращает следующее: a529aadb-1456-1398-11dc-5fb2aed6dbea, то есть абсолютно другой идентификатор!!!! В чем причина, и как можно решить эту проблему??? |
|||
|
1
ТелепатБот
гуру
06.11.08
✎
16:14
|
||||
|
2
vde69
06.11.08
✎
16:15
|
не советую!
или пользуйся планом обмена (там по гуидам) или отделные поля юзай |
|||
|
3
skunk
06.11.08
✎
16:15
|
Значение не может равняться ссылке какого-либо из имеющихся в базе данных объекта данного типа
|
|||
|
4
bazifal
06.11.08
✎
16:16
|
vde69:
да дело в том, что нужен фильтрованный обмен :)) |
|||
|
5
bazifal
06.11.08
✎
16:17
|
нет, я зашружаю в абсолютно чистую базу, и приполученни ссылки по заданному идентификатору результат необъясним... :)
|
|||
|
6
vde69
06.11.08
✎
16:18
|
(4) а кто мешает фильровать при обмене по плану?
там делов 10 строк в общем и по 1 строке в каждом обьекте |
|||
|
7
bazifal
06.11.08
✎
16:19
|
vde69: а где можно мануалы почитать по плану обмена??
|
|||
|
8
vde69
06.11.08
✎
16:23
|
||||
|
9
bazifal
06.11.08
✎
16:29
|
vde69:
Спасибо! Но, к сожалению это не подойдет. Базы никак не должны соотноситься... :)) |
|||
|
10
bazifal
06.11.08
✎
16:34
|
А возможен такой вариант, что если такая операция производилась уже (а она производилась в действительности, и все работало нормально, но абсолютно в другой базе - в бухгалтерии, а не в текущей базе), то информация переброске гуида где то еще сохраняется??? где можно вообще посмотреть это?
|
|||
|
11
vde69
06.11.08
✎
16:35
|
(9) все пойдет, просто в примере самый простейший случай...
|
|||
|
12
skunk
06.11.08
✎
16:35
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
стрУИН = "a529aadb-1456-1398-11dc-5fb2aed6dbea"; НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(стрУИН)); НовЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); НовЭлемент.УстановитьСсылкуНового(НоваяСсылка); НовЭлемент.Записать(); сообщить(НовЭлемент.Ссылка.УникальныйИдентификатор()); КонецПроцедуры >>> a529aadb-1456-1398-11dc-5fb2aed6dbea |
|||
|
13
Rebelx
06.11.08
✎
16:41
|
(0) на самом деле, это один идентификатор, только представление разное - цифры местами поменяны.
скорее всего собака порылась в V8.String получай ссылки по другому, например XMLСтрока / XMLЗначение |
|||
|
14
bazifal
06.11.08
✎
16:53
|
skunk:
нет, с V8.String нет проблем - он выдает все верно. Проблема в том, что я в параметр ПолучитьСсылку() задаю КОНКРЕТНЫЙ giud, а вот дает данная функцию абсолютно другой guid. причем база чистая!!!! |
|||
|
15
bazifal
06.11.08
✎
16:54
|
Rebelx - ну понятно, что блоки его одинаковы, но идентификатор на то и индентификатор :))
|
|||
|
16
Rebelx
06.11.08
✎
16:56
|
что выдает
Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(стрУИ)).УникальныйИдентификатор() ? |
|||
|
17
bazifal
06.11.08
✎
16:58
|
я просто прихожу к выводу, что это глюк самой 1С. объяснение этому я не могу дать... а под данную технологию уже написана солидная обработка... как то не хочется искать элементы по их кодам и наименованиям :)))
|
|||
|
18
Rebelx
06.11.08
✎
16:59
|
это глюк в ДНК. все должно работать
|
|||
|
19
bazifal
06.11.08
✎
17:00
|
Rebelx:
я в отладчике смотрю... это сути не меняет :)) например: Справочники.Номенклатура.ПолучитьСсылку("aed6dbea-5fb2-11dc-a529-aadb14561398") возвращает <Объект не найден> (46:a529aadb1456139811dc5fb2aed6dbea) |
|||
|
20
Rebelx
06.11.08
✎
17:02
|
(19)меняет и очень сильно
|
|||
|
21
Rebelx
06.11.08
✎
17:03
|
представление идентификатора не совпадает с представлением ссылки
|
|||
|
22
Rebelx
06.11.08
✎
17:03
|
это нормально
|
|||
|
23
bazifal
06.11.08
✎
17:09
|
ааааа!!! да, действительно,
Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(стрУИ)).УникальныйИдентификатор() возвращает то что нужно! а в чем загвоздка то??? просто в итоге все равно присваивается не тот идентификатор... |
|||
|
24
skunk
06.11.08
✎
17:10
|
(23)как не тот ... попробуй код из (12)выполнить два раза...
|
|||
|
25
bazifal
06.11.08
✎
17:15
|
получается, что идентификатор тот, а ссылка на справочник номенклатуры не та... бред!!!
|
|||
|
26
skunk
06.11.08
✎
17:17
|
наверное я уже чего-то не понимаю
|
|||
|
27
Immortal
06.11.08
✎
17:32
|
ошибка здесь :
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(стрУИН)); нужно использовать метод ПолучитьСсылкуНового() |
|||
|
28
Rebelx
06.11.08
✎
17:34
|
(27) глючишь
|
|||
|
29
Immortal
06.11.08
✎
17:34
|
не, чо то я прогнал, щас найду где это у меня
|
|||
|
30
skunk
06.11.08
✎
17:35
|
(27)хоть бы в СП глянул
Позволяет для нового (созданного и еще не записанного) объекта получить ранее установленное методом УстановитьСсылкуНового значение ссылки. |
|||
|
31
Immortal
06.11.08
✎
17:39
|
(30) (29):D
|
|||
|
32
KalachevDV
06.11.08
✎
17:39
|
Попробуй вот так... У меня работает
UUID = COMОбъект.NewObject("УникальныйИдентификатор",Строка(Ссылка.УникальныйИдентификатор())); НоваяСсылка = COMОбъект.Справочники[ИмяОбъекта].GetRef(UUID); Объект = НоваяСсылка.ПолучитьОбъект(); Если Объект = Неопределено Тогда Если Источник.ЭтоГруппа Тогда НовыйОбъект = COMОбъект.Справочники[ИмяОбъекта].СоздатьГруппу(); Иначе НовыйОбъект = COMОбъект.Справочники[ИмяОбъекта].СоздатьЭлемент(); КонецЕсли; НовыйОбъект.УстановитьСсылкуНового(Ссылка); КонецЕсли; |
|||
|
33
KalachevDV
06.11.08
✎
17:40
|
(32) Сорри, выдрал из разных процедур... Так будет вернее :)
UUID = COMОбъект.NewObject("УникальныйИдентификатор",Строка(Ссылка.УникальныйИдентификатор())); НоваяСсылка = COMОбъект.Справочники[ИмяОбъекта].GetRef(UUID); Объект = НоваяСсылка.ПолучитьОбъект(); Если Объект = Неопределено Тогда Если Ссылка.ЭтоГруппа Тогда НовыйОбъект = COMОбъект.Справочники[ИмяОбъекта].СоздатьГруппу(); Иначе НовыйОбъект = COMОбъект.Справочники[ИмяОбъекта].СоздатьЭлемент(); КонецЕсли; НовыйОбъект.УстановитьСсылкуНового(Ссылка); КонецЕсли; |
|||
|
34
KalachevDV
06.11.08
✎
17:42
|
(33) млин... извините... тоже есть ошибки... но суть понятна :)
|
|||
|
35
wPa
06.11.08
✎
17:44
|
Все пройдет. Просто ты уже создал объект с таким ГУИД-ом - поэтому сгенерился новый. Это самый удобный вариант.
|
|||
|
36
Immortal
06.11.08
✎
18:00
|
(35) там контроль ?
|
|||
|
37
Immortal
06.11.08
✎
18:01
|
вообще я автору не рекомендовал бы это делать..
потому что можно наступить на грабли, связанные с обычным назначением ссылок. |
|||
|
38
wPa
06.11.08
✎
18:05
|
(36) Конечно. ГУИД 1С - это ключевое поле в сиквеле (переставленны немного местами позиции). Двух одинаковых не моэет быть - проверка на уровне платформы.
|
|||
|
39
wPa
06.11.08
✎
18:06
|
(37) Граблей не может быть, если выгружать в одном направлении.
|
|||
|
40
Immortal
06.11.08
✎
19:38
|
(38) ку! Перечитал (0), что то невнимателен я сегодня:(
|
|||
|
41
Pashkaa
06.11.08
✎
22:23
|
Помоему ты перемудрил, у меня 100% работает так
стрУИ = Строка(V8.String(V8.Справочники.Номенклатура.Ссылка); НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(стрУИ)); //Попробуем получить объект, возможно случайно он уже создан в базе нОбъект = НоваяСсылка.ПолучитьОбъект(); Если нОбъект = Неопределено Тогда // Объекта в базе нет и необходимо установить ссылку на новый объект Объект.УстановитьСсылкуНового(НоваяСсылка); иначе // Объект в базе уже есть Объект = нОбъект; КонецЕсли; Обрати внимание на стрУИ = Строка(V8.String(V8.Справочники.Номенклатура.Ссылка); Во-превых нет необходимости использовать функцию УникальныйИдентивикатор(), а во-вторых преобразуйка полученное значение в Строка(....) |
|||
|
42
bazifal
07.11.08
✎
11:14
|
Да на то он и GUID :)) Компания Микрософт вроде гарантировала, что гуиды уникальны в масштабах вселенной :))
|
|||
|
43
skunk
07.11.08
✎
11:16
|
(42)первый раз от вас такое слышу?
|
|||
|
44
bazifal
07.11.08
✎
12:47
|
skunk - я просто уверен, что 1Ска использует стандартную виндовскую функцию
генерации гуидов :) |
|||
|
45
Immortal
07.11.08
✎
12:48
|
(44) не всегда
|
|||
|
46
bazifal
07.11.08
✎
13:00
|
Immortal: Почему??
|
|||
|
47
bazifal
07.11.08
✎
13:32
|
(41) - проблема в том, что база абсолютно ЧИСТАЯ!!! в ней нет ни единого объекта! и в данном случае функция ПолучитьСсылку() работает не так, как хотелось бы... :)
|
|||
|
48
Immortal
07.11.08
✎
14:39
|
(46) вопрос к разработчикам..
но в ряде случаев 1с банально увеличивает гуид на 1. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |