Как получить UUID объекта в 1С — через интерфейс, код и отладчик
Содержание
Внутренний идентификатор любого объекта 1С — справочника, документа, задачи — это UUID (он же GUID): 128-битное число, которое платформа присваивает элементу при создании. Из кода его получают одной строкой: Строка(Ссылка.УникальныйИдентификатор()). Без программирования — через главное меню и пункт «Получить ссылку».
Чтобы найти идентификатор объекта в 1С Предприятие, не нужны сторонние утилиты. Платформа хранит UUID у каждой ссылки и отдаёт его тремя путями: через интерфейс пользователя, из встроенного языка и в отладчике. Разберём все три способа, а заодно обратную задачу — как по известному UUID получить сам объект, в том числе в распределённой базе.
Что такое идентификатор объекта и из чего он состоит
Идентификатор объекта — это UUID (Universally Unique Identifier), в документации 1С он же называется GUID и уникальный идентификатор. Записывается в каноническом виде: 36 символов, пять групп шестнадцатеричных цифр через дефис, например a1f3b2c0-5d41-4e8a-9b07-2c3d4e5f6071.
Ссылка на объект внутри платформы состоит из двух частей: тип (например, СправочникСсылка.Контрагенты) и UUID. Тип говорит, в какой таблице искать, UUID — какую конкретно строку. Поэтому одного идентификатора без указания типа недостаточно: один и тот же UUID теоретически мог бы встретиться у объектов разных видов, и платформа всегда получает ссылку через менеджер конкретного справочника или документа.
Не путайте внутренний идентификатор с навигационной ссылкой. Навигационная ссылка (e1cib/data/...) — это адрес для перехода внутри программы, он включает UUID как часть. Сам UUID — это только идентификатор, без указания способа открыть объект.
Важно не путать UUID с привычными полями:
- 🔢 Код и номер — реквизиты для людей. Их видно в списках, они могут повторяться в разных справочниках и их можно поменять вручную.
- 🧬 UUID — внутренний ключ. Он не показывается по умолчанию, не меняется за всё время жизни объекта и не используется повторно даже после пометки на удаление.
UUID уникален в пределах одной информационной базы. Если вы удалили объект и создали новый с тем же кодом — UUID у них будет разный. Поэтому для надёжных связей между системами берут именно идентификатор, а не код.
Во внутренней структуре СУБД ссылка хранится в бинарном поле фиксированной длины (16 байт). Администратору, который смотрит на таблицы базы напрямую, этот столбец виден как двоичное значение, а не как привычная строка с дефисами — строковое представление формирует уже платформа. Пустой ссылке (Справочники.Контрагенты.ПустаяСсылка()) соответствует нулевой идентификатор 00000000-0000-0000-0000-000000000000.
Как узнать идентификатор через интерфейс без программирования
Самый быстрый способ для обычного пользователя — навигационная ссылка.
- Откройте карточку объекта (элемент справочника, документ).
- Нажмите кнопку главного меню — пиктограмма в левом верхнем углу окна.
- Выберите пункт
Получить ссылку. - В открывшемся окне скопируйте строку вида
e1cib/data/Справочник.Контрагенты?ref=a1f3b2c05d414e8a9b072c3d4e5f6071.
Часть после ref= — это и есть идентификатор объекта в шестнадцатеричном виде, без дефисов. Сам префикс e1cib/data/ означает конкретный объект; если открыть ссылку в 1С (главное меню → Перейти по ссылке), платформа откроет ту же карточку.
Ссылку можно получить и не открывая карточку: выделите строку в списке справочника или журнале документов и вызовите Получить ссылку из главного меню — идентификатор будет относиться к выделенному объекту.
Строка в навигационной ссылке хранит байты UUID во внутреннем порядке, поэтому символ в символ она не совпадает с результатом Строка(УникальныйИдентификатор()) из кода. Для канонической строки используйте способ из кода — он ниже.
Если пункта Получить ссылку нет, включите панель команд приложения или воспользуйтесь списком Все функции (его показ включается в разделе Сервис и настройки → Настройки → Параметры).
Получение UUID в коде: метод УникальныйИдентификатор()
У любой ссылки есть метод УникальныйИдентификатор(). Он возвращает значение типа УникальныйИдентификатор, а для строки его оборачивают в Строка():
// Ссылка на конкретный объект уже есть в переменной
Идентификатор = Ссылка.УникальныйИдентификатор();
СтрокаUUID = Строка(Идентификатор);
Сообщить(СтрокаUUID); // a1f3b2c0-5d41-4e8a-9b07-2c3d4e5f6071
Метод работает одинаково для элементов справочников, документов, планов видов характеристик и прочих ссылочных типов. Для записей регистров сведений или наборов записей UUID не применяется — у них нет ссылок, их различают по значениям измерений.
Если нужно вывести идентификатор в служебных сообщениях при разборе данных, добавьте в вывод и представление объекта: Сообщить(СтрокаUUID + " — " + Строка(Ссылка)). Так в логе видно и номер, и ключ.
Из запроса получить UUID напрямую нельзя — в языке запросов нет функции-обёртки над идентификатором. Если нужен список «объект → UUID», выберите ссылки запросом, а строку соберите уже в коде, обходя выборку:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаUUID = Строка(Выборка.Ссылка.УникальныйИдентификатор());
Сообщить(Выборка.Наименование + " = " + СтрокаUUID);
КонецЦикла;
Такой обход даёт готовую таблицу соответствия, которую удобно выгрузить в файл и передать во внешнюю систему.
Как получить объект по UUID и проверить, что он есть
Обратная задача — по строке идентификатора получить рабочий объект — требует двух шагов: собрать ссылку и убедиться, что за ней стоит реальная запись.
Ид = Новый УникальныйИдентификатор("a1f3b2c0-5d41-4e8a-9b07-2c3d4e5f6071");
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(Ид);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект с таким идентификатором не найден");
Иначе
Сообщить("Найден: " + Ссылка.Наименование);
КонецЕсли;
Проверка через ПолучитьОбъект() обязательна: без неё легко получить «висящую» ссылку на несуществующий элемент.
Преобразование: строка, GUID и обратно в ссылку
Тип УникальныйИдентификатор свободно превращается в строку и обратно. Это пригождается, когда идентификатор хранится в текстовом реквизите, передаётся через файл или приходит из внешней системы.
| Задача | Как сделать |
|---|---|
| UUID → строка | Строка(Идентификатор) или XMLСтрока(Идентификатор) |
| Строка → UUID | Новый УникальныйИдентификатор(СтрокаUUID) |
| UUID → ссылка на объект | Справочники.Контрагенты.ПолучитьСсылку(Идентификатор) |
Отдельно стоит пара функций, которые сериализуют ссылку целиком — вместе с типом, а не только UUID: ЗначениеВСтрокуВнутр(Ссылка) и обратная ЗначениеИзСтрокиВнутр(Строка). Полученная строка — внутренний формат платформы, он непригоден для чтения человеком и может меняться между версиями, поэтому хранить его долго и передавать во внешние системы не стоит. Для интеграций берут строковый UUID, а внутренний формат оставляют для разовых технических задач внутри одной базы.
Обратная задача — найти объект по известному идентификатору — решается методом менеджера ПолучитьСсылку:
Ид = Новый УникальныйИдентификатор("a1f3b2c0-5d41-4e8a-9b07-2c3d4e5f6071");
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(Ид);
ПолучитьСсылку не проверяет, существует ли объект с таким UUID. Метод просто собирает ссылку нужного типа. Если элемент не найден, вы получите ссылку, у которой ПолучитьОбъект() вернёт Неопределено. Поэтому после получения ссылки существование объекта проверяют: читают объект или делают запрос по этой ссылке.
Просмотр идентификатора в отладчике
Когда объект уже в переменной, но выводить его в сообщение неудобно, идентификатор смотрят прямо в отладчике.
- Табло. Остановитесь на точке останова, добавьте в табло выражение
Ссылка.УникальныйИдентификатор()— платформа покажет значение. - Вычислить выражение. Команда
Вычислить выражение(Shift+F9) позволяет на паузе выполнитьСтрока(Ссылка.УникальныйИдентификатор())и сразу увидеть каноническую строку.
Отладка серверного кода требует, чтобы отладка по протоколу была включена в параметрах информационной базы и в настройках сервера; тогда идентификатор одинаково доступен и в клиентском, и в серверном контексте.
В консоли запросов (внешней обработке) запрос возвращает ссылки на объекты. Самого UUID в результате запроса не будет — чтобы его извлечь, выделите нужную ссылку и примените к ней метод в окне вычисления выражения или в коде обработки. Некоторые консоли умеют показывать внутреннее представление выделенной ссылки — но каноническую строку надёжнее получить описанным выше методом.
Поиск объекта по идентификатору в распределённых базах
В распределённой информационной базе (РИБ) идентификатор объекта одинаков во всех узлах. Это основа механизма обмена: когда объект уходит в другой узел, его UUID сохраняется, поэтому ссылки между документами не рвутся.
Отсюда простое правило:
- 🟢 РИБ. Один и тот же элемент в центральной базе и в периферийной имеет один UUID. Ищите объект по идентификатору напрямую через
ПолучитьСсылку— он найдётся в любом узле. - 🔴 Обычный обмен (через правила конвертации, КД 2.0/3.0, синхронизацию). Идентификаторы в базах-участницах, как правило, разные. Объекты сопоставляются по правилам обмена и реквизитам (ИНН, код, наименование), а не по UUID.
Если переносите данные между двумя базами и нужна сверка «тот же это объект или нет», в РИБ сравнивайте UUID, а в обычном обмене — ключевые реквизиты. Сравнение по UUID между базами, не связанными РИБ, даст неверный результат.
На практике это проявляется так: вы выгрузили элемент из рабочей базы, загрузили в копию через типовой обмен и пытаетесь найти его по старому идентификатору — а поиск возвращает пустую ссылку. Если копия сделана не выгрузкой/загрузкой всей базы (.dt) и не настроена как узел РИБ, идентификатор у загруженного объекта будет свой. В этом случае сопоставляйте объекты по реквизитам или заранее сохраняйте карту «исходный UUID → UUID в приёмнике».
Идентификатор во внешних системах и OData-обмене
Чаще всего UUID нужен не внутри самой 1С, а на стыке с другими программами. Поэтому идентификатор используют там, где код и наименование ненадёжны.
- 🔌 Интеграции через REST. Если база опубликована как автоматический OData-сервис (
Администрирование → Публикация на веб-сервере), каждый объект в ответе сервиса имеет полеRef_Key— это и есть его UUID в строковом виде. Внешняя система адресует объект именно поRef_Key, запрашивая, например, запись справочника по этому ключу. - 🗂 Сопоставление справочников. При разовом переносе данных таблицу «UUID → объект» хранят как карту соответствия, чтобы при повторной загрузке не плодить дубли.
- 🛠 Обращения в поддержку и анализ логов. В технологическом журнале и в журнале регистрации объекты фигурируют по идентификатору. Зная UUID, вы точно укажете, о каком именно документе идёт речь.
Для интеграций удобнее сразу работать со строковым UUID (Ref_Key), а внутри 1С при чтении приводить его к типу УникальныйИдентификатор и получать ссылку. Так одна и та же строка понятна обеим сторонам обмена.
Строка(Ссылка.УникальныйИдентификатор()).Справочники.<Имя>.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаUUID)), затем проверьте, что объект существует.Частые ошибки при работе с идентификатором
Отдельно — промахи, из-за которых «тот же» объект вдруг не находится.
- ❌ Берут код вместо UUID. Код из карточки — это не идентификатор. По нему нельзя надёжно найти объект через
ПолучитьСсылку. - ❌ Копируют строку из навигационной ссылки и ждут совпадения с кодом из
Строка(). В ссылкеref=байты переставлены, прямое текстовое сравнение двух форм даст «не равно». Приводите оба значения к типуУникальныйИдентификатори сравнивайте их. - ❌ Считают, что
ПолучитьСсылкугарантирует существование. Метод вернёт ссылку даже на несуществующий UUID. Проверяйте чтением или запросом. - ❌ Ищут по UUID между базами обычного обмена. Там идентификаторы разные. Такой поиск работает только в РИБ.
Частые вопросы
Чем отличается UUID от GUID в 1С?
УникальныйИдентификатор.Меняется ли идентификатор при изменении реквизитов объекта?
Можно ли задать объекту свой UUID вручную?
УстановитьНовыйУникальныйИдентификатор у объекта (до записи). Вручную через интерфейс задать произвольный UUID нельзя.Как по UUID понять, какой это тип объекта?
Справочники.Контрагенты, Документы.ЗаказПокупателя и т. д.). Один UUID без указания типа однозначно объект не определяет.