Разработка и Конфигурация · 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 не найден");
КонецЕсли;
UID = Ссылка.УникальныйИдентификатор();
СтрокаUID = Строка(UID);
ОбратнаяСсылка = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаUID));Как получить UID через запрос и XMLСтрока
В языке запросов прямой функции «вернуть UID» нет, но есть приёмы. Самый распространённый — выгрузить ссылку и преобразовать её функцией XMLСтрока(): она возвращает строковое представление ссылки, которое для ссылочных типов совпадает с UID.
Запрос = Новый Запрос("ВЫБРАТЬ Товар.Ссылка ИЗ Справочник.Номенклатура КАК Товар");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(XMLСтрока(Выборка.Ссылка));
КонецЦикла;
Ещё один вариант — функция ЗначениеВСтрокуВнутр(), которая возвращает внутреннее строковое представление значения, включая UID. Этот формат используется в файлах выгрузки и при копировании объектов между базами через буфер. Учтите: ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр работают только на сервере и в толстом клиенте, в веб-клиенте они недоступны.
Как посмотреть UID без программирования
Если вы не разработчик, а UID нужен один раз — например, для техподдержки или настройки обмена — есть несколько рабочих вариантов без написания кода в конфигураторе.
Консоль кода или внешняя обработка
Во многих типовых конфигурациях и в подсистеме БСП есть инструменты разработчика (например, «Консоль кода», «Инструменты разработчика»). Откройте такую консоль и выполните одну строку с методом УникальныйИдентификатор() для нужной ссылки — это самый быстрый путь.
Навигационная ссылка
В форме объекта можно получить навигационную ссылку вида e1cib/data/Справочник.Номенклатура?ref=.... Хвост после ref= — это шестнадцатеричное представление ссылки, из которого UID восстанавливается перестановкой байтов. Вручную это неудобно, но существуют обработки-конвертеры, которые делают преобразование автоматически.
Файл выгрузки
При выгрузке объекта в XML (через обмен или «Выгрузить в файл» в некоторых конфигурациях) UID виден прямо в тексте файла в атрибуте ссылки. Способ громоздкий, но не требует никаких прав, кроме доступа к выгрузке.
- 1Откройте консоль кода или обработку произвольного кода в режиме предприятия
- 2Найдите нужную ссылку (через запрос или подбор)
- 3Выполните Сообщить(Ссылка.УникальныйИдентификатор())
- 4Скопируйте строку из окна сообщений
- 5Проверьте: строка должна содержать 36 символов с четырьмя дефисами
UID в обменах, COM и внешних системах
При интеграции с внешними системами UID передают как строку. В HTTP-сервисах и веб-сервисах 1С стандартный приём — получить ссылку, взять Строка(Ссылка.УникальныйИдентификатор()) и отдать её в JSON или XML. На стороне приёмника объект ищут через ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаИзЗапроса)).
При COM-подключении к другой базе 1С UID доступен так же — через метод УникальныйИдентификатор() у COM-объекта ссылки. Это позволяет сопоставлять объекты двух баз без регистрации в планах обмена.
Отдельный случай — планы обмена. При регистрации изменений платформа сопоставляет объекты именно по UID, поэтому при ручной загрузке данных важно не «потерять» исходный идентификатор: если объект загрузится как новый, в базе появится дубль с другим UID, и дальнейшая синхронизация будет создавать конфликты.
Проверка результата и типичные ошибки
Корректный UID легко проверить визуально: 36 символов, формат 8-4-4-4-12 шестнадцатеричных цифр, разделённых дефисами. Если вы получили что-то другое — например, навигационную ссылку целиком или внутреннее представление с префиксом — это ещё не 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 неизменен в течение жизни объекта и является основой всех механизмов обмена, поэтому менять его вручную в базе недопустимо.