К статье
Практический материал

Разработка и Конфигурация · 9 мин

УИД в 1С: сколько символов и как устроен уникальный идентификатор

Сколько символов в УИД (GUID) в 1С: 36 знаков с дефисами, 32 без. Формат, представление в запросах, конвертация из COM и SQL, проверка корректности.

Уникальный идентификатор (УИД, он же GUID) в 1С — это внутренний ключ, по которому платформа однозначно отличает один объект от другого: элемент справочника, документ, запись регистра. Практически у каждого ссылочного объекта есть свой УИД, и именно он используется при обменах между базами, интеграциях с внешними системами и поиске «потерянных» ссылок.

Вопрос о длине возникает постоянно: в одном месте идентификатор выглядит как строка из 36 символов, в другом — из 32, а в базе данных SQL он хранится в третьем виде. Разница объясняется не разными идентификаторами, а разными способами представления одного и того же 128-битного значения.

Ниже разобраны все форматы, в которых УИД встречается на практике, способы получить и проверить его, а также типичные ошибки при сравнении и передаче идентификаторов между системами.

Сколько символов в УИД 1С: точный ответ

Каноническое строковое представление уникального идентификатора в 1С содержит 36 символов. Оно состоит из 32 шестнадцатеричных цифр (0–9, a–f), разделённых четырьмя дефисами на пять групп по схеме 8-4-4-4-12:

5b9da9e4-1c3f-4e2a-9f7d-2a8b6c1d3e5f

Если убрать дефисы, останется 32 символа — так УИД часто передаётся в веб-сервисах и обменах, где дефисы считаются лишними. Оба варианта описывают одно и то же значение длиной 128 бит (16 байт), поэтому утверждения «УИД бывает 32 или 36 символов» не противоречат друг другу — это разные записи одного числа.

Форматы представления одного идентификатора

Один и тот же УИД выглядит по-разному в зависимости от того, где вы его видите. Путаница в длине почти всегда связана именно с форматом, а не с «другим типом» идентификатора.

Где встречаетсяВид записиДлина
Строковое представление в 1С5b9da9e4-1c3f-4e2a-9f7d-2a8b6c1d3e5f36 символов
Передача без дефисов (обмены, API)5b9da9e41c3f4e2a9f7d2a8b6c1d3e5f32 символа
COM/Внешние источники (перестановка байт)e4a99d5b-3f1c-2a4e-9f7d-2a8b6c1d3e5f36 символов
Поле _IDRRef в MS SQL0xE4A99D5B3F1C2A4E9F7D2A8B6C1D3E5F16 байт (binary)
Навигационная ссылка в базеe1cib/data/Справочник.Номенклатура?ref=...закодированное значение

Отдельного внимания заслуживает представление в SQL и через COM-соединение: там порядок байтов внутри групп перевёрнут относительно строкового вида 1С. Это не другой идентификатор — при обратном преобразовании получается исходное значение. Ошибка в перестановке байтов — одна из самых частых причин «не находится объект по УИД» при прямых запросах к базе.

Как получить УИД объекта в коде 1С

Для любого ссылочного объекта идентификатор возвращает метод УникальныйИдентификатор(), вызванный у ссылки:

УИД = СсылкаНаОбъект.УникальныйИдентификатор();

СтрокаУИД = Строка(УИД); // "5b9da9e4-1c3f-4e2a-9f7d-2a8b6c1d3e5f" — 36 символов

Обратное преобразование — получение ссылки по известному УИД — выполняется через конструктор значения и метод менеджера объекта:

УИД = Новый УникальныйИдентификатор("5b9da9e4-1c3f-4e2a-9f7d-2a8b6c1d3e5f");

Ссылка = Справочники.Номенклатура.ПолучитьСсылку(УИД);

Конструктор Новый УникальныйИдентификатор() без параметра генерирует новый случайный идентификатор. Если передать строку с ошибкой (неправильная длина, недопустимые символы), платформа вызовет исключение — это удобный способ валидации входных данных из внешних систем.

bsl
УИД = Ссылка.УникальныйИдентификатор();
СтрокаУИД = Строка(УИД); // 36 символов
СсылкаОбратно = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаУИД));

Как проверить, что строка — корректный УИД

При приёме идентификаторов из внешних систем строку стоит проверять перед использованием. Самый надёжный способ — попытка создать значение через конструктор внутри Попытка...Исключение: если строка не соответствует формату, будет выброшено исключение.

Формальные признаки корректной строки: длина ровно 36 символов (или 32 без дефисов), дефисы стоят на позициях 9, 14, 19 и 24, все остальные символы — шестнадцатеричные цифры. Регистр букв значения не имеет: 1С выводит строчные, но прописные тоже допустимы.

Контрольные точки

Как проверить результат

Длина строки
Норма

36 символов с дефисами или 32 без

Тревожный признак

Любая другая длина — строка повреждена или это не УИД

Символы
Норма

Только 0-9, a-f и дефисы на позициях 9, 14, 19, 24

Тревожный признак

Буквы g-z, пробелы, фигурные скобки без обработки

Поиск объекта по УИД
Норма

ПолучитьСсылку вернул ссылку, у которой не пустой запрос к реквизиту

Тревожный признак

Запрос к ссылке возвращает «Объект не найден» — битая ссылка

УИД при обменах, COM и прямых запросах к SQL

В типовых обменах (Конвертация данных, EnterpriseData, планы обмена) УИД передаётся в строковом виде 36 символов, иногда без дефисов. Если обе стороны — 1С, проблем обычно нет. Сложности начинаются, когда одна из сторон — внешняя система или прямой доступ к базе.

Перестановка байтов в COM и SQL

При работе через COM-соединение и в полях _IDRRef базы SQL Server байты идентификатора хранятся в перевёрнутом порядке внутри первых групп. Для преобразования используют готовые функции перестановки (в типовых конфигурациях это, например, работа через ОбщегоНазначения или собственные функции конвертации GUID-to-String для SQL). Самостоятельно «угадывать» порядок не нужно — используйте проверенные функции и сверяйте результат на известной паре «объект — его строковый УИД».

Битые ссылки и УИД

Когда объект удалён, а ссылка на него осталась, в выборках появляется значение вида <Объект не найден> (5b9da9e4:...). Из этой строки можно извлечь УИД и восстановить объект через ПолучитьСсылку, если данные есть в резервной копии или базе-источнике обмена. Длина идентификатора внутри такого представления — те же 32 шестнадцатеричные цифры.

Типичные ошибки при работе с УИД

Большинство проблем с идентификаторами сводится к нескольким повторяющимся сценариям. Знание их экономит часы отладки обменов.

Типичные ошибки
01
Сравнение УИД как строк с разным регистром букв или с дефисами/без — совпадение не находится, хотя идентификатор один. Приводите обе стороны к одному виду перед сравнением.
02
Игнорирование перестановки байтов при чтении _IDRRef из SQL — объект «не находится» в 1С по скопированному из запроса значению.
03
Хранение УИД в реквизите строкой неограниченной длины и поиск по ней без индекса — на больших базах обмены резко замедляются.
04
Использование УИД как человекочитаемого кода для пользователей — идентификатор не предназначен для ручного ввода, для этого есть код и номер.
05
Ожидание, что при выгрузке в другую базу объект получит тот же УИД при загрузке «с нуля» вне обмена — новый объект получит новый идентификатор.

Отдельно стоит помнить: метод ПолучитьСсылку(УИД) всегда возвращает ссылку, даже если объекта с таким идентификатором в базе нет. Проверять существование нужно отдельно — например, запросом к реквизиту ссылки или проверкой на «битость».

FAQ: частые вопросы о длине и формате УИД в 1С

Почему в одном месте УИД 36 символов, а в другом 32?

Это один и тот же 128-битный идентификатор в разной записи. Строковое представление 1С добавляет 4 дефиса для читаемости (формат 8-4-4-4-12), а в обменах и API дефисы часто убирают — остаётся 32 шестнадцатеричные цифры. Значение от этого не меняется.

Может ли УИД содержать заглавные буквы?

Да, регистр не имеет значения: 1С выводит идентификатор строчными буквами, но конструктор Новый УникальныйИдентификатор() принимает и прописные. При сравнении строк из разных систем приводите их к одному регистру.

Как узнать УИД объекта без программирования?

В клиентском приложении можно открыть объект и выполнить команду «Вывести список» или использовать внешнюю обработку показа УИД. Также идентификатор виден в навигационной ссылке (команда «Получить ссылку») в закодированном виде, а в консоли запросов или СКД его можно вывести выражением через УникальныйИдентификатор().

Почему УИД из SQL-запроса не находится в 1С?

В поле _IDRRef байты хранятся в перевёрнутом порядке относительно строкового представления. Скопированное из SQL значение нужно преобразовать функцией перестановки байтов, и только после этого передавать в ПолучитьСсылку. Это самая частая причина «несовпадающих» идентификаторов.

Меняется ли УИД при изменении объекта?

Нет. Идентификатор присваивается один раз при создании объекта и не меняется ни при редактировании, ни при пометке удаления, ни при переносе через типовые механизмы обмена. Новый УИД объект получает только если создаётся заново как новая сущность.

Можно ли задать объектам свой УИД вручную?

Да, через метод УстановитьСсылкуНового() для ещё не записанного объекта: сначала создаётся ссылка с нужным идентификатором через ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаУИД)), затем она назначается новому объекту. Так делают при синхронизации с внешними системами, где идентификатор уже существует.

Итог

Что важно запомнить

УИД в 1С — это 128-битное значение, чьё стандартное строковое представление занимает 36 символов (32 шестнадцатеричные цифры и 4 дефиса). Длина 32 символа — тот же идентификатор без дефисов. При обменах учитывайте регистр, дефисы и перестановку байтов в SQL/COM, а существование объекта по УИД проверяйте отдельно от получения ссылки.