|
Формирование уникального идентификатора | ☑ | ||
---|---|---|---|---|
0
Slovo90
30.11.20
✎
13:56
|
Добрый день!
Подскажите, как генерируется уникальный идентификатор объекта, по каким правилам. И можно ли изменить правила формирования уникального идентификатора. Заранее благодарю за ответы. |
|||
1
arsik
гуру
30.11.20
✎
13:58
|
(0) Ты где то ВНЕ 1с хочешь УИН создавать?
|
|||
2
Fragster
гуру
30.11.20
✎
14:02
|
для ОбъектМетаданных.ПолучитьСсылку().УникальныйИдентификатор - по сериям, похоже на версию 1, для просто Новый УникальныйИдентификатор - похоже на версию 4
В новых платформах что-то в этом отношении меняли, более прибито к госту стало. https://dl03.1c.ru/content/Platform/8_3_18_1128/1cv8upd_8_3_18_1128.htm#59449810-e9b3-11e9-8371-0050569f678a |
|||
3
Fragster
гуру
30.11.20
✎
14:03
|
>для ОбъектМетаданных.ПолучитьСсылку().УникальныйИдентификатор - по сериям, похоже на версию 1, но не совсем. Берется пул айдишников и по очереди выдается, последовательно.
|
|||
4
Fragster
гуру
30.11.20
✎
14:03
|
по исчерпании пула - берется новый пул
|
|||
5
Slovo90
30.11.20
✎
14:06
|
(1) Да, хотелось бы создавать УИД вне 1с
|
|||
6
Fragster
гуру
30.11.20
✎
14:12
|
(5) так пофиг, любой алгоритм подойдет
|
|||
7
acht
30.11.20
✎
14:12
|
(0) > по каким правилам.
https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random) > можно ли изменить Нет. Можно назначить свой. При выборе надо иметь в виду, что по нему будет строится кластерный индекс, поэтому использовать идентификаторы от балды - плохая идея. Последовательная выдача идентификаторов через ОбъектМетаданных.ПолучитьСсылку() не просто так придумана. |
|||
8
fisher
30.11.20
✎
14:13
|
Стандартно формируется. Обычный GUID. Он там несколько версий и алгоритмов формирования имеет, вот какую-то из них 1С и использует (какую именно - там тоже можно из GUID понять, в описании стандарта это есть). Как часть GUID используется время его формирования.
Но при создании новых объектов платформа дает инструменты для назначения произвольного УИД. Можно любой назначать. |
|||
9
Fragster
гуру
30.11.20
✎
14:14
|
(7) -> см ссылку из (2)
а при внешней генерации - фообще пофиг, лишь бы соответствовал |
|||
10
fisher
30.11.20
✎
14:14
|
В базу просто когда уид пишет, то ту часть которая время формирования - вперед пихается. Таким образом добавление обычно идет в конец кластерного индекса.
|
|||
11
acht
30.11.20
✎
14:19
|
(10) Где в 4й версии "та часть, которая время формирования"?
|
|||
12
H A D G E H O G s
30.11.20
✎
14:20
|
(11) 1С в базу пишет не так, как пользователь видит.
|
|||
13
fisher
30.11.20
✎
14:21
|
(11) Вот и я не вижу. А в 1С она есть. Значит, либо неправильное описание для 4-й версии, либо в 1С не 4-я версия.
|
|||
14
Вафель
30.11.20
✎
14:36
|
случайный уид в базу писать не очень хорошо.
лучше последовательный, как 1с и делает |
|||
15
Aleksey
30.11.20
✎
14:37
|
(14) Что в этом плохого. Уже лет 15 так делаю, никто не умер
|
|||
16
Aleksey
30.11.20
✎
14:39
|
Я даже одинаковые уды в разные виды пихаю - и тоже проблем не наблюдаю
|
|||
17
fisher
30.11.20
✎
15:03
|
Любопытно. В базе с режимом совместимости 8.3.5, если смотреть на уид по стандарту https://en.wikipedia.org/wiki/Universally_unique_identifier, то показывает первую версию.
В базе с режимом совместимости 8.3.12 - действительно показывает 4 версию (1 вариант). Но при этом время там все равно есть, а если верить вики то должен быть рандом. Налицо расхождение план/факта :) |
|||
18
acht
30.11.20
✎
15:05
|
(12) Про перестановку бит я в курсе. Тут другое - непонятно какую версию 1С уидов в каком случае использует. Если 4ю, то там поля времени нет, хоть ты обпереставляйся. Если 1ю или 2ю, то все понятно.
Логично было бы использовать таймбазед при ПолучитьСсылку и 4ю при Новый УникальныйИдентификатор но проверять лень. В общем где-то нас обманывают. |
|||
19
acht
30.11.20
✎
15:11
|
(18)+ Ну в общем https://tools.ietf.org/html/rfc4122#section-4.4, 6 бит просто фиксируются.
Похоже нифига там не 4я версия |
|||
20
бомболюк
30.11.20
✎
15:28
|
для нуждающихся в последовательных GUIDах: в MS SQL есть функция NewSequentilId(), правда, пользоваться ей чуток неудобно. В винде есть UuidCreateSequential для тех же целей. Генерим такой GUID, малость переставляем байты и пишем в binary(16).
|
|||
21
fisher
30.11.20
✎
15:31
|
http://catalog.mista.ru/public/94234/
Там в 12-м комментарии бесплатно скачивается обработка, которая показывает время формирования идентификатора. |
|||
22
бомболюк
30.11.20
✎
15:31
|
* NewSequentialId
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |