Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Формирование уникального идентификатора

Формирование уникального идентификатора
Я
   Slovo90
 
30.11.20 - 13:56
Добрый день!
Подскажите, как генерируется уникальный идентификатор объекта, по каким правилам. И можно ли изменить правила формирования уникального идентификатора.
Заранее благодарю за ответы.
 
 Партнерская программа EFSOL Oblako
   arsik
 
1 - 30.11.20 - 13:58
(0) Ты где то ВНЕ 1с хочешь УИН создавать?
   Fragster
 
2 - 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
   Fragster
 
3 - 30.11.20 - 14:03
>для ОбъектМетаданных.ПолучитьСсылку().УникальныйИдентификатор - по сериям, похоже на версию 1, но не совсем. Берется пул айдишников и по очереди выдается, последовательно.
   Fragster
 
4 - 30.11.20 - 14:03
по исчерпании пула - берется новый пул
   Slovo90
 
5 - 30.11.20 - 14:06
(1) Да, хотелось бы создавать УИД вне 1с
   Fragster
 
6 - 30.11.20 - 14:12
(5) так пофиг, любой алгоритм подойдет
   acht
 
7 - 30.11.20 - 14:12
(0) > по каким правилам.
https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random)

> можно ли изменить
Нет. Можно назначить свой. При выборе надо иметь в виду, что по нему будет строится кластерный индекс, поэтому использовать идентификаторы от балды - плохая идея. Последовательная выдача идентификаторов через ОбъектМетаданных.ПолучитьСсылку() не просто так придумана.
   fisher
 
8 - 30.11.20 - 14:13
Стандартно формируется. Обычный GUID. Он там несколько версий и алгоритмов формирования имеет, вот какую-то из них 1С и использует (какую именно - там тоже можно из GUID понять, в описании стандарта это есть). Как часть GUID используется время его формирования.
Но при создании новых объектов платформа дает инструменты для назначения произвольного УИД. Можно любой назначать.
   Fragster
 
9 - 30.11.20 - 14:14
(7) -> см ссылку из (2)
а при внешней генерации - фообще пофиг, лишь бы соответствовал
   fisher
 
10 - 30.11.20 - 14:14
В базу просто когда уид пишет, то ту часть которая время формирования - вперед пихается. Таким образом добавление обычно идет в конец кластерного индекса.
   acht
 
11 - 30.11.20 - 14:19
(10) Где в 4й версии "та часть, которая время формирования"?
   H A D G E H O G s
 
12 - 30.11.20 - 14:20
(11) 1С в базу пишет не так, как пользователь видит.
   fisher
 
13 - 30.11.20 - 14:21
(11) Вот и я не вижу. А в 1С она есть. Значит, либо неправильное описание для 4-й версии, либо в 1С не 4-я версия.
   Вафель
 
14 - 30.11.20 - 14:36
случайный уид в базу писать не очень хорошо.
лучше последовательный, как 1с и делает
   Aleksey
 
15 - 30.11.20 - 14:37
(14) Что в этом плохого. Уже лет 15 так делаю, никто не умер
   Aleksey
 
16 - 30.11.20 - 14:39
Я даже одинаковые уды в разные виды пихаю - и тоже проблем не наблюдаю
   fisher
 
17 - 30.11.20 - 15:03
Любопытно. В базе с режимом совместимости 8.3.5, если смотреть на уид по стандарту https://en.wikipedia.org/wiki/Universally_unique_identifier, то показывает первую версию.
В базе с режимом совместимости 8.3.12 - действительно показывает 4 версию (1 вариант). Но при этом время там все равно есть, а если верить вики то должен быть рандом.
Налицо расхождение план/факта :)
   acht
 
18 - 30.11.20 - 15:05
(12) Про перестановку бит я в курсе. Тут другое - непонятно какую версию 1С уидов в каком случае использует. Если 4ю, то там поля времени нет, хоть ты обпереставляйся. Если 1ю или 2ю, то все понятно.

Логично было бы использовать таймбазед при ПолучитьСсылку и 4ю при Новый УникальныйИдентификатор но проверять лень. В общем где-то нас обманывают.
   acht
 
19 - 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).
   fisher
 
21 - 30.11.20 - 15:31
http://catalog.mista.ru/public/94234/
Там в 12-м комментарии бесплатно скачивается обработка, которая показывает время формирования идентификатора.
   бомболюк
 
22 - 30.11.20 - 15:31
* NewSequentialId


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.