Разработка и Конфигурация · 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-2a8b6c1d3e5f | 36 символов |
| Передача без дефисов (обмены, API) | 5b9da9e41c3f4e2a9f7d2a8b6c1d3e5f | 32 символа |
| COM/Внешние источники (перестановка байт) | e4a99d5b-3f1c-2a4e-9f7d-2a8b6c1d3e5f | 36 символов |
| Поле _IDRRef в MS SQL | 0xE4A99D5B3F1C2A4E9F7D2A8B6C1D3E5F | 16 байт (binary) |
| Навигационная ссылка в базе | e1cib/data/Справочник.Номенклатура?ref=... | закодированное значение |
Отдельного внимания заслуживает представление в SQL и через COM-соединение: там порядок байтов внутри групп перевёрнут относительно строкового вида 1С. Это не другой идентификатор — при обратном преобразовании получается исходное значение. Ошибка в перестановке байтов — одна из самых частых причин «не находится объект по УИД» при прямых запросах к базе.
Как получить УИД объекта в коде 1С
Для любого ссылочного объекта идентификатор возвращает метод УникальныйИдентификатор(), вызванный у ссылки:
УИД = СсылкаНаОбъект.УникальныйИдентификатор();
СтрокаУИД = Строка(УИД); // "5b9da9e4-1c3f-4e2a-9f7d-2a8b6c1d3e5f" — 36 символов
Обратное преобразование — получение ссылки по известному УИД — выполняется через конструктор значения и метод менеджера объекта:
УИД = Новый УникальныйИдентификатор("5b9da9e4-1c3f-4e2a-9f7d-2a8b6c1d3e5f");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(УИД);
Конструктор Новый УникальныйИдентификатор() без параметра генерирует новый случайный идентификатор. Если передать строку с ошибкой (неправильная длина, недопустимые символы), платформа вызовет исключение — это удобный способ валидации входных данных из внешних систем.
УИД = Ссылка.УникальныйИдентификатор();
СтрокаУИД = Строка(УИД); // 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 шестнадцатеричные цифры.
Типичные ошибки при работе с УИД
Большинство проблем с идентификаторами сводится к нескольким повторяющимся сценариям. Знание их экономит часы отладки обменов.
Отдельно стоит помнить: метод ПолучитьСсылку(УИД) всегда возвращает ссылку, даже если объекта с таким идентификатором в базе нет. Проверять существование нужно отдельно — например, запросом к реквизиту ссылки или проверкой на «битость».
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, а существование объекта по УИД проверяйте отдельно от получения ссылки.