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

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

UID в 1С: что это такое и зачем нужен уникальный идентификатор

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

UID (часто пишут УИД, GUID, UUID) в 1С — это уникальный идентификатор, который платформа автоматически присваивает каждому объекту базы: элементу справочника, документу, плану счетов, записи регистра. Он выглядит как строка вида 8b3f4e2a-1c5d-4a7b-9e0f-2d6c8a1b3f45 и остаётся неизменным на протяжении всей жизни объекта, даже если пользователь поменяет все его реквизиты.

В отличие от кода или номера документа, которые видит пользователь и может редактировать, UID работает «под капотом». Именно по нему 1С связывает объекты между собой: когда в документе выбран контрагент, в базе хранится не название и не код, а ссылка, построенная на уникальном идентификаторе.

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

Что такое UID в 1С простыми словами

UID — это сокращение от Unique Identifier, «уникальный идентификатор». В документации 1С чаще встречается термин GUID (Globally Unique Identifier) — по сути это одно и то же: стандартизированное 128-битное значение, записываемое в виде 32 шестнадцатеричных символов, сгруппированных через дефисы.

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

Важное свойство: UID не несёт смысловой нагрузки. По нему нельзя понять, что это за объект, когда он создан и кем. Это технический «номер паспорта» записи, а не её описание.

Чем UID отличается от кода и номера

Начинающие пользователи и разработчики часто смешивают три разных понятия: код справочника, номер документа и уникальный идентификатор. Это приводит к ошибкам при настройке обменов и поиске данных.

ПараметрКод / номерUID (GUID)
Кто назначаетПлатформа автоматически или пользователь вручнуюТолько платформа при создании объекта
Можно изменитьДа, если не запрещено настройкамиНет (только программно при записи нового объекта)
УникальностьВ пределах вида объекта и периода нумерацииГлобальная, в любых базах
ВидимостьОтображается в формах и отчётахНе отображается в интерфейсе по умолчанию
НазначениеУдобство пользователя, сортировка, печатьВнутренние ссылки, обмен данными

Практический вывод: код и номер нужны людям, UID — машинам. Если при обмене между базами сопоставлять объекты по коду или наименованию, рано или поздно возникнут дубли: коды пересекаются, наименования редактируют. Сопоставление по UID — единственный надёжный вариант.

Где и как платформа использует UID

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

Второй сценарий — обмен данными. В планах обмена, конвертации данных и универсальных форматах (EnterpriseData, CommerceML) объекты сопоставляются по UID. Если элемент справочника уже выгружался, приёмник находит его по идентификатору и обновляет, а не создаёт копию.

Третий сценарий — навигационные ссылки. Адрес вида e1cib/data/Справочник.Номенклатура?ref=... содержит идентификатор объекта. По такой ссылке можно открыть конкретный элемент из внешней программы или письма.

Как узнать UID объекта

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

Через встроенный язык

Если есть доступ к конфигуратору или внешней обработке с консолью кода, идентификатор получают методом УникальныйИдентификатор() у ссылки на объект:

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

Через навигационную ссылку

Во многих конфигурациях можно скопировать ссылку на объект (команда «Получить ссылку» или сочетание клавиш в веб-клиенте). В конце навигационной ссылки после параметра ref= содержится идентификатор в закодированном виде — его можно декодировать штатными средствами или готовыми обработками.

Через внешние обработки

Существуют распространённые обработки «показать GUID объекта», которые выводят идентификатор выбранного элемента в готовом для обмена виде. Их удобно использовать, когда нужно быстро сообщить UID коллеге, настраивающему обмен в другой базе.

Порядок действий
  1. 1
    Откройте объект в базе-источнике и получите его UID через обработку или код
  2. 2
    Передайте идентификатор в базу-приёмник
  3. 3
    В приёмнике выполните поиск: Справочники.Имя.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаУИД))
  4. 4
    Проверьте, что найденный объект не пустой и соответствует ожидаемому элементу

UID при обмене между базами: типичные задачи

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

Решение строится в три шага: узнать UID объекта в базе-источнике, найти соответствующий объект в приёмнике и заменить его идентификатор на нужный при записи. Во встроенном языке это делается через установку ссылки новому объекту с последующей заменой ссылок, либо через специализированные обработки «поиск и замена дублей» с переносом UID.

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

bsl
НовыйУИД = Новый УникальныйИдентификатор("8b3f4e2a-1c5d-4a7b-9e0f-2d6c8a1b3f45");
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(НовыйУИД);
НовыйОбъект = Справочники.Номенклатура.СоздатьЭлемент();
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
НовыйОбъект.Наименование = "Тестовый элемент";
НовыйОбъект.Записать();

Ошибка «Объект не найден» и битые ссылки

Характерный признак проблем с идентификаторами — записи вида <Объект не найден> (123:8b3f...) в документах и отчётах. Это означает, что в поле хранится ссылка на UID, которого больше нет в базе: объект удалили физически, базу восстановили из старой копии или обмен привёл данные с несуществующим идентификатором.

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

Типичные ошибки
01
Сопоставление объектов при обмене по коду или наименованию — приводит к дублям при первом же расхождении данных
02
Удаление объектов вместо пометки на удаление — рождает битые ссылки в документах
03
Выгрузка UID в текстовом виде с потерей регистра или дефисов — идентификатор перестаёт распознаваться
04
Попытка изменить UID объекта напрямую в таблицах СУБД — нарушает целостность базы и лишает поддержки

Ограничения и безопасная работа с идентификаторами

UID нельзя редактировать через интерфейс, и это осознанное ограничение платформы. Все штатные механизмы рассчитаны на то, что идентификатор неизменен: на него опираются ссылки, планы обмена, история данных.

При проектировании интеграций учитывайте: UID привязан к конкретной базе. Один и тот же по смыслу элемент справочника в двух независимо созданных базах имеет разные идентификаторы. Поэтому при запуске обмена первичное сопоставление выполняют по ключевым реквизитам (ИНН, артикул), а дальше работают по UID.

Маршрут решения

Как выбрать действие

В обмене появились дубли элементовНайдите пару дублей, перенесите UID основного элемента на дубль или наоборот и замените ссылки обработкой
В документах видны записи «Объект не найден»Восстановите удалённый объект с исходным UID из копии базы, затем запустите тестирование и исправление
Внешняя система должна ссылаться на объекты 1СПередавайте ей UID при выгрузке и храните его как внешний ключ, а не код или наименование
Нужно создать объект с заданным идентификаторомИспользуйте ПолучитьСсылку с Новый УникальныйИдентификатор и УстановитьСсылкуНового перед записью
Итог

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

UID — неизменный технический идентификатор объекта, по которому 1С строит ссылки и сопоставляет данные при обмене. Код и номер предназначены для пользователя, UID — для системы. Все операции с подменой идентификаторов выполняются только на копии базы с последующей проверкой целостности.

Частые вопросы о UID в 1С

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

Штатными средствами интерфейса — нет. Программно это возможно только косвенно: создаётся новый объект с нужным идентификатором, а все ссылки со старого объекта переносятся на него специализированной обработкой. Прямая правка таблиц СУБД недопустима.

Одинаковый ли UID у объекта в разных базах?

Только если объект попал в базы копированием самой базы или обменом, который переносит идентификаторы. Если элемент создавался в каждой базе независимо, UID будут разными — их сопоставляют при первичной синхронизации.

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

В поле хранится ссылка на идентификатор, которого нет в базе: объект был удалён физически или база восстановлена из копии, где его ещё не было. Набор символов в скобках — это как раз тип объекта и его UID.

Как передать UID объекта во внешнюю систему?

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

Чем UID отличается от UUID?

По сути ничем: UUID — название общего стандарта, GUID — термин Microsoft, UID — разговорное сокращение. В контексте 1С все три слова обозначают один и тот же 128-битный уникальный идентификатор объекта.

Влияет ли UID на производительность базы?

Сам по себе нет, но случайные идентификаторы увеличивают фрагментацию индексов в СУБД по сравнению с последовательными ключами. На практике это заметно только на очень больших таблицах и учитывается администратором СУБД при настройке индексов.