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

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

Как получить UID объекта в 1С

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

UID (уникальный идентификатор, он же GUID) в 1С — это 36-символьная строка вида 550e8400-e29b-41d4-a716-446655440000, которая однозначно идентифицирует объект базы: элемент справочника, документ, запись регистра. Именно по UID работают обмены данными, синхронизация с внешними системами, ссылки в файлах выгрузки и механизмы типа «Удаление помеченных объектов».

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

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

Что такое UID в 1С и где он хранится

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

Физически UID хранится в таблице базы данных в поле ссылки. В клиент-серверном варианте (MS SQL, PostgreSQL) его можно увидеть напрямую в таблице, но внутри 1С доступ к нему идёт только через объектную модель или запросы. При удалении объекта его UID не переиспользуется — новый объект получит новый идентификатор.

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

Основной способ — метод УникальныйИдентификатор(), который есть у любой ссылки. Он возвращает значение типа УникальныйИдентификатор:

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

Сообщить(UID); // 550e8400-e29b-41d4-a716-446655440000

Если нужен именно строковый вид (например, для передачи в веб-сервис или записи в файл), результат можно преобразовать функцией Строка() или просто использовать в строковом контексте — приведение выполнится автоматически.

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

UID = Новый УникальныйИдентификатор("550e8400-e29b-41d4-a716-446655440000");

Ссылка = Справочники.Номенклатура.ПолучитьСсылку(UID);

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

Сообщить("Объект с таким UID не найден");

КонецЕсли;

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

Как получить UID через запрос и XMLСтрока

В языке запросов прямой функции «вернуть UID» нет, но есть приёмы. Самый распространённый — выгрузить ссылку и преобразовать её функцией XMLСтрока(): она возвращает строковое представление ссылки, которое для ссылочных типов совпадает с UID.

Запрос = Новый Запрос("ВЫБРАТЬ Товар.Ссылка ИЗ Справочник.Номенклатура КАК Товар");

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить(XMLСтрока(Выборка.Ссылка));

КонецЦикла;

Ещё один вариант — функция ЗначениеВСтрокуВнутр(), которая возвращает внутреннее строковое представление значения, включая UID. Этот формат используется в файлах выгрузки и при копировании объектов между базами через буфер. Учтите: ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр работают только на сервере и в толстом клиенте, в веб-клиенте они недоступны.

Как посмотреть UID без программирования

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

Консоль кода или внешняя обработка

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

Навигационная ссылка

В форме объекта можно получить навигационную ссылку вида e1cib/data/Справочник.Номенклатура?ref=.... Хвост после ref= — это шестнадцатеричное представление ссылки, из которого UID восстанавливается перестановкой байтов. Вручную это неудобно, но существуют обработки-конвертеры, которые делают преобразование автоматически.

Файл выгрузки

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

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

UID в обменах, COM и внешних системах

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

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

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

Проверка результата и типичные ошибки

Корректный UID легко проверить визуально: 36 символов, формат 8-4-4-4-12 шестнадцатеричных цифр, разделённых дефисами. Если вы получили что-то другое — например, навигационную ссылку целиком или внутреннее представление с префиксом — это ещё не UID, требуется преобразование.

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

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

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

Формат строки
Норма

36 символов, 4 дефиса, только цифры и буквы a-f

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

Есть русские буквы, префиксы e1cib или длина отличается

Обратный поиск
Норма

ПолучитьСсылку() + ПолучитьОбъект() возвращают реальный объект

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

ПолучитьОбъект() вернул Неопределено — объект удалён или UID из другой базы

Стабильность
Норма

Повторный вызов метода даёт ту же строку

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

UID меняется между вызовами — вы работаете с разными объектами

Часто задаваемые вопросы

Можно ли получить UID записи регистра сведений?

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

Совпадает ли UID объекта в разных базах после обмена?

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

Как получить UID текущего пользователя информационной базы?

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

Можно ли задать объектам нужный UID при создании?

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

Почему УникальныйИдентификатор() у нового объекта до записи даёт «пустой» результат?

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

Где посмотреть UID без прав на конфигуратор и внешние обработки?

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

Итог

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

UID объекта в 1С получают методом Ссылка.УникальныйИдентификатор(); для строки — Строка() или XMLСтрока(). Обратный поиск — через ПолучитьСсылку(Новый УникальныйИдентификатор(Строка)) с обязательной проверкой существования объекта. UID неизменен в течение жизни объекта и является основой всех механизмов обмена, поэтому менять его вручную в базе недопустимо.