Где взять уникальный идентификатор ссылки в 1С 8.3: от навигационной ссылки до SQL

· 9 мин

Содержание

Быстрее всего посмотреть УИД объекта в 1С 8.3 через навигационную ссылку: откройте элемент или документ, нажмите в заголовке формы значок цепочки «Получить ссылку» и скопируйте строку вида e1cib/data/Справочник.Номенклатура?ref=b5c2001e67b7b9e211e2d8a1e3f7c4a0. 32 символа после ref= — это и есть уникальный идентификатор, только записанный в порядке хранения, а не в привычном виде с дефисами.

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

Что такое УИД объекта и зачем он нужен

УИД (уникальный идентификатор, UUID) — 128-битное число, которое платформа присваивает каждому ссылочному объекту при первой записи. Элемент справочника, документ, план видов характеристик, бизнес-процесс — у всех есть свой УИД. Он не меняется при переименовании, перепроведении или смене кода и номера.

Где он реально нужен:

  • 🔄 Обмены данными. Конвертация данных и РИБ сопоставляют объекты в двух базах по УИД. Если в приёмнике объект с таким УИД есть — он обновится, если нет — создастся новый.
  • 🔗 Интеграции и HTTP-сервисы. Внешние системы (сайт, CRM, WMS) хранят УИД как ключ связи с 1С.
  • 🛠 Поиск битых ссылок. Текст <Объект не найден> в поле содержит внутренний номер типа и идентификатор — по нему можно понять, какой объект потерян.
  • 🗄 Работа с таблицами СУБД. В SQL каждая запись справочника или документа хранит УИД в поле _IDRRef.

Стандартная строка УИД выглядит так: e3f7c4a0-d8a1-11e2-b5c2-001e67b7b9e2. У пустой ссылки идентификатор нулевой: 00000000-0000-0000-0000-000000000000.

Как узнать УИД в режиме 1С:Предприятие без программирования

Этот способ доступен любому пользователю, права администратора не нужны.

  1. Откройте карточку элемента справочника или форму документа.
  2. В заголовке формы нажмите значок цепочки «Получить ссылку».
  3. Скопируйте строку из открывшегося окна.

В строке e1cib/data/Справочник.Номенклатура?ref=b5c2001e67b7b9e211e2d8a1e3f7c4a0 часть после ref= — 32 шестнадцатеричных символа без дефисов. Это УИД, но байты в нём переставлены так же, как платформа хранит их в базе.

Как превратить ref в обычный УИД

Разбейте 32 символа на пять частей по позициям и соберите в другом порядке:

Позиции в refПримерМесто в УИД
1–4b5c24-я группа
5–16001e67b7b9e25-я группа
17–2011e23-я группа
21–24d8a12-я группа
25–32e3f7c4a01-я группа

Итог: e3f7c4a0-d8a1-11e2-b5c2-001e67b7b9e2. Именно эту строку возвращает встроенный язык и ждут внешние системы.

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

Как собрать навигационную ссылку из известного УИД

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

  1. Возьмите УИД с дефисами, например e3f7c4a0-d8a1-11e2-b5c2-001e67b7b9e2.
  2. Уберите дефисы и сложите группы в порядке 4-я, 5-я, 3-я, 2-я, 1-я: b5c2 + 001e67b7b9e2 + 11e2 + d8a1 + e3f7c4a0.
  3. Допишите тип объекта: e1cib/data/Справочник.Контрагенты?ref=b5c2001e67b7b9e211e2d8a1e3f7c4a0.
  4. Вставьте строку в «Перейти по ссылке».

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

Где вам нужно увидеть УИД?

Просмотр УИД через Конфигуратор и отладчик

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

УИД конкретного элемента или документа

  1. Запустите Конфигуратор, меню Отладка → Начать отладку → Тонкий клиент (или нужный вам клиент).
  2. Откройте модуль формы объекта и поставьте точку останова (F9) в любом обработчике, например ПриОткрытии или ПриЧтенииНаСервере.
  3. В запущенной базе откройте элемент. Выполнение остановится.
  4. Нажмите Shift+F9 («Вычислить выражение») и введите:
Строка(Объект.Ссылка.УникальныйИдентификатор())

Результат — строка с дефисами. Не забудьте снять точку останова, чтобы она не мешала дальше.

В клиент-серверной базе для остановки в серверном коде отладка должна быть включена на сервере 1С. Если сервер запущен без отладки, его придётся перезапустить с нужным ключом — а это обрыв сеансов всех пользователей. Делайте это на тестовой копии или в нерабочее время.

УИД объектов метаданных

У каждого объекта конфигурации (справочника, реквизита, формы) тоже есть свой идентификатор, но он относится к структуре, а не к данным. Увидеть его можно, выгрузив конфигурацию: Конфигурация → Выгрузить конфигурацию в файлы. В каждом XML-файле у описания объекта есть атрибут uuid="…".

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

Справочник «Идентификаторы объектов метаданных»: что в нём на самом деле

В типовых конфигурациях на Библиотеке стандартных подсистем (БП 3.0, ЗУП 3.1, УТ 11, ERP) есть справочник «Идентификаторы объектов метаданных». Его часто путают с «обработкой для просмотра УИД».

Что в нём хранится:

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

Открыть его можно через Главное меню → Все функции → Справочники. Если пункта «Все функции» нет, включите его в Главное меню → Сервис → Параметры флажком «Отображать команду “Все функции”».

Чего в нём нет: идентификаторов конкретных контрагентов, товаров или документов. Для них используйте навигационную ссылку или код.

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

Для разработчика это главный способ. Основные конструкции:

ЗадачаКод
УИД ссылки как строкаСтрока(Ссылка.УникальныйИдентификатор())
То же через XML-сериализациюXMLСтрока(Ссылка)
Ссылка по известному УИДСправочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаУИД))
Создать объект с заданным УИДОбъект.УстановитьСсылкуНового(Справочники.Контрагенты.ПолучитьСсылку(УИД))

ПолучитьСсылку не проверяет, есть ли объект в базе. Чтобы убедиться, что ссылка не битая, проверьте, что Ссылка.ПолучитьОбъект() не вернул Неопределено.

Вывести УИД сразу для списка

Пример для внешней обработки: выводит наименование и УИД всех контрагентов, у которых в наименовании встречается заданная строка. Процедуру вызывайте с сервера.

&НаСервереБезКонтекста
Процедура ВывестиУИДКонтрагентов(Подстрока)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Контрагенты.Ссылка КАК Ссылка,
    |    Контрагенты.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |    Контрагенты.Наименование ПОДОБНО &Шаблон";
    Запрос.УстановитьПараметр("Шаблон", "%" + Подстрока + "%");

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить(Выборка.Наименование + " — "
            + Строка(Выборка.Ссылка.УникальныйИдентификатор()));
    КонецЦикла;

КонецПроцедуры

В языке запросов функции «получить УИД» нет. Поэтому запрос возвращает ссылку, а идентификатор берётся из неё уже в коде.

Утилита chdbfl и УИД: чего от неё не ждать

В советах на форумах иногда встречается: «посмотрите УИД через chdbfl». Это заблуждение.

chdbfl.exe — утилита проверки физической целостности файловой базы (1Cv8.1CD). Она лежит в каталоге bin установленной платформы и умеет:

  • ✅ проверить файл базы на повреждённые страницы;
  • ✅ попытаться исправить найденные ошибки.

Ни просмотра, ни поиска объектов по идентификатору в ней нет. Для клиент-серверных баз она не применяется вообще.

Запускайте chdbfl только когда с базой никто не работает, и только после копирования файла 1Cv8.1CD. Исправление может удалить повреждённые данные без возможности отката.

Если цель — посмотреть содержимое файловой базы «снаружи», без запуска 1С, для этого есть сторонние просмотрщики формата .1CD. Но надёжнее выгрузить базу в .dt, развернуть копию и смотреть идентификаторы штатно.

УИД в таблицах базы данных SQL Server и PostgreSQL

В клиент-серверной базе ссылочные объекты лежат в таблицах с именами вроде _Reference25 (справочники) и _Document112 (документы). УИД хранится в поле _IDRRef типа binary(16) в SQL Server и bytea в PostgreSQL. Байты в нём переставлены по той же схеме, что и в навигационной ссылке.

Шаг 1. Найти имя таблицы

Номер таблицы в каждой базе свой. Узнать его можно функцией ПолучитьСтруктуруХраненияБазыДанных:

&НаСервереБезКонтекста
Процедура ПоказатьТаблицуНоменклатуры()
    Структура = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
    Для Каждого Строка Из Структура Цикл
        Если Строка.ИмяТаблицы = "Справочник.Номенклатура" Тогда
            Сообщить(Строка.ИмяТаблицыХранения);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Второй параметр Истина возвращает имена в том виде, в каком они записаны в СУБД.

Шаг 2. Запрос с переводом в формат УИД

SQL Server:

SELECT t._Description,
       LOWER(SUBSTRING(h,25,8) + '-' + SUBSTRING(h,21,4) + '-' +
             SUBSTRING(h,17,4) + '-' + SUBSTRING(h,1,4)  + '-' +
             SUBSTRING(h,5,12)) AS uid
FROM (SELECT _Description, CONVERT(varchar(32), _IDRRef, 2) AS h
      FROM dbo._Reference25) t;

PostgreSQL (имена в нижнем регистре):

SELECT _description,
       substr(h,25,8) || '-' || substr(h,21,4) || '-' ||
       substr(h,17,4) || '-' || substr(h,1,4)  || '-' ||
       substr(h,5,12) AS uid
FROM (SELECT _description, encode(_idrref, 'hex') AS h
      FROM _reference25) t;

Только чтение. Изменения в таблицах 1С напрямую в обход платформы ломают целостность данных и итоги регистров. Даже для чтения лучше использовать копию базы: тяжёлый запрос по большой таблице замедлит работу пользователей.

Идентификаторы в консоли администрирования кластера

В консоли администрирования серверов 1С и в утилите rac тоже полно UUID. Но это идентификаторы инфраструктуры, а не данных:

Что видноГдеЗачем
UUID кластераrac cluster listПараметр --cluster для остальных команд rac
UUID информационной базыСвойства базы в консоли, rac infobase summary list --cluster=<UUID>Скрипты обслуживания, привязка к базе
UUID сеанса и соединенияСписок сеансов в консоли, rac session list --cluster=<UUID>Завершение конкретного сеанса

УИД контрагента или документа консоль не показывает ни в каком режиме. Если коллега просит «УИД из кластера», уточните, что именно ему нужно: идентификатор базы или объекта.

Полный список подкоманд и параметров для вашей версии платформы выводит rac help.

Ошибки и вопросы при работе с УИД

Частые ошибки

  • 🔀 Перепутан порядок байтов. Строку из ref= или из _IDRRef подставили в Новый УникальныйИдентификатор() как есть. Результат — ссылка на несуществующий объект. Сначала переставьте группы по таблице из раздела про навигационную ссылку.
  • ❌ Исключение при создании УИД. Новый УникальныйИдентификатор(Строка) падает, если в строке лишний пробел, фигурные скобки или не 36 символов. Обрежьте строку через СокрЛП() и проверьте формат.
  • 👯 Дубли после копирования базы. Если из одной базы сделали две и завели их в обмен, одинаковые УИД в обеих базах сопоставятся друг с другом. Это ожидаемо для РИБ, но неожиданно, когда базы считали независимыми.
  • 🧩 Одинаковый УИД у объектов разных типов. Идентификатор уникален в пределах типа. Поэтому при поиске всегда указывайте и тип (Справочник.Контрагенты), и УИД.
  • 🕳 Битая ссылка после удаления. В поле видно <Объект не найден> (…). Сам объект удалили, а ссылка на него осталась. Восстановить объект можно только из резервной копии или созданием нового элемента с тем же УИД через УстановитьСсылкуНового — второй вариант делайте на копии и проверьте результат перед переносом в рабочую базу.

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

Меняется ли УИД, если изменить код или наименование элемента?
Нет. УИД присваивается при первой записи и остаётся прежним до удаления объекта. Код, номер и наименование на него не влияют.
Сохраняется ли УИД при выгрузке и загрузке базы через .dt?
Да. Выгрузка в .dt переносит данные вместе с идентификаторами, поэтому после загрузки ссылки и навигационные ссылки остаются рабочими.
Есть ли УИД у записей регистров?
У записей регистров сведений и накопления собственного УИД нет: они идентифицируются регистратором и измерениями. УИД есть только у ссылочных объектов.
Можно ли узнать УИД через веб-клиент?
Да. Значок «Получить ссылку» в заголовке формы работает и в веб-клиенте, формат навигационной ссылки тот же.
Почему в навигационной ссылке нет дефисов?
Платформа записывает в ссылку внутреннее представление идентификатора: 16 байт в порядке хранения в базе. Поэтому строка короче и группы в ней переставлены.