Разработка и Конфигурация · 8 мин
Уникальный идентификатор в 1С: сколько символов и как он устроен
Сколько символов содержит уникальный идентификатор в 1С, как устроен GUID, как получить его в коде и из базы, типичные ошибки при работе со ссылочными типами.
Уникальный идентификатор в 1С — это значение типа УникальныйИдентификатор, которое платформа автоматически присваивает каждой ссылке на объект базы данных: элементу справочника, документу, записи регистра и другим сущностям. В строковом представлении он содержит 36 символов: 32 шестнадцатеричные цифры и 4 дефиса-разделителя. Пример: 8a3f2c1e-9b74-4d5a-9c8e-1f2a3b4c5d6e.
За этим строковым видом стоит стандартный GUID (UUID) — 128-битное число, генерируемое по алгоритму, который делает вероятность совпадения двух идентификаторов практически нулевой. Именно поэтому GUID используется в 1С как внутренний ключ ссылки: он не зависит от кода, наименования или других реквизитов объекта и не меняется при их редактировании.
Понимание длины и структуры идентификатора важно при обмене данными между базами, интеграции с внешними системами, хранении ссылок в текстовых полях и при поиске объектов по строке из журнала ошибок или плана обмена.
Структура GUID: из чего состоят 36 символов
Строковое представление идентификатора разбито дефисами на пять групп по схеме 8-4-4-4-12. Например, в значении 8a3f2c1e-9b74-4d5a-9c8e-1f2a3b4c5d6e первая группа содержит 8 символов, затем три группы по 4 и завершающая группа из 12 символов. В сумме это 32 значащих символа и 4 служебных дефиса.
Каждый значащий символ — шестнадцатеричная цифра от 0 до 9 и от a до f, то есть кодирует 4 бита. 32 символа × 4 бита = 128 бит — это и есть фактический размер идентификатора. Регистр букв (верхний или нижний) значения не имеет: 8A3F2C1E и 8a3f2c1e — один и тот же идентификатор.
Дефисы несут только форматирующую функцию и не участвуют в сравнении значений. Однако при передаче идентификатора в строковом виде через HTTP-запросы, файлы обмена или веб-сервисы дефисы обычно сохраняют, поскольку именно такой формат ожидают функции преобразования.
Где в 1С используется уникальный идентификатор
Каждая ссылка на объект базы данных — справочник, документ, план видов характеристик, план счетов, бизнес-процесс, задача — внутри себя хранит GUID. Именно по нему платформа находит объект, а не по коду или номеру, которые пользователь видит на экране. Код и номер могут повторяться между видами объектов и даже внутри одного вида при определённых настройках, GUID — нет.
Также идентификаторы применяются в планах обмена: при выгрузке объекта в другую базу вместе с данными передаётся его GUID, и база-приёмник ищет соответствие именно по нему. Благодаря этому один и тот же контрагент в двух базах распознаётся как один объект, даже если у него разные коды.
Кроме ссылок, GUID используется в служебных механизмах: идентификаторы информационной базы, пользователей, фоновых заданий, элементов форм. Но в прикладной разработке чаще всего приходится работать именно с идентификаторами ссылок.
Как получить уникальный идентификатор в коде 1С
Для получения GUID существующей ссылки используется метод УникальныйИдентификатор(). Вызов СсылкаНаОбъект.УникальныйИдентификатор() вернёт значение типа УникальныйИдентификатор, а преобразование его к строке даст те самые 36 символов. Обратное действие выполняет конструктор Новый УникальныйИдентификатор("строка").
Для поиска объекта по известному GUID применяется метод менеджера объекта ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)). Важно помнить: метод вернёт ссылку даже если объекта с таким идентификатором в базе нет, поэтому результат нужно проверять на «битость».
// Получить GUID ссылки
GUID = ЭлементСправочника.Ссылка.УникальныйИдентификатор();
СтрокаGUID = Строка(GUID); // 36 символов
// Найти объект по GUID
Ид = Новый УникальныйИдентификатор("8a3f2c1e-9b74-4d5a-9c8e-1f2a3b4c5d6e");
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(Ид);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект не найден");
КонецЕсли;Как узнать GUID объекта без программирования
В типовых конфигурациях на управляемых формах часто доступна команда «Вывести список» или настройка списка, однако GUID в ней не отображается — это внутреннее поле. Практичные способы посмотреть идентификатор без написания кода:
- Обработка «Групповое изменение реквизитов» или универсальные подборы не показывают GUID напрямую, но внешние инструменты разработчика (например, консоль запросов с функцией вывода ссылки) позволяют увидеть его;
- В режиме «Все функции» → «Стандартные» в некоторых версиях доступны служебные команды, но надёжнее — консоль кода;
- В файлах обмена (XML правил конвертации, универсального формата EnterpriseData) GUID присутствует в атрибутах ссылок — файл можно открыть в текстовом редакторе;
- В SQL-базе идентификатор хранится в двоичном виде в поле
_IDRRefтаблицы объекта, и его текстовое представление отличается порядком байтов от привычного вида.
Ограничения и подводные камни при работе с GUID
Главное ограничение: GUID сам по себе не говорит, к какому типу объекта он относится. Строка из 36 символов одинаково выглядит для контрагента и для документа. Если внешняя система передаёт только идентификатор без указания типа, придётся перебирать менеджеры объектов или хранить тип вместе с GUID.
Вторая типичная ситуация — «битые ссылки». Если объект удалили, а где-то осталась строка с его GUID, то ПолучитьСсылку вернёт формально корректную ссылку, но обращение к её реквизитам вызовет ошибку или вернёт неопределённые значения. Проверка через ПолучитьОбъект() на равенство Неопределено — обязательный шаг.
Третий момент — хранение GUID в текстовых полях. Строка(36) вмещает идентификатор полностью, но если поле объявлено длиной 32, дефисы придётся вырезать, и обратное преобразование потребует восстановления формата. Надёжнее хранить идентификатор в реквизите типа УникальныйИдентификатор, а не в строке.
Генерация нового идентификатора и его свойства
Если нужен просто новый уникальный GUID без привязки к объекту, используется конструктор без параметров: Новый УникальныйИдентификатор(). Платформа сгенерирует случайное 128-битное значение. Вероятность коллизии при такой генерации настолько мала, что в практических задачах ей пренебрегают.
При создании нового объекта базы данных платформа присваивает ему GUID автоматически в момент записи. Можно и задать идентификатор вручную через УстановитьСсылкуНового() — это используется в обменах, когда нужно, чтобы объект в базе-приёмнике получил тот же GUID, что и в источнике.
- 1Получите GUID объекта в базе-источнике: Ссылка.УникальныйИдентификатор()
- 2Передайте строковое представление (36 символов) в базу-приёмник
- 3В приёмнике выполните ПолучитьСсылку(Новый УникальныйИдентификатор(Строка))
- 4Проверьте существование объекта через ПолучитьОбъект()
- 5Если объекта нет — создайте его и зафиксируйте GUID через УстановитьСсылкуНового()
Частые вопросы
Сколько символов в уникальном идентификаторе 1С?
36 символов в строковом виде: 32 шестнадцатеричные цифры и 4 дефиса по схеме 8-4-4-4-12. Без дефисов значащих символов 32, что соответствует 128 битам данных.
Может ли GUID двух разных объектов совпасть?
Теоретически вероятность существует, но она настолько мала, что на практике считается нулевой. Внутри одной базы платформа гарантирует уникальность идентификаторов ссылок.
Меняется ли GUID при изменении реквизитов объекта?
Нет. Идентификатор присваивается один раз при создании объекта и не зависит от кода, наименования и любых других данных. Меняется он только при удалении объекта и создании нового.
Как найти объект, если известен только GUID из файла обмена?
Создайте идентификатор конструктором Новый УникальныйИдентификатор(Строка), затем вызовите ПолучитьСсылку у менеджера нужного типа объекта и проверьте результат через ПолучитьОбъект() — если вернулось Неопределено, объекта в базе нет.
Почему GUID из SQL-запроса не совпадает с тем, что показывает 1С?
В таблицах SQL-сервера идентификатор хранится в двоичном виде с другим порядком байтов. Прямое сравнение строк невозможно — преобразование нужно выполнять средствами платформы 1С.
Что лучше использовать для связи баз: код объекта или GUID?
GUID. Код может повторяться, меняться и зависит от настроек нумерации, а идентификатор уникален и постоянен. Именно по GUID работают типовые механизмы обмена данными.
Что важно запомнить
Уникальный идентификатор 1С — это 36 символов в строковом виде (32 шестнадцатеричные цифры и 4 дефиса) и 128 бит внутри платформы. Он неизменен, уникален и служит основным ключом ссылки. При работе с ним проверяйте существование объекта, храните GUID в подходящем типе данных и помните про отличие формата в SQL-таблицах.