Где взять уникальный идентификатор ссылки в 1С 8.3: от навигационной ссылки до SQL
Содержание
Быстрее всего посмотреть УИД объекта в 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С:Предприятие без программирования
Этот способ доступен любому пользователю, права администратора не нужны.
- Откройте карточку элемента справочника или форму документа.
- В заголовке формы нажмите значок цепочки «Получить ссылку».
- Скопируйте строку из открывшегося окна.
В строке e1cib/data/Справочник.Номенклатура?ref=b5c2001e67b7b9e211e2d8a1e3f7c4a0 часть после ref= — 32 шестнадцатеричных символа без дефисов. Это УИД, но байты в нём переставлены так же, как платформа хранит их в базе.
Как превратить ref в обычный УИД
Разбейте 32 символа на пять частей по позициям и соберите в другом порядке:
| Позиции в ref | Пример | Место в УИД |
|---|---|---|
| 1–4 | b5c2 | 4-я группа |
| 5–16 | 001e67b7b9e2 | 5-я группа |
| 17–20 | 11e2 | 3-я группа |
| 21–24 | d8a1 | 2-я группа |
| 25–32 | e3f7c4a0 | 1-я группа |
Итог: e3f7c4a0-d8a1-11e2-b5c2-001e67b7b9e2. Именно эту строку возвращает встроенный язык и ждут внешние системы.
Обратный путь тоже работает. Если вам прислали навигационную ссылку, откройте главное меню программы (кнопка в левом верхнем углу), выберите «Перейти по ссылке» и вставьте строку — откроется нужный объект.
Как собрать навигационную ссылку из известного УИД
Обратная задача встречается в поддержке: интегратор прислал УИД из лога, а найти объект нужно бухгалтеру.
- Возьмите УИД с дефисами, например
e3f7c4a0-d8a1-11e2-b5c2-001e67b7b9e2. - Уберите дефисы и сложите группы в порядке 4-я, 5-я, 3-я, 2-я, 1-я:
b5c2+001e67b7b9e2+11e2+d8a1+e3f7c4a0. - Допишите тип объекта:
e1cib/data/Справочник.Контрагенты?ref=b5c2001e67b7b9e211e2d8a1e3f7c4a0. - Вставьте строку в «Перейти по ссылке».
Тип пишется по имени объекта метаданных, как в Конфигураторе: Справочник.Контрагенты, Документ.РеализацияТоваровУслуг. Если объект не открылся, проверьте, что тип указан верно: тот же УИД в другом справочнике ничего не найдёт.
Просмотр УИД через Конфигуратор и отладчик
В самом Конфигураторе нет окна, где показывались бы идентификаторы данных: он работает с метаданными. Зато есть отладчик.
УИД конкретного элемента или документа
- Запустите Конфигуратор, меню
Отладка → Начать отладку → Тонкий клиент(или нужный вам клиент). - Откройте модуль формы объекта и поставьте точку останова (
F9) в любом обработчике, напримерПриОткрытииилиПриЧтенииНаСервере. - В запущенной базе откройте элемент. Выполнение остановится.
- Нажмите
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 символов. Обрежьте строку черезСокрЛП()и проверьте формат. - 👯 Дубли после копирования базы. Если из одной базы сделали две и завели их в обмен, одинаковые УИД в обеих базах сопоставятся друг с другом. Это ожидаемо для РИБ, но неожиданно, когда базы считали независимыми.
- 🧩 Одинаковый УИД у объектов разных типов. Идентификатор уникален в пределах типа. Поэтому при поиске всегда указывайте и тип (
Справочник.Контрагенты), и УИД. - 🕳 Битая ссылка после удаления. В поле видно
<Объект не найден> (…). Сам объект удалили, а ссылка на него осталась. Восстановить объект можно только из резервной копии или созданием нового элемента с тем же УИД черезУстановитьСсылкуНового— второй вариант делайте на копии и проверьте результат перед переносом в рабочую базу.