|
|
|
Как получить ссылка на объект по внутреннему 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) :)))) |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |