Имя: Пароль:
1C
1С v8
Формирование уникального идентификатора
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