Разработка и Конфигурация · 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 объекта
В стандартном интерфейсе идентификатор скрыт, поэтому получить его можно несколькими способами в зависимости от доступных прав.
Через встроенный язык
Если есть доступ к конфигуратору или внешней обработке с консолью кода, идентификатор получают методом УникальныйИдентификатор() у ссылки на объект:
Ссылка = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если Не Ссылка.Пустая() Тогда
УИД = Ссылка.УникальныйИдентификатор();
Сообщить(Строка(УИД));
КонецЕсли;Через навигационную ссылку
Во многих конфигурациях можно скопировать ссылку на объект (команда «Получить ссылку» или сочетание клавиш в веб-клиенте). В конце навигационной ссылки после параметра ref= содержится идентификатор в закодированном виде — его можно декодировать штатными средствами или готовыми обработками.
Через внешние обработки
Существуют распространённые обработки «показать GUID объекта», которые выводят идентификатор выбранного элемента в готовом для обмена виде. Их удобно использовать, когда нужно быстро сообщить UID коллеге, настраивающему обмен в другой базе.
- 1Откройте объект в базе-источнике и получите его UID через обработку или код
- 2Передайте идентификатор в базу-приёмник
- 3В приёмнике выполните поиск: Справочники.Имя.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаУИД))
- 4Проверьте, что найденный объект не пустой и соответствует ожидаемому элементу
UID при обмене между базами: типичные задачи
Наиболее частая практическая задача — сопоставить один и тот же объект в двух базах. Например, контрагент заведён в учётной системе и в CRM отдельно, идентификаторы разные, и обмен создаёт дубли.
Решение строится в три шага: узнать UID объекта в базе-источнике, найти соответствующий объект в приёмнике и заменить его идентификатор на нужный при записи. Во встроенном языке это делается через установку ссылки новому объекту с последующей заменой ссылок, либо через специализированные обработки «поиск и замена дублей» с переносом UID.
Обратная задача — создать объект с заранее заданным идентификатором. Так поступают, когда внешняя система (сайт, мобильное приложение) генерирует GUID сама и передаёт его в 1С, чтобы дальше синхронизировать записи по этому ключу.
НовыйУИД = Новый УникальныйИдентификатор("8b3f4e2a-1c5d-4a7b-9e0f-2d6c8a1b3f45");
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(НовыйУИД);
НовыйОбъект = Справочники.Номенклатура.СоздатьЭлемент();
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
НовыйОбъект.Наименование = "Тестовый элемент";
НовыйОбъект.Записать();Ошибка «Объект не найден» и битые ссылки
Характерный признак проблем с идентификаторами — записи вида <Объект не найден> (123:8b3f...) в документах и отчётах. Это означает, что в поле хранится ссылка на UID, которого больше нет в базе: объект удалили физически, базу восстановили из старой копии или обмен привёл данные с несуществующим идентификатором.
Битые ссылки не чинятся «сами собой». Порядок действий: определить, какой объект был потерян (по типу в ссылке и журналу регистрации), восстановить его из архивной копии с исходным UID либо создать новый объект и программно присвоить ему нужный идентификатор, затем проверить базу через «Тестирование и исправление».
Ограничения и безопасная работа с идентификаторами
UID нельзя редактировать через интерфейс, и это осознанное ограничение платформы. Все штатные механизмы рассчитаны на то, что идентификатор неизменен: на него опираются ссылки, планы обмена, история данных.
При проектировании интеграций учитывайте: UID привязан к конкретной базе. Один и тот же по смыслу элемент справочника в двух независимо созданных базах имеет разные идентификаторы. Поэтому при запуске обмена первичное сопоставление выполняют по ключевым реквизитам (ИНН, артикул), а дальше работают по UID.
Как выбрать действие
Что важно запомнить
UID — неизменный технический идентификатор объекта, по которому 1С строит ссылки и сопоставляет данные при обмене. Код и номер предназначены для пользователя, UID — для системы. Все операции с подменой идентификаторов выполняются только на копии базы с последующей проверкой целостности.
Частые вопросы о UID в 1С
Можно ли изменить UID существующего объекта?
Штатными средствами интерфейса — нет. Программно это возможно только косвенно: создаётся новый объект с нужным идентификатором, а все ссылки со старого объекта переносятся на него специализированной обработкой. Прямая правка таблиц СУБД недопустима.
Одинаковый ли UID у объекта в разных базах?
Только если объект попал в базы копированием самой базы или обменом, который переносит идентификаторы. Если элемент создавался в каждой базе независимо, UID будут разными — их сопоставляют при первичной синхронизации.
Что означает запись «Объект не найден» с набором символов?
В поле хранится ссылка на идентификатор, которого нет в базе: объект был удалён физически или база восстановлена из копии, где его ещё не было. Набор символов в скобках — это как раз тип объекта и его UID.
Как передать UID объекта во внешнюю систему?
При выгрузке идентификатор преобразуют в строку функцией Строка(Ссылка.УникальныйИдентификатор()) и включают в XML, JSON или CSV. Внешняя система хранит его как свой внешний ключ и возвращает при обратной загрузке.
Чем UID отличается от UUID?
По сути ничем: UUID — название общего стандарта, GUID — термин Microsoft, UID — разговорное сокращение. В контексте 1С все три слова обозначают один и тот же 128-битный уникальный идентификатор объекта.
Влияет ли UID на производительность базы?
Сам по себе нет, но случайные идентификаторы увеличивают фрагментацию индексов в СУБД по сравнению с последовательными ключами. На практике это заметно только на очень больших таблицах и учитывается администратором СУБД при настройке индексов.