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

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

Как использовать уникальный идентификатор в 1С

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

Уникальный идентификатор (GUID) — это внутренний «паспорт» каждого объекта информационной базы 1С: справочника, документа, плана счетов или любой другой ссылочной сущности. Он представляет собой строку из 36 символов вида 8a2b3c4d-1234-5678-90ab-cdef12345678 и не меняется на протяжении всего времени существования объекта, даже если у него поменяли код, наименование или любые другие реквизиты.

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

Что такое уникальный идентификатор и зачем он нужен

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

Основные сценарии применения GUID:

  • синхронизация и обмен данными между базами (РИБ, универсальный обмен, конвертация данных);
  • интеграция с внешними системами — сайтами, CRM, складскими программами;
  • поиск конкретного объекта, когда известен только идентификатор из файла обмена или сообщения об ошибке;
  • диагностика битых ссылок и «битых» записей после удаления объектов.

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

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

НоменклатураСсылка = Справочники.Номенклатура.НайтиПоКоду("000000123");

Если Не НоменклатураСсылка.Пустая() Тогда

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

СтрокаGUID = Строка(Идентификатор); // "8a2b3c4d-..."

КонецЕсли;

Обратите внимание: метод доступен только у ссылки, а не у объекта данных. Если в переменной находится объект (результат ПолучитьОбъект()), сначала обратитесь к его свойству Ссылка.

Для быстрого разового получения GUID без написания обработок можно использовать консоль кода (входит во многие инструменты разработчика) или внешнюю обработку «показать GUID», которых много в открытом доступе. В управляемых формах некоторые конфигурации также выводят идентификатор в служебных отчётах.

bsl
СтрокаGUID = Строка(МояСсылка.УникальныйИдентификатор());

Как найти объект по известному GUID

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

Идентификатор = Новый УникальныйИдентификатор("8a2b3c4d-1234-5678-90ab-cdef12345678");

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

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

Сообщить("Объект с таким GUID отсутствует в базе");

КонецЕсли;

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

Применение GUID при обмене данными между базами

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

Практические следствия, которые важно учитывать:

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

GUID в интеграциях с внешними системами

При обмене с сайтом, CRM или учётной системой через HTTP-сервисы, файлы XML/JSON или CommerceML идентификатор 1С обычно передаётся как строка. Внешняя система хранит его как первичный ключ и присылает обратно при обновлении данных. Такой подход надёжнее передачи кодов и наименований, которые могут совпадать или меняться.

Рекомендации для интеграций:

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

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

Большинство проблем с идентификаторами возникает из-за неверных предположений о том, как платформа хранит и сравнивает ссылки.

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

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

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

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

Полученный GUID
Норма

Строка из 36 символов в формате 8-4-4-4-12 с дефисами

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

Пустая строка, значение Неопределено или строка иной длины

Поиск по GUID
Норма

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

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

Возвращается Неопределено либо ошибка 'Объект не найден'

Обмен между базами
Норма

Объект в приёмнике обновляется, дублей нет

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

При каждом обмене создаётся новый элемент с тем же наименованием

Частые вопросы об уникальных идентификаторах в 1С

Можно ли узнать GUID объекта без программирования?

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

Одинаковы ли GUID у одинаковых элементов в разных базах?

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

Что делать, если по известному GUID объект не находится?

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

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

Нет. Идентификатор привязан к ссылке и остаётся постоянным при любых изменениях кода, наименования и других данных. Новый GUID появляется только при создании нового объекта.

Можно ли присвоить объекту нужный GUID вручную?

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

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

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

Итог

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

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