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

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

Уникальный идентификатор в 1С: что это и как с ним работать

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

Каждый объект ссылочного типа в 1С — элемент справочника, документ, задача, счёт — получает при создании уникальный идентификатор (GUID, Globally Unique Identifier). Это значение генерируется платформой автоматически, не повторяется в пределах информационной базы и не меняется на протяжении всей жизни объекта. Именно по GUID, а не по коду или наименованию, платформа внутренне различает записи.

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

Что представляет собой GUID в 1С и как устроен

Технически GUID — это 128-битное число, отображаемое в виде строки вида 8d3f5a2b-1c4e-4a7b-9d0e-2f6a8b1c3d5e. Вероятность случайного совпадения двух независимо сгенерированных идентификаторов настолько мала, что в практических задачах ей пренебрегают: GUID считается глобально уникальным.

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

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

Где GUID применяется на практике

Главная область применения — обмены данными. Механизмы конвертации данных, планы обмена и типовые синхронизации (например, между «Управлением торговлей» и «Бухгалтерией») сопоставляют объекты разных баз именно по GUID. Если в одной базе создать контрагента вручную, а в другой он придёт из обмена, совпадения наименований недостаточно — система ориентируется на идентификатор.

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

Третья область — интеграции. Веб-сервисы, HTTP-API и внешние системы (сайты, CRM) передают идентификаторы объектов 1С в виде строк GUID, потому что это единственный стабильный ключ, который можно хранить во внешней базе.

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

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

bsl
СсылкаНаКонтрагента = Справочники.Контрагенты.НайтиПоКоду("000000123");
ГУИД = СсылкаНаКонтрагента.УникальныйИдентификатор();
СтрокаГУИД = Строка(ГУИД);
Сообщить(СтрокаГУИД); // например: 8d3f5a2b-1c4e-4a7b-9d0e-2f6a8b1c3d5e

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

bsl
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.УстановитьСсылкуНового(
    Справочники.Номенклатура.ПолучитьСсылку(
        Новый УникальныйИдентификатор("8d3f5a2b-1c4e-4a7b-9d0e-2f6a8b1c3d5e")));
НовыйЭлемент.Наименование = "Позиция из обмена";
НовыйЭлемент.Записать();

Как найти объект по GUID

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

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

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

GUID в обменах и «битые ссылки»

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

В планах обмена GUID играет роль ключа сопоставления. Типовые механизмы при загрузке сначала ищут объект по GUID, затем — по полям поиска (код, наименование, ИНН). Если объект создан вручную в обеих базах, у него разные GUID, и без дополнительных правил поиска появятся дубли. Поэтому начальную выгрузку справочников корректно выполнять из одной базы, а не создавать записи параллельно.

Типичные ошибки при работе с GUID

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

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

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

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

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

Получение GUID ссылки
Норма

Строка из 32 символов с дефисами, повторный вызов даёт то же значение

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

Пустая строка или ошибка — значит, переменная не является ссылкой

Поиск объекта по GUID
Норма

ПолучитьОбъект() вернул объект, реквизиты читаются

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

Объект = Неопределено — записи с таким GUID нет или неверно указан вид метаданных

Установка ссылки нового
Норма

После записи УникальныйИдентификатор совпадает с заданным

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

Ошибка уникальности — GUID уже занят другим объектом

FAQ

Можно ли изменить GUID существующего объекта?

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

Почему у двух одинаковых контрагентов в разных базах разные GUID?

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

Что означает «Объект не найден (84:8d3f...0c7e)» в поле документа?

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

Можно ли найти объект по GUID, не зная, справочник это или документ?

Да, но перебором: нужно последовательно вызвать ПолучитьСсылку() для менеджеров всех ссылочных видов и проверить существование объекта. Готовые инструменты разработчика (ИР и аналоги) делают это автоматически по всем видам метаданных.

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

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

Безопасно ли передавать GUID во внешнюю систему?

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

Итог

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

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