Разработка и Конфигурация · 11 мин
Как получить уникальный идентификатор 1С из ссылки
Как получить GUID (уникальный идентификатор) объекта 1С из ссылки: метод УникальныйИдентификатор(), обратное восстановление ссылки, примеры кода и типичные ошибки.
В платформе 1С:Предприятие каждый объект базы данных — элемент справочника, документ, запись плана счетов — имеет ссылку (ссылочный тип данных), а у каждой ссылки есть уникальный идентификатор в формате GUID. Именно GUID используется при обмене данными между базами, интеграции с внешними системами и поиске «потерянных» объектов по строковому представлению.
Разработчики и администраторы регулярно сталкиваются с задачей: есть ссылка на объект, нужно получить её GUID в виде строки вида «a1b2c3d4-e5f6-7890-abcd-ef1234567890». Обратная задача тоже встречается часто: по известному GUID восстановить ссылку и найти объект в базе. Ниже разобраны оба направления с примерами кода.
Важное ограничение: GUID существует только у ссылочных типов данных. У регистров сведений и регистров накопления нет ссылок — там записи идентифицируются ключами записи, поэтому методы из этой статьи к ним не применимы.
Что такое GUID и как он связан со ссылкой
Ссылка в 1С — это не навигационная ссылка и не путь к объекту, а значение специального типа, которое однозначно указывает на объект в базе данных. Физически ссылка состоит из двух частей: типа объекта (например, «СправочникСсылка.Номенклатура») и уникального идентификатора — GUID.
GUID (глобально уникальный идентификатор) — это 128-битное значение, записываемое в виде 36 символов с дефисами. Платформа генерирует его автоматически при создании объекта, и он не меняется в течение всей жизни объекта, даже при выгрузке и загрузке через планы обмена. Именно поэтому GUID удобен для сопоставления объектов между разными информационными базами.
Навигационная ссылка вида «e1cib/data/Справочник.Номенклатура?ref=...» — это отдельная сущность для открытия объекта в клиенте. Она содержит GUID в закодированном виде, но напрямую методы работы со ссылками её не принимают.
Способ 1: метод УникальныйИдентификатор() во встроенном языке
Основной и штатный способ — вызов метода УникальныйИдентификатор() у ссылки. Метод доступен в тонком, толстом и веб-клиенте, на сервере и во внешних соединениях, дополнительных прав не требует.
// Получение GUID из ссылки
СсылкаНаТовар = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если Не СсылкаНаТовар.Пустая() Тогда
ГУИД = СсылкаНаТовар.УникальныйИдентификатор();
СтрокаГУИД = Строка(ГУИД); // "a1b2c3d4-e5f6-..."
Сообщить(СтрокаГУИД);
КонецЕсли;
Метод возвращает значение типа УникальныйИдентификатор, а не строку. Если результат нужно передать в веб-сервис, записать в текстовый файл или показать пользователю, обязательно преобразуйте его функцией Строка() или используйте XMLСтрока(). Сравнение двух GUID корректно выполняется и без преобразования в строку — оператором равенства.
Частая ситуация: метод вызывают у пустой ссылки. Ошибки не будет — вернётся GUID из нулей «00000000-0000-0000-0000-000000000000». Если такое значение нежелательно в обмене, проверяйте ссылку методом Пустая() до получения идентификатора.
ГУИД = Ссылка.УникальныйИдентификатор();
СтрокаГУИД = Строка(ГУИД);Способ 2: получение GUID через запрос
Когда нужно получить идентификаторы сразу для множества объектов, удобнее запрос. В языке запросов ссылку можно выбрать напрямую, а GUID извлекается уже в коде при обходе результата, либо через представление ссылки — но представление вернёт наименование, а не GUID, поэтому этот путь не подходит.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Строка(Выборка.Ссылка.УникальныйИдентификатор()));
КонецЦикла;
Обратите внимание: функции «получить GUID» в языке запросов нет. Попытка вывести ссылку в СКД или в табличный документ даст представление объекта, а не идентификатор. Поэтому схема всегда одна: запросом получаете ссылки, GUID извлекаете в цикле встроенным языком.
Обратная задача: восстановить ссылку по GUID
Обратное преобразование выполняется методом ПолучитьСсылку() менеджера соответствующего объекта. Сначала строка преобразуется в значение типа УникальныйИдентификатор через конструктор, затем из него строится ссылка.
СтрокаГУИД = "a1b2c3d4-e5f6-7890-abcd-ef1234567890";
Попытка
ГУИД = Новый УникальныйИдентификатор(СтрокаГУИД);
Исключение
Сообщить("Некорректный формат GUID");
Возврат;
КонецПопытки;
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);
// Проверка, что объект реально существует в базе
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ 1 ИЗ Справочник.Номенклатура ГДЕ Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Если Запрос.Выполнить().Пустой() Тогда
Сообщить("Объект с таким GUID не найден");
КонецЕсли;
Критически важный момент: ПолучитьСсылку() всегда вернёт ссылку, даже если объекта с таким GUID в базе нет. Сама по себе ссылка — это просто «указатель», и платформа не проверяет его существование. Если обратиться к реквизитам несуществующего объекта, получите ошибку или «битую ссылку» вида «<Объект не найден>». Поэтому после восстановления ссылки всегда проверяйте наличие объекта запросом или через ПолучитьОбъект() с проверкой на Неопределено.
Для документов, планов видов характеристик и других ссылочных типов синтаксис идентичен — меняется только менеджер: Документы.РеализацияТоваровУслуг.ПолучитьСсылку(ГУИД) и так далее.
Как узнать GUID объекта без программирования
Если под рукой нет конфигуратора, есть несколько практических вариантов. Первый — стандартная обработка «Универсальный подбор и обработка объектов» или любая консоль кода: достаточно выполнить одну строку с методом УникальныйИдентификатор(). Второй — открыть свойства объекта в режиме «Ещё → Вывести список» с колонкой «Ссылка» и далее обработать результат.
Третий вариант — извлечь GUID из навигационной ссылки. Скопируйте ссылку на объект (команда «Получить ссылку» в форме объекта), и в конце строки после «?ref=» будет закодированный идентификатор. Он хранится в специальном формате с переставленными байтами, поэтому простым копированием символов его не восстановить — нужна функция перекодировки, которая меняет местами группы шестнадцатеричных цифр. Готовые функции такого преобразования широко используются в типовых обработках интеграции.
- 1Получите или выберите ссылку на объект (запросом, поиском по коду, из реквизита)
- 2Вызовите Ссылка.УникальныйИдентификатор() и при необходимости преобразуйте результат в строку
- 3Для обратного преобразования создайте значение: Новый УникальныйИдентификатор(СтрокаГУИД)
- 4Восстановите ссылку через Менеджер.ПолучитьСсылку(ГУИД)
- 5Проверьте запросом, что объект с таким GUID существует, прежде чем использовать ссылку
Типичные ошибки и ограничения
Самая распространённая ошибка — попытка вызвать УникальныйИдентификатор() у объекта, а не у ссылки. У значения типа СправочникОбъект такого метода нет: сначала обратитесь к свойству Ссылка (ОбъектДанных.Ссылка.УникальныйИдентификатор()). Симметричная ошибка — вызов метода у строки, которая просто содержит GUID: строка не ссылка, сначала её нужно преобразовать.
Вторая группа ошибок связана с обменом. GUID объекта одинаков во всех базах только если объекты переносились штатными механизмами обмена или конвертации. Если в двух базах «одинаковые» элементы созданы вручную, их GUID будут разными — сопоставлять такие объекты нужно по коду, наименованию или регистру соответствия.
Наконец, не используйте GUID как человекочитаемый ключ в отчётах для пользователей: это технический идентификатор. Для отображения подходят код и наименование, а GUID оставьте для машинной интеграции.
Проверка результата
Корректность полученного GUID легко проверить: длина строки должна быть ровно 36 символов, формат — пять групп шестнадцатеричных цифр через дефис (8-4-4-4-12). Если строка короче, длиннее или содержит символы вне диапазона 0–9 и a–f, значит, в неё попало что-то лишнее — например, представление объекта вместо идентификатора.
Полный цикл контроля: возьмите GUID, восстановите из него ссылку, снова получите GUID и сравните с исходным. Совпадение подтверждает, что преобразования в обе стороны работают правильно и объект найден именно тот.
Как проверить результат
36 символов, группы 8-4-4-4-12, только цифры и буквы a–f
Другая длина, лишние символы, текст представления объекта
Запрос по ссылке возвращает запись
Запрос пустой, в интерфейсе видно «Объект не найден»
Итоговый GUID совпадает с исходным
Значения различаются — ошибка в коде преобразования
FAQ
Можно ли получить GUID у записи регистра сведений?
Нет. Уникальный идентификатор есть только у ссылочных типов: справочников, документов, планов счетов, планов видов характеристик и подобных. Запись регистра сведений идентифицируется набором измерений (и периодом для периодических регистров), а запись регистра накопления — ссылкой на регистратор.
Изменится ли GUID объекта после обмена данными между базами?
Нет, при штатных механизмах обмена и конвертации GUID сохраняется — именно по нему базы сопоставляют объекты. GUID изменится только если объект в другой базе создали заново вручную, а не перенесли обменом.
Чем навигационная ссылка отличается от GUID?
Навигационная ссылка — это строка для открытия объекта в клиентском приложении, она включает тип объекта и закодированный GUID с переставленными байтами. GUID — чистый идентификатор объекта. Для интеграций и сопоставлений используется GUID, навигационная ссылка нужна только для перехода в интерфейсе.
Как получить GUID в запросе, без встроенного языка?
В языке запросов функции извлечения GUID нет. Выбирайте поле Ссылка, а идентификатор извлекайте при обходе результата методом УникальныйИдентификатор(). Вывод ссылки в СКД или макет даст представление объекта, а не GUID.
Что вернёт УникальныйИдентификатор() у пустой ссылки?
GUID из одних нулей: 00000000-0000-0000-0000-000000000000. Ошибки не произойдёт, поэтому перед получением идентификатора стоит проверять ссылку методом Пустая(), чтобы нулевой GUID не попал в обмен или интеграцию.
Можно ли задать объекту свой GUID при создании?
Да. У нового объекта перед записью можно вызвать метод УстановитьСсылкуНового(), передав заранее созданную ссылку с нужным GUID: Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаГУИД)). Так делают при синхронизации, чтобы объект в приёмнике получил идентификатор источника.
Что важно запомнить
GUID ссылки получают методом Ссылка.УникальныйИдентификатор() с преобразованием в строку через Строка(). Обратно ссылку восстанавливают через ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаГУИД)) с обязательной проверкой существования объекта. Метод работает только для ссылочных типов, а совпадение GUID между базами гарантируют только штатные механизмы обмена.