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

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

Как посмотреть УИД объекта в 1С 8.3

Как узнать уникальный идентификатор (УИД, GUID) объекта в 1С 8.3: через конфигуратор, встроенный язык, запросы и обработки. Пошаговые инструкции и примеры кода.

Уникальный идентификатор (УИД, он же GUID) — это 36-символьная строка вида «b2c3d4e5-1234-5678-9abc-def012345678», которую платформа 1С присваивает каждому объекту базы при создании: элементу справочника, документу, записи регистра. Именно по УИД строятся ссылки между объектами, работает обмен данными и формируются навигационные ссылки.

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

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

Что такое УИД объекта и где он хранится

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

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

Способ 1: через навигационную ссылку без программирования

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

Ссылка будет иметь вид: e1cib/data/Справочник.Номенклатура?ref=b2c3000050e5a1c811e8f2a3b4c5d6e7. Последняя часть после «ref=» — это и есть идентификатор, но в сжатом шестнадцатеричном представлении. Чтобы получить привычный вид GUID с дефисами, нужно преобразование: байты в строке переставляются в обратном порядке по группам.

Для быстрого преобразования удобно использовать небольшой фрагмент кода во внешней обработке или консоли кода: функция ЗначениеВСтрокуВнутр() или разбор строки ссылки. Если преобразование делать вручную, помните, что порядок байтов в ref-строке инвертирован относительно стандартного GUID.

Способ 2: через встроенный язык — метод УникальныйИдентификатор()

Если у вас есть доступ к конфигуратору или к консоли кода (внешней обработке для выполнения произвольного кода), УИД получается одной строкой. У любой ссылки есть метод УникальныйИдентификатор(), возвращающий значение типа «УникальныйИдентификатор».

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

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

Удобная проверка существования: получить ссылку по УИД и проверить её через запрос ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Ссылка = &Ссылка или через попытку обращения к реквизиту объекта. Если запрос вернул пустой результат — объекта с таким УИД в базе нет.

Способ 3: через консоль запросов для массового вывода

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

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

bsl
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ НЕ ПометкаУдаления");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Строка(Выборка.Ссылка) + " | " + Строка(Выборка.Ссылка.УникальныйИдентификатор()));
КонецЦикла;

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

Способ 4: универсальные обработки и инструменты разработчика

Существуют распространённые внешние инструменты, которые показывают УИД без написания кода. К ним относятся консоль кода, универсальный подбор и обработка объектов, а также подсистема «Инструменты разработчика». В таких обработках обычно достаточно выбрать объект — и идентификатор отобразится в отдельном поле, часто сразу в обоих форматах (стандартный GUID и ref-строка).

Если ваша конфигурация работает на БСП (библиотека стандартных подсистем), в ней могут быть встроенные сервисные функции для работы со ссылками. Проверьте раздел администрирования или служебные обработки, входящие в поставку.

Сравнение способов

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

Подходит пользователю без прав разработчика; ограничение — нужно преобразовывать формат идентификатора

Встроенный язык

Быстро и точно для одного объекта; требует доступа к консоли кода или конфигуратору

Запрос с постобработкой

Единственный удобный путь для массового получения УИД; требует навыков работы с запросами

Внешние обработки

Показывают УИД в обоих форматах без кода; нужно скачать и разрешить запуск внешних обработок

Как найти объект по известному УИД

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

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

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

Типичные ошибки и ограничения

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

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

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

Проверка результата

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

Для задач обмена дополнительная проверка — сравнить УИД объекта в базе-источнике и базе-приёмнике. Совпадающие идентификаторы означают корректное сопоставление; разные при одинаковом объекте — признак дубля, который возник из-за нарушения правил конвертации.

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

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

Обратное получение ссылки по УИД
Норма

Открывается тот же самый объект

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

Объект не найден или открывается другой элемент

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

36 символов с дефисами, вида xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

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

Строка другой длины или без дефисов — вероятно, ref-формат

Сравнение УИД в двух базах
Норма

Идентификаторы совпадают для одного объекта

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

Разные УИД при одинаковом объекте — дубль в обмене

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

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

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

Почему УИД из навигационной ссылки не совпадает с тем, что показывает код?

В навигационной ссылке идентификатор хранится в сжатом виде с инвертированным порядком байтов. Это тот же самый идентификатор, но записанный иначе. Для сравнения приведите обе строки к одному формату — программно или через обработку, показывающую оба представления.

Как узнать УИД, если нет прав на конфигуратор и внешние обработки?

Используйте команду «Получить ссылку» в карточке объекта или скопируйте навигационную ссылку — идентификатор будет в конце строки после «ref=». Этот способ доступен любому пользователю, у которого есть право просмотра самого объекта.

Сохранится ли УИД при обмене между базами?

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

Что означает ссылка вида «Объект не найден» и при чём тут УИД?

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

Можно ли посмотреть УИД записи регистра сведений?

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

Итог

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

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