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

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

Как создать GUID в 1С

Как создать GUID в 1С: метод УникальныйИдентификатор, генерация в запросе, коде и по ссылке. Примеры кода, проверка результата и типичные ошибки.

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

Чаще всего GUID создают для интеграции с внешними системами, сопоставления объектов между базами, формирования ключей в регистрах сведений и при обмене данными через веб-сервисы. Понимание того, как правильно получить, сгенерировать и сравнить идентификаторы, избавляет от массы трудноуловимых ошибок — от дублирования записей до «битых» связей между базами.

Ниже разобраны все практические способы: генерация нового GUID, получение идентификатора существующего объекта, создание идентификатора из строки, работа с GUID в запросах и типовые ошибки, которые допускают даже опытные разработчики.

Что такое GUID в 1С и где он используется

Уникальный идентификатор в 1С — это значение специального типа, которое записывается в виде строки из 36 символов: 32 шестнадцатеричные цифры, сгруппированные через дефисы, например 6f9619ff-8b86-d011-b42d-00cf4fc964ff. Каждая ссылка на объект базы данных имеет такой идентификатор, и именно он, а не код или номер, является настоящим первичным ключом записи в таблице SQL.

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

Способ 1: генерация нового GUID в коде

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

НовыйГУИД = Новый УникальныйИдентификатор;

Сообщить(Строка(НовыйГУИД));

// Пример вывода: a3f2c1d4-8e5b-4a9c-b7d2-1e6f8a0c3d5e

Конструктор также принимает строковый параметр — тогда GUID создаётся из заданной строки. Это нужно, когда идентификатор пришёл из внешней системы и его надо преобразовать в типизированное значение для сравнения или поиска:

ГУИДИзСтроки = Новый УникальныйИдентификатор("6f9619ff-8b86-d011-b42d-00cf4fc964ff");

Если передать строку в неверном формате, платформа выдаст ошибку преобразования. Поэтому при приёме идентификаторов из внешних источников стоит оборачивать вызов в попытку/исключение или предварительно проверять длину и состав строки.

1c
НовыйГУИД = Новый УникальныйИдентификатор; // случайный GUID
ГУИДИзСтроки = Новый УникальныйИдентификатор("6f9619ff-8b86-d011-b42d-00cf4fc964ff");

Способ 2: получить GUID существующего объекта

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

ГУИДТовара = Справочники.Номенклатура.НайтиПоКоду("00000123").УникальныйИдентификатор();

СтрокаГУИД = Строка(ГУИДТовара); // для передачи во внешнюю систему

Обратная задача — найти объект по известному GUID — решается методом ПолучитьСсылку() менеджера соответствующего типа:

ГУИД = Новый УникальныйИдентификатор(СтрокаИзВнешнейСистемы);

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

Если Ссылка.ПолучитьОбъект() = Неопределено Тогда

// Объект с таким GUID в базе отсутствует

КонецЕсли;

Учтите, что ПолучитьСсылку() вернёт ссылку даже для несуществующего объекта — проверка на существование выполняется отдельно, попыткой обращения к данным через ссылку.

Способ 3: GUID в запросе

В языке запросов 1С получить идентификатор ссылки можно функцией УНИКАЛЬНЫЙИДЕНТИФИКАТОР(). Это удобно при выгрузке данных для обмена, когда нужно выбрать GUID сразу для тысяч записей без обхода в цикле.

ВЫБРАТЬ

Товары.Ссылка КАК Ссылка,

УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Товары.Ссылка) КАК ГУИД

ИЗ

Справочник.Номенклатура КАК Товары

Обратная операция — поиск ссылки по GUID в запросе — напрямую не поддерживается: функции, обратной УНИКАЛЬНЫЙИДЕНТИФИКАТОР, в языке запросов нет. Если нужно сравнить ссылку с идентификатором из параметра, сначала преобразуйте строку в ссылку через ПолучитьСсылку() в коде, а уже ссылку передавайте в запрос параметром.

Сравнение способов создания и получения GUID

Выбор способа зависит от задачи: нужен новый идентификатор, идентификатор существующего объекта или преобразование строки. Таблица ниже помогает сориентироваться.

СпособСинтаксисКогда применять
Конструктор без параметровНовый УникальныйИдентификаторНужен новый случайный GUID для своих целей
Конструктор со строкойНовый УникальныйИдентификатор("...")GUID пришёл из внешней системы в виде строки
Метод ссылкиСсылка.УникальныйИдентификатор()Получить GUID существующего объекта базы
Функция запросаУНИКАЛЬНЫЙИДЕНТИФИКАТОР(Ссылка)Массовая выгрузка идентификаторов в выборке

Сравнение вариантов

Новый УникальныйИдентификатор

Быстро и просто, но значение не связано ни с одним объектом базы — подходит для собственных ключей

Ссылка.УникальныйИдентификатор()

Даёт постоянный идентификатор объекта; работает только для ссылочных типов

УНИКАЛЬНЫЙИДЕНТИФИКАТОР в запросе

Оптимально для массовой выборки; не позволяет искать объект по GUID в обратную сторону

Практический пример: сопоставление объектов между базами

Типовая задача интеграции — хранить соответствие «наш объект ↔ GUID во внешней системе». Для этого обычно создают регистр сведений с измерением «Объект» и ресурсом «ИдентификаторВнешний» строкового типа. При выгрузке объекта его GUID сохраняется в регистр, при загрузке — по строке ищется ссылка.

Упрощённый фрагмент кода выглядит так:

// Сохранение соответствия

МенеджерЗаписи = РегистрыСведений.СоответствияОбъектов.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Объект = СсылкаНаТовар;

МенеджерЗаписи.ИдентификаторВнешний = Строка(СсылкаНаТовар.УникальныйИдентификатор());

МенеджерЗаписи.Записать();

// Поиск по внешнему идентификатору

ГУИД = Новый УникальныйИдентификатор(СтрокаИзФайла);

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

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

Проверка результата и типичные ошибки

После генерации или преобразования GUID полезно убедиться, что значение корректно. Признаки правильного результата: строковое представление имеет длину 36 символов, содержит четыре дефиса в фиксированных позициях, а сравнение двух одинаковых идентификаторов оператором «=» даёт Истина. Пустой идентификатор имеет вид 00000000-0000-0000-0000-000000000000 — его появление обычно сигнализирует об ошибке в логике.

Наиболее частые ошибки при работе с GUID в 1С:

  • попытка вызвать УникальныйИдентификатор() у объекта, а не у ссылки — возникает ошибка «Метод объекта не обнаружен»;
  • сравнение GUID со строкой напрямую: типы разные, сравнение даст Ложь даже при совпадающем тексте — сначала преобразуйте строку через конструктор;
  • использование ПолучитьСсылку() без проверки существования объекта — ведёт к «битым ссылкам» в данных;
  • самостоятельная сборка GUID из случайных символов вместо конструктора — теряется гарантия уникальности и корректность формата;
  • разный регистр букв в строковом представлении при сравнении строк с внешней системой — приводите обе стороны к одному регистру через НРег().
Типичные ошибки
01
Сравнение GUID со строкой без преобразования — условие никогда не выполняется
02
Отсутствие проверки существования объекта после ПолучитьСсылку() — появляются битые ссылки
03
Генерация GUID вручную конкатенацией символов — риск дублей и невалидного формата
04
Вызов УникальныйИдентификатор() у объекта вместо ссылки — ошибка времени выполнения
Контрольные точки

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

Формат строки
Норма

36 символов, 4 дефиса, шестнадцатеричные цифры

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

Другая длина, лишние символы, пробелы

Сравнение идентификаторов
Норма

ГУИД1 = ГУИД2 даёт Истина для одинаковых значений

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

Сравнение со строкой всегда Ложь

Ссылка по GUID
Норма

Ссылка.ПолучитьОбъект() возвращает объект

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

Возвращается Неопределено — объекта нет в базе

Ограничения и нюансы

Тип «УникальныйИдентификатор» нельзя использовать как тип измерения регистра или реквизита напрямую в некоторых контекстах — чаще всего GUID хранят в строковом реквизите длиной 36 или 50 символов (с запасом на фигурные скобки, если внешняя система их добавляет). Также помните, что при обмене через COM-соединение GUID передаётся как строка и требует преобразования на принимающей стороне.

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

При передаче GUID в HTTP-запросах и JSON используйте строковое представление в нижнем регистре без фигурных скобок — такой формат понимают большинство внешних систем, и не возникает расхождений при сравнении.
ПЗ
Практическое замечание

FAQ

Как создать GUID в 1С без привязки к объекту?

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

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

Получите ссылку на элемент (например, через НайтиПоКоду или НайтиПоНаименованию) и вызовите у неё метод УникальныйИдентификатор(). Для массовой выборки используйте функцию УНИКАЛЬНЫЙИДЕНТИФИКАТОР в запросе.

Можно ли найти объект по GUID из строки?

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

Почему сравнение GUID со строкой возвращает Ложь?

Потому что «УникальныйИдентификатор» и «Строка» — разные типы, и оператор равенства не выполняет неявное преобразование. Преобразуйте строку в GUID конструктором или сам GUID в строку функцией Строка(), и только потом сравнивайте.

В каком реквизите хранить GUID в базе?

Тип «УникальныйИдентификатор» доступен для реквизитов, но на практике чаще используют строку длиной 36–50 символов: это упрощает обмен, индексацию и совместимость с внешними системами, которые могут добавлять фигурные скобки или другой регистр.

Меняется ли GUID объекта со временем?

Нет. Идентификатор присваивается ссылке при создании и остаётся неизменным до удаления объекта. Именно поэтому GUID надёжнее кода или номера для долгосрочного сопоставления объектов между системами.

Итог

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

Новый GUID создаётся конструктором Новый УникальныйИдентификатор, идентификатор объекта — методом Ссылка.УникальныйИдентификатор(), поиск по строке — через ПолучитьСсылку() с обязательной проверкой существования. Сравнивайте GUID только с GUID, а строки — со строками.