Имя: Пароль:
1C
 
Как получить ссылка на объект по внутреннему ID объекта?
0 Сосед
 
28.11.08
10:48
Вот есть ID - непонятно какого типа, но известно что в базе есть объект с таким ID. Как вытащить ссылку, кто подскажет?
ЗЫ: Если туплю, мои извинения. Пробежался по поиску - вроде не видно.
1 Sammo
 
28.11.08
10:51
Если тип неизвестне, то цикл по метаданным, а внутри получитьСсылку
2 wPa
 
28.11.08
10:51
Через метаданные перебрать справочники и документы с вызовом
ПолучитьСсылку(<Уникальный идентификатор>)
3 Сосед
 
28.11.08
10:53
(1),(2) Спасибо, вы подтвердили мои подозрения, что придется метаданные обходить. Вариантов решения больше нет?
4 Рэйв
 
28.11.08
11:05
(3)А в чем трудность?
Нормальный метод.
5 ShoGUN
 
28.11.08
11:37
(3) Поскольку ты не знаешь тип объекта - по любому придется обходить Метаданные. Знал бы тип - было бы проще.
6 rs_trade
 
28.11.08
11:38
(0) вопрос периодически всплывает, но я не видел ни одного ответа как узнать тип объекта по ID. было бы очень интересно...
7 Tarlich
 
28.11.08
11:42
пример
ИдентификаторДокумента = Новый УникальныйИдентификатор(Строка(ШК));
           ДокументДляПоиска=Документы.ЗаказПокупателя.ПолучитьСсылку(ИдентификаторДокумента);
8 Tarlich
 
28.11.08
11:43
а если тип неизвесен тогда
Для каждого Документ Из Метаданные.Документы Цикл
9 Serg_1960
 
28.11.08
11:44
(4) Он-же "глобальный и уникальный" и от типа не зависит :(
Вот нормальный метод :) Ссылка = ПолучитьСсылку(<Уникальный идентификатор>);
10 dimoff
 
28.11.08
11:48
(6) Каким образом можно узнать тип объекта по ID, если ID не зависит от типа а является гуидом?
11 rs_trade
 
28.11.08
11:49
(9) у тебя так работает?
(10) мне почему то всегда казалось что в гуиде должны быть признаки типа
12 Сосед
 
28.11.08
11:52
(5) У меня есть тип. Чутье не обмануло. Суть в том, что приходится избирательно хранить связи с объектами в 7-ке. Для это создан справочник, в котором код из 7 соответствует ID. Но я туда запихал еще поле тип данных, если не получится накопать получение к любому объекту базы. Как показывает обсуждение - сделал не зря. Так что нормально все. :)
(7),(8) Это то как раз понятно. :) Просто хорошо было бы как в (9) предложил.  Да и логично вполне. Ну нет - так нет. Будем играть с теми картами что есть. :)

Спасибо всем.
13 Serg_1960
 
28.11.08
11:59
Я знаю где в гуиде время создания ссылки :) А вот где "тип" - увы :(
14 dimoff
 
28.11.08
12:00
(11) Бывает, людям разное кажется. Не должны вобщем.
15 rs_trade
 
28.11.08
12:02
(13) вообще выяснить можно анализируя ссылки на разные объекты, че то все лень, нужды еще не было, пиши где время храниться, этот кусок можно будет исключить...
16 rs_trade
 
28.11.08
12:03
(14) не должны, или точно нет их там. откуда информация?
17 dimoff
 
28.11.08
12:06
(16) Насколько я читал про гуид - он формируется системой виндоузовской с гарантией, что шансы на появление в какой-либо точке земного шара такого же гуида минимальны. Соответственно никаких входящих параметров от внешних систем иметь не должен. Если я ошибусь то буду сильно удивлен.
18 H A D G E H O G s
 
28.11.08
12:14
(17) Дивись..
19 rs_trade
 
28.11.08
12:14
(17) а я сильно удивлен что гуид 1С может формироваться виндой, не допускал такой мысли, не помню что бы в литературе встречалось...надо проработать этот вопрос )))
20 H A D G E H O G s
 
28.11.08
12:15
(17) Обсосано, и не раз. Применительно к 1С8 это все не совсем так.
21 H A D G E H O G s
 
28.11.08
12:16
Для й=1 по 5 цикл
НовыйЭлемент=Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Записать();
Сообщить(НовыйЭлемент.Ссылка.УникальныйИдентификатор());
конеццикла;
22 rs_trade
 
28.11.08
12:16
(17) я всегда думал что гуид формируется 1С по алгоритму типа ИДбазы+ИДтаблицы+ВремяСоздания , что то типа того...
23 dimoff
 
28.11.08
12:17
(20) Не раз обсасыватели могут поведать где в Гуиде тип?
24 dimoff
 
28.11.08
12:18
(22) Если это так значит я ошибался.
25 H A D G E H O G s
 
28.11.08
12:19
(22) Мимо.
(23) Это ты у них спроси. Я типа там не видел.
26 ShoGUN
 
28.11.08
12:20
Вать Машу. Откройте SQL-ную таблицу в базе 1С, и посмотрите, как выглядит ссылка полностью, на уровне таблицы.
27 rs_trade
 
28.11.08
12:21
(25) а что ты там видел? опубликуй извесную теб структуру GUIDа...
28 Живой Ископаемый
 
28.11.08
12:21
(22) Вы про в77 или в8?
29 rs_trade
 
28.11.08
12:23
(28) 8
30 Живой Ископаемый
 
28.11.08
12:23
29 Очевидно вы ошибались...
31 dimoff
 
28.11.08
12:24
(25) Ты де в ветке оставляешь бессмысленные посты с претензией на знание - у тебя и спрашиваю.

Структуру GUID Microsoft описывает следующим образом (HOWTO: Use GUIDs w/ Access, SQL 6.5 and SQL 7):
   typedef struct _GUID
   {
       unsigned long   Data1;
       unsigned short  Data2;
       unsigned short  Data3;
       unsigned char   Data4[8];
   } GUID;
32 H A D G E H O G s
 
28.11.08
12:24
(26) Смотрели, видели. С перестановкой нескольких групп байт. Непонятно, зачем 1С отображает не то, что хранит.. Не кипятись.
(27) ПриНачалеРаботыСистемы - генерится GUID по стандартам. Дальше, при каждой записи его миллисекунда увеличивается на единичку. При смене даты он скорее всего перегенерится снова. Это - ИМХО, результат рассуждений логических и опыта..
33 rs_trade
 
28.11.08
12:24
(30) так кто нибудь все таки напишет как формируется GUID в 8.0 и его структуру насколько это известно? Все пишут вокруг да около...
34 dimoff
 
28.11.08
12:25
(26) Озвучь сразу вывод для неимеющих склной базы.
35 Живой Ископаемый
 
28.11.08
12:25
(33) Да нет никакой структуры... Формируется на уровне системы, макисмально уникальный для Вселенной...
36 H A D G E H O G s
 
28.11.08
12:26
dimoff, ты выполни код в (21) - тебе полегчает
37 dimoff
 
28.11.08
12:26
(35) То есть после чуши    H A D G E H O G s пришли к тому с чего начали?
38 dimoff
 
28.11.08
12:27
(36) Мне легко, код в 21 ровным счетом ничего показать не может в принципе кроме 5 подряд новых гуидов
39 H A D G E H O G s
 
28.11.08
12:27
Даже лучше так, для избежания глупых вопросов:

Для й=1 по 5 цикл
НовыйЭлемент=Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Записать();
Сообщить(НовыйЭлемент.Ссылка.УникальныйИдентификатор());
Предупреждение("Создан "+СТрока(й)+" элемент");
конеццикла;
40 H A D G E H O G s
 
28.11.08
12:28
(38) Ты не ленись
41 ShoGUN
 
28.11.08
12:29
(34) select _IDRRef from dbo._Reference11:

IDRRef                            
----------------------------------
0xBFED63C2E0A940A948B1DC92B3D78151
0x994B1DE3C4D6426B427019263F44089A
0xA697523B480D06074AC9CF3089B92F05
0xB5DB9AD3CB44E47A477D1D320642F20F
0x87C00C5F1171EA56460D0BB2F1646073
0xAE95F2B164FB7C4A41B6A5742BF00473
0xA413B3A3654DF87F419C9329C4A764CD
0xBF393DAAC5ACE87C48E5FE188A2EFFD8
0xBE312978C43B63F148F0774FB09DE8E5
0x9DBA44C1BA6001B64AFF4AD0CA2FB3C1
0xBD087A92EE80B2C449BB644FB1D13DF9
0xA5C894A949F475D44737FEB889597CF4
0x93E8A2EEABB9E7BD4E4AA6D0D48C11F5
0xA82C9738B98113784961D05E9FCB9397
0xBA76D059C48756BF41568DF91B9DC36C
0xA86A115AE0508E6E411B775F258BC491
0xAD7700E09113433B11DBDEC25404DA6D
0xAF1494B61FF114574A839055C07143D8
0xB909D6CA7EB8E10C47AFF9B24FB18BCC
0x9B86255830EE071448FD04D6C0E2F62B
0x87CEFEDE6B7B11DD44C6D4BF21AA5234
0x979EEEE6A592F9CD41A1A33BD0F20375
0x8EA8659F17F068D94993BE8F8DBAE5C4
0xA6324A7A07D5B2C14754F8DB62AF250E
0x98895CD943AAFAF74E212DD55491A061

(25 row(s) affected)
42 dimoff
 
28.11.08
12:29
Не говоря уж о том что ни в одной типовой подобный код не выполнится
43 ShoGUN
 
28.11.08
12:30
+(41) Анализируйте закономерность :)))
44 H A D G E H O G s
 
28.11.08
12:31
Для матерых дятлов:

Для й=1 по 5 цикл
НовыйЭлемент=Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.ОбменДанными.Загрузка=Истина;
НовыйЭлемент.Записать();
Сообщить(НовыйЭлемент.Ссылка.УникальныйИдентификатор());
Предупреждение("Создан "+СТрока(й)+" элемент");
конеццикла;
45 dimoff
 
28.11.08
12:33
(40) Дальше что? О чем это говорит? Где тут вид? Или ты вообще не понимаешь о чем речь в ветке? Создай ещё несколько элементов других типов - нумерация продолжится.
46 Живой Ископаемый
 
28.11.08
12:34
(44) Анализируй:
871944bb-bd2f-11dd-b978-001f29d9503e
871944bc-bd2f-11dd-b978-001f29d9503e
871944bd-bd2f-11dd-b978-001f29d9503e
871944be-bd2f-11dd-b978-001f29d9503e
871944bf-bd2f-11dd-b978-001f29d9503e
871944c0-bd2f-11dd-b978-001f29d9503e
871944c1-bd2f-11dd-b978-001f29d9503e
871944c2-bd2f-11dd-b978-001f29d9503e
871944c3-bd2f-11dd-b978-001f29d9503e
871944c4-bd2f-11dd-b978-001f29d9503e

Первые пять - это результат кода
   Для й=1 по 5 цикл
       НовыйЭлемент=Справочники.Номенклатура.СоздатьЭлемент();
       НовыйЭлемент.ОбменДанными.Загрузка=Истина;
       НовыйЭлемент.Записать();
       Сообщить(НовыйЭлемент.Ссылка.УникальныйИдентификатор());
       Предупреждение("Создан "+СТрока(й)+" элемент");
   конеццикла;


Вторые 5 -
   Для й=1 по 5 цикл
       НовыйЭлемент=Справочники.Контрагенты.СоздатьЭлемент();
       НовыйЭлемент.ОбменДанными.Загрузка=Истина;
       НовыйЭлемент.Записать();
       Сообщить(НовыйЭлемент.Ссылка.УникальныйИдентификатор());
       Предупреждение("Создан "+СТрока(й)+" элемент");
   конеццикла;

=========
и?
47 dimoff
 
28.11.08
12:35
Ещё раз для людей с "альтернативными умственными способностями"(с) - ГУИД не зависит от вида справочника или документа.
48 H A D G E H O G s
 
28.11.08
12:36
(46) Сморти (32), пункт 2
49 Живой Ископаемый
 
28.11.08
12:38
Два фрагмента по 10 УИДов - обработки выполнены в разных базах...
871944c5-bd2f-11dd-b978-001f29d9503e
871944c6-bd2f-11dd-b978-001f29d9503e
871944c7-bd2f-11dd-b978-001f29d9503e
871944c8-bd2f-11dd-b978-001f29d9503e
871944c9-bd2f-11dd-b978-001f29d9503e
871944ca-bd2f-11dd-b978-001f29d9503e
871944cb-bd2f-11dd-b978-001f29d9503e
871944cc-bd2f-11dd-b978-001f29d9503e
871944cd-bd2f-11dd-b978-001f29d9503e
871944ce-bd2f-11dd-b978-001f29d9503e
=========
f2333ac7-bd2f-11dd-b978-001f29d9503e
f2333ac8-bd2f-11dd-b978-001f29d9503e
f2333ac9-bd2f-11dd-b978-001f29d9503e
f2333aca-bd2f-11dd-b978-001f29d9503e
f2333acb-bd2f-11dd-b978-001f29d9503e
f2333acc-bd2f-11dd-b978-001f29d9503e
f2333acd-bd2f-11dd-b978-001f29d9503e
f2333ace-bd2f-11dd-b978-001f29d9503e
f2333acf-bd2f-11dd-b978-001f29d9503e
f2333ad0-bd2f-11dd-b978-001f29d9503e
=========
Первые пять элементов каждого фрагмента - контрагенты, вторые пять - номенклатура
Расскажите, на основании чего можно выцепить вид?
50 wPa
 
28.11.08
12:38
(33) ОН виндовой, только с перестановкой байтов

http://en.wikipedia.org/wiki/Globally_Unique_Identifier
51 MRAK
 
28.11.08
12:42
(0) если ID взят из реквизита другого объект, то можно выцепить вид из реквизита
52 wPa
 
28.11.08
12:42
(49) Ну не может быть там вида!!
53 Живой Ископаемый
 
28.11.08
12:42
(48) Стало быть ваши affirmations никак не on the contrary для affirmation dimoff'а.. Тогда стало быть спора какбы и нет...
54 MRAK
 
28.11.08
12:43
(51) + ТИИ умеет выцеплять тип объекта и из реквизита составного типа... програмно пока нужды не было смотреть, каким образом
55 Живой Ископаемый
 
28.11.08
12:44
(52) Давай по-другому... ИД базы, ИДТипа, ИДВида справочника/документа - там может быть?
56 dimoff
 
28.11.08
12:44
(48) Хехе, я только сейчас понял что во фразе "Это ты у них спроси. Я типа там не видел." слово "типа" является винительным падежом от тип, а не словом паразитом. Тогда спорить не о чем, все ясно, если что сорри )
57 ShoGUN
 
28.11.08
12:44
(55) Нет :) GUID - это GUID.
58 Живой Ископаемый
 
28.11.08
12:45
Особенно прошу обратить внимание на строки
f2333acb-bd2f-11dd-b978-001f29d9503e
f2333acc-bd2f-11dd-b978-001f29d9503e
из (49) первый уид - элемента Номенклатуры, второй - Контрагентов.. Отличаются аж на одну 16-ричную единицу
59 wPa
 
28.11.08
12:46
(55) - да ты можешь получить вид, но вид никак не связан с гуидом объектов вида.
Т.е. имея только ГУИД нельзя получить ничего бех перебора всех таблиц
60 dimoff
 
28.11.08
12:48
(58) видимо последние четыре части это гуид системы из

typedef struct _GUID
   {
       unsigned long   Data1;
       unsigned short  Data2;
       unsigned short  Data3;
       unsigned char   Data4[8];
   } GUID;

а первая часть вот как создается непонятно
61 H A D G E H O G s
 
28.11.08
12:48
dimoff:
<<(16) Насколько я читал про гуид - он формируется системой виндоузовской с гарантией, что шансы на появление в какой-либо точке земного шара такого же гуида минимальны. Соответственно никаких входящих параметров от внешних систем иметь не должен. Если я ошибусь то буду сильно удивлен. >>

Я: Применительно к 1С - это не так (пост 20)

dimoff:
<<(20) Не раз обсасыватели могут поведать где в Гуиде тип?>>

Я: Да ХЗ, я этого не знаю, я знаю то, что 1С не пользует напрямую формирование ссылки из Виндового Гуида (пост 25, 32).

Дальше в посте 31 dimoff решил блеснуть, и привел структуру ГУИДа. Молодец, правильно.
Дальше, после постов (39, 40) он все же решил это сделать. Ну пссле этого надо было как - то выходить из положения - пришлось делать вид, что он (dimoff) и раньше знал, что 1С не пользует виндовое формирование ГУИДа, и он хотел от меня тип объекта.. Как-то так
62 hhhh
 
28.11.08
12:49
В СП смотрели? Уникальный идентификатор. Пример. Какой здесь интересно тип?

Пример:
КлючУникальности = Новый УникальныйИдентификатор;
Форма = Отчеты.КнигаПродаж.ПолучитьФорму(, , КлючУникальности);
63 Живой Ископаемый
 
28.11.08
12:49
(59), ну именно это мы и утверждаем, вступая в дискуссию... с ... так, ежик по последним данным и так на нашей стороне, значит остается только (22)
64 rs_trade
 
28.11.08
12:49
65 Черный всадник
 
28.11.08
12:50
(58) Что интересно в разные таблицы можно записать одинаковые гуиды. Так что проблема из (0) может не иметь однозначного решения.
66 rs_trade
 
28.11.08
12:50
(63) я по ходу тоже, раньше просто не интересовался данным вопросом...
67 dimoff
 
28.11.08
12:52
(61) Какой набор чуши "блеснуть", "молодец правильно" "выйти из положения". ты со мной чем-то меряешься что ли? Это бессмысленно, у меня нет комплекса специалиста 1С.
68 H A D G E H O G s
 
28.11.08
12:55
<<(51) + ТИИ умеет выцеплять тип объекта и из реквизита составного типа... програмно пока нужды не было смотреть, каким образом>>
Умеет. Реквизит составного типа хранится в ДВУх полях: _IDRRef (uniqueidentifier, собственно ссылка), _IDTRef (int, номер таблицы)
69 H A D G E H O G s
 
28.11.08
12:59
(67) Вы пешком то нормально ходите?
70 dimoff
 
28.11.08
13:00
(69) И мяч беру левой рукой
71 Serg_1960
 
28.11.08
13:08
Война - войной, а обед - по расписанию... Сорри выпал не вовремя
Обещанное время из гуида:

Функция ДатаСозданияСсылки(Ссылка)
   ГУИД = Ссылка.УникальныйИдентификатор();
   Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
   Разрядность = СтрДлина(Строка16);
   ЧислоСек = 0;
   Для Позиция = 1 По Разрядность Цикл
       ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка16,Позиция,1))*Pow(16,Разрядность - Позиция);
   КонецЦикла;
   ЧислоСек = ЧислоСек / 10000000;
   Возврат Дата(1582, 10, 15, 04, 00, 00) + ЧислоСек;
КонецФункции
72 Serg_1960
 
28.11.08
13:12
И добавлю (что-бы споры утихли): в гуиде нет "тип ссылки" - не ищите напрасно :)
73 dimoff
 
28.11.08
13:15
(71) Это время открытия базы а не создания ссылки.
74 rs_trade
 
28.11.08
13:22
(71) +1 спасибо, может пригодиться...
(73) дата еще может быть, но не время. различно для разных элементов.
75 rs_trade
 
28.11.08
13:23
(74) которые создавались в одной сессии...
76 Serg_1960
 
28.11.08
13:47
(73) Проверьте самостоятельно :) составьте запрос на все документы из "общего" журнала; в цикле: получение времени создания ссылки и поиск аналогичной записи в ЖР - и сравните время из фукции и время записи в ЖР...
77 Serg_1960
 
28.11.08
13:50
(76) + время в ЖР может оличаться на пару-тройку секунд - оно чуток позднее :)
78 DrHiHi
 
28.11.08
14:02
попробуй
ID = ЗначениеВСтрокуВнутр(ХЗЭлемент.ПолучитьОбъект())
ID - это строка, чтобы потом получить элемент написав типа Элем = ЗначениеИзСтрокуВнутр(ХЗЭлемент.ПолучитьОбъект())
или вместо ПолучитьОбъект(), написать Ссылка, поэкспериментируй
79 DrHiHi
 
28.11.08
14:03
(ошибся)
написав типа Элем = ЗначениеИзСтрокуВнутр(ID)
:))))