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

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

Сколько символов в GUID в 1С и как с ним работать

Сколько символов содержит GUID в 1С, как устроен уникальный идентификатор, как получить его строковое представление, проверить корректность и избежать типовых ошибок.

GUID (глобальный уникальный идентификатор) в 1С — это значение типа УникальныйИдентификатор, которое платформа использует для однозначной идентификации объектов базы данных: элементов справочников, документов, записей регистров. В строковом виде он всегда занимает 36 символов: 32 шестнадцатеричные цифры, разделённые четырьмя дефисами на пять групп по шаблону 8-4-4-4-12.

Пример типичного GUID в 1С: f47ac10b-58cc-4372-a567-0e02b2c3d479. Если посчитать только цифры и буквы без дефисов, получится 32 символа — именно столько содержит «чистое» шестнадцатеричное представление 128-битного значения. Каждый символ кодирует 4 бита, поэтому 32 символа × 4 бита = 128 бит, или 16 байт.

Понимание длины и структуры GUID важно на практике: при проектировании обменов данными, хранении ссылок во внешних системах, валидации строк, пришедших из файлов и веб-сервисов, а также при отладке, когда нужно быстро отличить корректный идентификатор от повреждённой строки.

Из чего состоит GUID и почему именно 36 символов

Стандартный формат записи GUID (UUID) регламентирован спецификацией RFC 4122. Идентификатор — это 128-битное число, которое для удобства чтения записывается в шестнадцатеричном виде и разбивается дефисами на пять групп: первая — 8 символов, затем три группы по 4 символа и последняя — 12 символов. Сумма 8+4+4+4+12 даёт 32 значащих символа, а с четырьмя дефисами — 36.

Дефисы не несут информационной нагрузки — они нужны только для визуального разделения групп. Поэтому одно и то же значение можно встретить в разных системах как с дефисами, так и без них, а иногда и в фигурных скобках {...}. В 1С принят канонический вид с дефисами, в нижнем регистре.

Внутри платформы GUID хранится не как строка, а как бинарное значение из 16 байт. Строковое представление формируется только при выводе — например, при преобразовании к типу Строка или при сериализации в XML и JSON.

Как получить GUID объекта в 1С

У любой ссылки на объект базы данных есть метод УникальныйИдентификатор(). Вызов Ссылка.УникальныйИдентификатор() возвращает значение типа УникальныйИдентификатор, а дальнейшее преобразование в строку даёт те самые 36 символов.

Новый идентификатор, не привязанный к объекту, создаётся конструктором без параметров: Новый УникальныйИдентификатор(). Если нужно создать идентификатор из существующей строки, строка передаётся в конструктор: Новый УникальныйИдентификатор("f47ac10b-58cc-4372-a567-0e02b2c3d479"). При некорректной строке платформа выдаст ошибку преобразования.

bsl
Идентификатор = Ссылка.УникальныйИдентификатор();
СтрокаGUID = Строка(Идентификатор); // 36 символов
ДлинаСтроки = СтрДлина(СтрокаGUID); // вернёт 36
НовыйИД = Новый УникальныйИдентификатор(); // генерация нового

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

Где важна точная длина GUID

Длина в 36 символов имеет прикладное значение в нескольких типовых сценариях. Первый — проектирование структур хранения во внешних базах и форматах обмена. Если в SQL-таблице или в JSON-схеме под GUID отводится строковое поле, его размер должен быть не меньше 36 символов; при хранении без дефисов достаточно 32, а при бинарном хранении — 16 байт.

Второй сценарий — валидация входящих данных. При загрузке из файлов, веб-сервисов или мобильных приложений строка идентификатора может быть повреждена: обрезана, дополнена пробелами, переведена в другой регистр. Простейшая проверка длины и состава символов отсекает большинство ошибок ещё до попытки преобразования.

Третий сценарий — отладка и анализ. Видя в логе строку из 36 символов с характерным разбиением, разработчик сразу распознаёт GUID; строка другой длины, выдаваемая за идентификатор, — признак ошибки в коде обмена.

Длина строки36 символов

32 шестнадцатеричные цифры + 4 дефиса, формат 8-4-4-4-12

Число бит128 бит

16 байт внутреннего бинарного представления

Тип в 1СУникальныйИдентификатор

Не строка: сравнение и хранение идут по бинарному значению

РегистрНижний

1С выводит GUID строчными буквами, но конструктор принимает и верхний

Проверка корректности строки GUID

Самый надёжный способ проверить строку — попытаться создать из неё идентификатор внутри конструкции Попытка...Исключение. Если конструктор отработал без ошибки, строка корректна. Дополнительно стоит сравнить длину: всё, что отличается от 36 символов (или 32 для формата без дефисов), заведомо не является GUID в каноническом виде.

Быстрая предварительная проверка без исключений включает три условия: длина равна 36, дефисы стоят на позициях 9, 14, 19 и 24, остальные символы — цифры 0–9 и буквы a–f в любом регистре. Такая проверка дешевле по ресурсам, но не заменяет полноценное преобразование.

Как проверить строку GUID
  1. 1
    Проверьте длину строки: должно быть 36 символов (или 32 без дефисов).
  2. 2
    Убедитесь, что дефисы стоят на позициях 9, 14, 19 и 24.
  3. 3
    Проверьте, что остальные символы — шестнадцатеричные цифры 0-9 и a-f.
  4. 4
    Выполните Новый УникальныйИдентификатор(Строка) внутри Попытка...Исключение.
  5. 5
    Если ошибки нет — сравните Строка(ИД) с исходной строкой для контроля.

GUID и ссылка: в чём разница и почему это важно

Частая путаница у начинающих разработчиков — отождествление GUID и ссылки. Ссылка в 1С — это составное значение, включающее тип объекта и его идентификатор. GUID — только идентификатор, без указания, к какому виду объекта он относится. Поэтому одна и та же строка из 36 символов может использоваться для поиска ссылки в любом справочнике или документе — и вернуть разные результаты.

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

Ещё одно следствие различия: при сравнении идентификаторов сравнивайте значения типа УникальныйИдентификатор, а не их строковые представления. Строковое сравнение чувствительно к регистру и формату, а значит, может дать ложное неравенство для одного и того же идентификатора.

Хранение GUID во внешних системах и обменах

При интеграции 1С с внешними системами важно заранее договориться о формате передачи идентификаторов. Вариантов три: каноническая строка из 36 символов, строка из 32 символов без дефисов и бинарное представление из 16 байт. Все три равнозначны, но смешение форматов в одном обмене — типичный источник ошибок сопоставления объектов.

Форматы хранения GUID

Строка 36 символов

Стандарт для 1С, удобен для чтения и отладки; требует больше места и аккуратности с регистром.

Строка 32 символа

Компактнее на 4 символа, но требует согласования с принимающей стороной и самостоятельной валидации.

16 байт (binary)

Самый экономичный для SQL-хранилищ и индексов; нечитаем для человека, требует преобразований.

В SQL-базах для GUID часто используют тип uniqueidentifier (MS SQL) или uuid (PostgreSQL) — оба хранят 16 байт и индексируются эффективнее строк. Если же идентификатор хранится как текст, поле должно иметь длину не менее 36 символов с запасом, а сравнение должно быть регистронезависимым.

Типичные ошибки при работе с GUID
01
Хранение строки GUID в поле короче 36 символов — значения обрезаются и перестают сопоставляться.
02
Сравнение GUID как строк с учётом регистра — одинаковые идентификаторы признаются разными.
03
Использование ПолучитьСсылку без проверки существования объекта — битые ссылки и ошибки доступа.
04
Смешение форматов с дефисами и без в одном обмене — объекты дублируются вместо сопоставления.
05
Передача GUID как числа или обрезка ведущих нулей — идентификатор теряется безвозвратно.

Генерация и уникальность идентификаторов

Конструктор Новый УникальныйИдентификатор() генерирует случайный UUID версии 4. Вероятность совпадения двух независимо сгенерированных значений настолько мала, что в практических задачах ею пренебрегают: количество возможных комбинаций составляет 2 в степени 122 для случайной части. Именно поэтому GUID безопасно генерировать на разных узлах распределённой системы без центрального координатора.

При этом уникальность не означает защиту от дублирования при обменах: если один и тот же объект загружается в базу дважды по разным правилам сопоставления, появятся два объекта с разными GUID. Идентификатор гарантирует уникальность значения, но не логическую уникальность сущности — это задача механизмов синхронизации.

Частые вопросы о GUID в 1С

Ниже собраны вопросы, которые чаще всего возникают у разработчиков и администраторов при работе с уникальными идентификаторами.

Итог

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

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

Сколько символов в GUID без дефисов?

32 символа. Это чистое шестнадцатеричное представление 128-битного значения. Дефисы добавляются только для читаемости и не несут информации, поэтому форматы с дефисами и без них описывают один и тот же идентификатор.

Может ли GUID в 1С содержать заглавные буквы?

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

Как узнать GUID элемента справочника без программирования?

Через встроенный язык это делается в консоли кода: Сообщить(Ссылка.УникальныйИдентификатор()). Также GUID виден в универсальных отчётах и инструментах разработчика, которые выводят идентификатор ссылки, и в XML-выгрузках объектов.

Могут ли два разных объекта иметь одинаковый GUID?

Теоретически вероятность коллизии случайных UUID ничтожно мала. На практике одинаковые GUID встречаются при копировании информационных баз или при загрузке одного объекта из общего источника — это нормально для распределённых систем и учитывается механизмами обмена.

Чем GUID отличается от кода и номера объекта?

Код справочника и номер документа — это прикладные реквизиты, которые могут повторяться, меняться и зависят от нумерации. GUID — внутренний технический идентификатор, уникальный и неизменный на протяжении жизни объекта, не предназначенный для показа пользователю.

Меняется ли GUID при переносе данных между базами?

Зависит от способа переноса. При обменах, где сопоставление идёт по GUID (например, типовая синхронизация), идентификатор сохраняется. При загрузке через произвольные правила конвертации объект может быть создан заново — тогда GUID будет новым, что нужно учитывать при повторных загрузках.