ulidпакет
Пакет лежит в основном пуле хаба: короткой формы достаточно, если хаб прописан сервером пакетов в opm.cfg.
opm install ulidУстановка на opm младше 1.7.0
Легаси-флоу. Клиент младше 1.7.0 адрес пула в аргументе не разбирает: пул сначала прописывают сервером пакетов, и только потом ставят через него. На 1.7.0 и новее этот раздел не нужен — хватает команды из шапки страницы.
Добавьте пул сервером пакетов в opm.cfg. Порт продублирован в «Сервер»: у opm push поле «Порт» не читается.
{
"СервераПакетов": [
{
"Имя": "default",
"Сервер": "https://hub.1cdevelopers.ru",
"Порт": 443,
"ПутьНаСервере": "/api/v1/pools/default/download/",
"РесурсПубликацииПакетов": "/api/v1/pools/default/push",
"Приоритет": 1
}
]
}И ставьте пакет, указывая сервер:
opm install -m default ulidОписание
ulid
Реализация ULID для OneScript - 128-битный идентификатор, который сортируется по времени создания.
ULID решает главные неудобства UUID v4: значения располагаются в порядке создания (нет фрагментации индексов БД), представление короче на 10 символов, читаемо и безопасно для URL.
01ARZ3NDEK TSV4RRFFQ69G5FAV
|----------| |----------------|
время 48 бит случайность 80 бит
Установка
opm install ulid
Использование
Генерация
#Использовать ulid
Идентификатор = ULID.Сгенерировать();
Сообщить(Идентификатор.ВСтроку()); // 01KZ6YEDDC1A5N6SJFE7411R7T
Сообщить(Идентификатор.Время()); // 04.08.2026 17:52:31
Сообщить(Идентификатор.ВремяВМиллисекундах()); // 1785865951628
// Сразу строкой, если объект не нужен
Ключ = ULID.СгенерироватьСтроку();
Последовательные вызовы монотонны: значения, выданные в пределах одной миллисекунды, строго возрастают, поэтому сортировка по строке всегда совпадает с порядком создания.
Разбор и проверка
Идентификатор = ULID.Разобрать("01ARYZ6S41TSV4RRFFQ69G5FAV");
Сообщить(Идентификатор.ВремяВМиллисекундах()); // 1469918176385
Сообщить(Идентификатор.ВUUID()); // 01563df1-1a41-...
// Разбор регистронезависим
ULID.Разобрать("01aryz6s41tsv4rrffq69g5fav");
// Проверка без исключений
Если ULID.ЭтоКорректный(ЗначениеИзЗапроса) Тогда
...
КонецЕсли;
Отдельный генератор
Глобальная последовательность общая на весь процесс. Если нужна независимая - создайте свой генератор:
// Монотонный (по умолчанию)
Генератор = ULID.СоздатьГенератор();
Первый = Генератор.СледующаяСтрока();
// Без гарантии монотонности - случайная часть каждый раз новая
Случайный = ULID.СоздатьГенератор(Ложь);
// Воспроизводимая метка времени: удобно в тестах и при импорте данных
Исторический = Генератор.СледующаяСтрока(1469918176385);
Публичный API
Модуль ULID
| Метод | Возвращает | Описание |
|---|---|---|
Сгенерировать(ВремяВМиллисекундах = Неопределено) |
UlidValue |
Новый идентификатор |
СгенерироватьСтроку(ВремяВМиллисекундах = Неопределено) |
Строка |
Новый идентификатор сразу строкой |
Разобрать(Значение) |
UlidValue |
Разбор строки (26 символов) или 16 байт |
ЭтоКорректный(Значение) |
Булево |
Проверка без выброса исключения |
ВремяВМиллисекундах(Значение) |
Число |
Метка времени Unix из представления |
Время(Значение) |
Дата |
Момент создания в UTC |
СоздатьГенератор(РежимМонотонности = Истина) |
UlidGenerator |
Независимая последовательность |
Класс UlidValue
ВСтроку(), ВремяВМиллисекундах(), Время(), СлучайнаяЧасть(), ВБуферДвоичныхДанных(), ВДвоичныеДанные(), ВUUID(), Сравнить(Другой), Равен(Другой).
Метод Сравнить принимает как объект, так и строку. ВUUID даёт те же 128 бит в каноническом формате UUID - это удобно для колонок uniqueidentifier, но полем версии UUID такое значение не управляет.
Класс UlidGenerator
Следующий(ВремяВМиллисекундах = Неопределено), СледующаяСтрока(ВремяВМиллисекундах = Неопределено).
Соответствие спецификации
- Каноническое представление - 26 символов Crockford's Base32 (
0123456789ABCDEFGHJKMNPQRSTVWXYZ, безI,L,O,U). - Разбор регистронезависим.
- Значения больше 128 бит отвергаются: максимум -
7ZZZZZZZZZZZZZZZZZZZZZZZZZ(метка времени281474976710655). - Монотонность: в пределах одной миллисекунды случайная часть увеличивается на единицу; при переполнении выбрасывается исключение.
- Двоичное представление - 16 байт, старший байт первым.
- Случайность берётся из
УникальныйИдентификатор(GUID v4 от криптопровайдера ОС); константные поля версии и варианта из энтропии исключены.
Явно заданная метка времени всегда используется как есть - генерация воспроизводима. Для автоматической метки последовательность продолжается даже при переводе системных часов назад, чтобы порядок не нарушался.
Тесты
opm install -l
oneunit execute -d ./tests