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

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

УИД в 1С 8.3: что это такое и как с ним работать

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

УИД (уникальный идентификатор, он же GUID — Globally Unique Identifier) в 1С 8.3 — это внутренний идентификатор, который платформа автоматически присваивает каждому объекту информационной базы: элементу справочника, документу, записи регистра. Он выглядит как строка вида b8f3a2c1-4d5e-6f70-8192-a3b4c5d6e7f8 и гарантированно не повторяется в пределах базы, а при правильной работе обменов — и между разными базами.

Понимание того, что такое УИД, критично в трёх ситуациях: при настройке обмена данными между базами, при интеграции 1С с внешними системами (сайт, CRM, складское ПО) и при поиске «битых ссылок» — объектов, которые были удалены, но на них остались ссылки. Во всех этих задачах именно GUID связывает объекты между собой.

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

Что такое УИД и как он устроен

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

Важно отличать УИД от других реквизитов, которые тоже «идентифицируют» объект: код справочника, номер документа, наименование. Эти реквизиты видит пользователь, их можно редактировать, они могут повторяться между базами. УИД же скрыт от пользователя, неизменен и уникален. Именно поэтому обмены данными сопоставляют объекты по GUID, а не по коду или наименованию.

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

Где УИД используется на практике

Основная область применения — обмен данными. При выгрузке объекта из одной базы и загрузке в другую приёмник ищет объект с таким же GUID. Если находит — обновляет его, если нет — создаёт новый с переданным идентификатором. Благодаря этому один и тот же контрагент в «Управлении торговлей» и в «Бухгалтерии» остаётся одним и тем же объектом.

Вторая область — интеграция с внешними системами. При передаче данных на сайт или в CRM в качестве ключа объекта почти всегда передаётся именно УИД, потому что код и наименование могут меняться, а идентификатор — нет.

Третья ситуация — диагностика. Когда в отчёте или журнале появляется запись вида «Объект не найден (b8f3a2c1-...)», это означает битую ссылку: объект удалён, а ссылка на него осталась. По УИД из текста ошибки можно определить, что именно было удалено.

Как узнать УИД объекта в 1С 8.3

Штатной кнопки «показать УИД» в пользовательском интерфейсе нет, поэтому применяют программные способы. Самый простой — через встроенный язык:

bsl
Ссылка = Справочники.Контрагенты.НайтиПоКоду("000000123");
УИД = Ссылка.УникальныйИдентификатор();
Сообщить(Строка(УИД));

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

Обратная задача — найти объект по известному УИД — решается методом ПолучитьСсылку:

bsl
УИД = Новый УникальныйИдентификатор("b8f3a2c1-4d5e-6f70-8192-a3b4c5d6e7f8");
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(УИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
    Сообщить("Объект не найден");
КонецЕсли;
Порядок действий: найти объект по битой ссылке
  1. 1
    Скопируйте GUID из текста ошибки «Объект не найден»
  2. 2
    Откройте консоль кода или конфигуратор
  3. 3
    Создайте УникальныйИдентификатор из строки и вызовите ПолучитьСсылку для нужного типа
  4. 4
    Проверьте, существует ли объект: ПолучитьОбъект() вернёт Неопределено для удалённого
  5. 5
    Если объект удалён — решите, восстанавливать его или очищать ссылки

УИД при обмене данными и конвертации

В планах обмена и правилах конвертации данных (КД 2 и КД 3) сопоставление объектов строится именно на GUID. При первой загрузке объекта в базу-приёмник конвертация может создать объект с заранее заданным идентификатором — для этого у ссылки вызывается ПолучитьСсылку(УИД), а затем объекту присваивается эта ссылка до записи.

Отсюда следует важное правило: если объект создали независимо в двух базах (например, вручную завели одного контрагента и там, и там), у него будут два разных УИД. При обмене такие объекты не сопоставятся автоматически и задвоятся. Решение — либо сопоставление по реквизитам поиска (ИНН, наименование) в правилах конвертации, либо ручная установка ссылки с нужным GUID.

Битые ссылки и типичные ошибки

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

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

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

Как проверить результат и не навредить данным

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

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

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

Открытие объекта
Норма

Форма открывается, реквизиты заполнены

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

Ошибка «Объект не найден» или пустая форма

Обмен данными
Норма

Объекты сопоставляются по УИД, дублей нет

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

В приёмнике появились дубли или предупреждения о поиске

Ссылки на объект
Норма

Документы и регистры отображают объект корректно

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

В полях виден GUID в скобках вместо представления

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

Итог

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

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

Частые вопросы

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

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

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

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

Что означает надпись «Объект не найден» с длинным кодом?

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

Совпадут ли УИД одного объекта в двух базах после обмена?

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

Есть ли УИД у записей регистров?

У записей регистров сведений и накопления отдельного GUID нет: они идентифицируются набором измерений (для сведений) или регистратором и номером строки (для остальных). У самого регистратора — документа — УИД есть.