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

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

Как получить идентификатор ссылки в 1С

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

Уникальный идентификатор (GUID) — это внутренний 36-символьный ключ, который платформа 1С присваивает каждой ссылке на объект базы: элементу справочника, документу, записи плана видов характеристик и другим ссылочным типам. Он не меняется при переименовании объекта и используется для обмена данными, интеграции с внешними системами, отладки и поиска нужной записи.

Разработчику и администратору 1С идентификатор нужен постоянно: при настройке синхронизации между базами, при разборе ошибок обмена, при поиске «битых» ссылок, при передаче ключей записей в HTTP-сервисы. Ниже разобраны все рабочие способы получить GUID ссылки — из кода, из запроса, вручную и через внешние инструменты.

Важно понимать разницу: ссылка — это типизированное значение внутри 1С, а уникальный идентификатор — его строковое представление вида «8b3f9c1e-....». Методы получения и обратного преобразования отличаются в зависимости от задачи, и далее каждый вариант рассмотрен отдельно.

Что такое уникальный идентификатор ссылки в 1С

Каждая ссылка на объект в базе 1С хранится как 16-байтовое двоичное значение. В пользовательском и программном интерфейсе оно представляется в виде строки формата «xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx». Этот идентификатор формируется в момент первой записи объекта (или при получении ссылки до записи) и остаётся неизменным на протяжении всей жизни объекта.

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

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

Получение GUID из кода на встроенном языке

Основной способ — метод УникальныйИдентификатор(), который есть у любой ссылки. Он возвращает значение типа УникальныйИдентификатор. Чтобы получить привычную строку, значение передают в функцию Строка() или используют в контексте, где выполняется неявное преобразование.

ТоварСсылка = Справочники.Номенклатура.НайтиПоКоду("000001234");

Если Не ТоварСсылка.Пустая() Тогда

Идентификатор = ТоварСсылка.УникальныйИдентификатор();

СтрокаGUID = Строка(Идентификатор);

Сообщить(СтрокаGUID); // например: 8b3f9c1e-2a4d-4e5f-9a1b-0c2d3e4f5a6b

КонецЕсли;

Метод работает одинаково для справочников, документов, планов счетов, планов видов характеристик, планов обмена, бизнес-процессов и задач. Для пустой ссылки метод вернёт GUID из нулей, поэтому перед получением идентификатора полезно проверять ссылку на заполненность.

Частый сценарий — вывести GUID массово, например для выгрузки ключей в Excel. В этом случае обходят выборку из запроса и для каждой строки вызывают УникальныйИдентификатор() у поля ссылки.

bsl
СтрокаGUID = Строка(Объект.Ссылка.УникальныйИдентификатор());

Обратная задача: найти объект по известному GUID

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

СтрокаGUID = "8b3f9c1e-2a4d-4e5f-9a1b-0c2d3e4f5a6b";

Идентификатор = Новый УникальныйИдентификатор(СтрокаGUID);

ТоварСсылка = Справочники.Номенклатура.ПолучитьСсылку(Идентификатор);

Если ТоварСсылка.ПолучитьОбъект() = Неопределено Тогда

Сообщить("Объект с таким GUID не найден в базе");

КонецЕсли;

Конструктор Новый УникальныйИдентификатор(Строка) выбрасывает исключение, если строка не соответствует формату GUID. Поэтому при приёме данных извне строку стоит оборачивать в попытку/исключение или предварительно проверять длину и структуру.

Нюанс: ПолучитьСсылку() возвращает ссылку даже если объекта в базе нет — физически ссылка просто указывает на несуществующую запись. Проверка существования выполняется через ПолучитьОбъект() или запросом по ссылке.

Как узнать GUID объекта без программирования

Если нужно разово узнать идентификатор конкретного элемента, необязательно писать обработку. Самый простой путь — внешняя обработка или консоль кода, но есть и способы без дополнительных инструментов.

Вариант первый: открыть объект в режиме предприятия и выполнить команду «Ещё → Вывести список» не поможет, а вот через функциональность «Получить ссылку» (кнопка с цепочкой в командной панели формы объекта) можно получить навигационную ссылку вида e1cib/data/Справочник.Номенклатура?ref=.... Фрагмент после ref — это шестнадцатеричное представление GUID в переставленном порядке байт, а не привычный формат с дефисами; для прямого использования в коде его нужно преобразовать.

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

Как узнать GUID через консоль кода
  1. 1
    Откройте консоль кода (обработка с диска ИТС или встроенная в вашу конфигурацию)
  2. 2
    Найдите ссылку на объект, например: Спр = Справочники.Номенклатура.НайтиПоНаименованию("Стол офисный")
  3. 3
    Выполните: Сообщить(Строка(Спр.УникальныйИдентификатор()))
  4. 4
    Скопируйте выведенную строку GUID
  5. 5
    Проверьте обратным поиском через ПолучитьСсылку, что объект находится

Получение идентификатора в запросе

В языке запросов 1С есть функция УникальныйИдентификатор(), которая принимает ссылку и возвращает её внутреннее значение. Она удобна для выгрузки пар «объект — GUID» без обхода выборки в коде.

ВЫБРАТЬ

Номенклатура.Ссылка КАК Ссылка,

Номенклатура.Наименование КАК Наименование,

УникальныйИдентификатор(Номенклатура.Ссылка) КАК Идентификатор

ИЗ

Справочник.Номенклатура КАК Номенклатура

ГДЕ

НЕ Номенклатура.ПометкаУдаления

Ограничение: функция работает только со ссылочными полями и не применяется к значениям других типов. Кроме того, результат запроса с GUID нельзя напрямую использовать в условии соединения с таблицей другой базы — такие сопоставления выполняются уже на стороне кода или в механизмах обмена.

При больших выборках помните, что вывод GUID увеличивает объём передаваемых данных. Если идентификатор нужен только для десятка записей, выгоднее наложить отбор в запросе, чем фильтровать результат потом.

GUID и навигационная ссылка: в чём разница

Пользователи часто путают уникальный идентификатор с навигационной ссылкой, которую можно скопировать из формы объекта. Навигационная ссылка — это адрес для открытия объекта в клиенте 1С, она содержит имя типа и закодированное представление GUID. Она работает только внутри конкретной базы и не является переносимым ключом.

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

Что использовать в разных задачах

УникальныйИдентификатор()

Универсальный способ для кода, обменов и интеграций. Возвращает переносимый GUID, подходит почти всегда

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

Только для открытия объекта пользователем внутри той же базы. Не подходит как ключ для внешних систем

Функция запроса УникальныйИдентификатор()

Оптимальна для массовой выгрузки пар объект-GUID без обхода выборки в коде

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

Первая ошибка — попытка присвоить строку GUID напрямую ссылочному реквизиту. Типы несовместимы: строку нужно сначала превратить в УникальныйИдентификатор, затем через ПолучитьСсылку() — в ссылку конкретного типа. Пропуск любого шага вызывает ошибку преобразования типов.

Вторая ошибка — использование GUID из другой базы без проверки. Если базы не связаны обменом, одинаковых идентификаторов у разных объектов не будет, но и сам объект по пришедшему GUID может отсутствовать. Результат — «битые» ссылки в документах.

Третья ошибка — хранение GUID в регистрах как строки переменной длины без нормализации. GUID могут записываться в разном регистре символов (прописные/строчные буквы), и сравнение строк «как есть» даёт ложные несовпадения. Храните идентификатор в типе УникальныйИдентификатор или приводите строки к одному регистру.

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

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

После получения GUID убедитесь, что строка имеет длину 36 символов и содержит четыре дефиса в стандартных позициях. Любое отклонение означает, что вы получили не GUID, а, например, навигационную ссылку или внутреннее представление.

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

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

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

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

36 символов, 4 дефиса, шестнадцатеричные знаки

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

Строка вида e1cib/data/... — это навигационная ссылка, не GUID

Обратный поиск объекта
Норма

ПолучитьОбъект() возвращает объект, реквизиты читаются

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

ПолучитьОбъект() возвращает Неопределено — объекта нет в базе

Пустая ссылка
Норма

GUID отличается от 00000000-0000-0000-0000-000000000000

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

Нулевой GUID — исходная ссылка была пустой

Часто задаваемые вопросы

Меняется ли GUID при переносе объекта в другую группу или переименовании?

Нет. Идентификатор привязан к ссылке, а не к реквизитам объекта. Переименование, смена родителя, изменение любых полей не влияют на GUID. Он изменится только если объект удалить и создать заново.

Можно ли задать объекту нужный GUID вручную?

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

Почему GUID в навигационной ссылке выглядит иначе, чем в коде?

В навигационной ссылке идентификатор хранится в виде шестнадцатеричной строки с другим порядком байтов и без дефисов. Это внутренний формат платформы; для использования в коде его нужно преобразовать в стандартное представление.

Как найти все «битые» ссылки по GUID?

Выполните запрос с левым соединением таблицы, где хранится ссылка, к таблице объекта: если объект отсутствует, поля соединения будут NULL. Альтернатива — типовая обработка «Поиск и удаление дублей» и сервисные отчёты для анализа ссылочной целостности.

Работает ли УникальныйИдентификатор() у записей регистров?

Нет, записи регистров не являются ссылочными объектами и не имеют GUID. Идентификаторы есть только у ссылочных типов: справочников, документов, планов обмена, планов видов характеристик, планов счетов, задач и бизнес-процессов.

Можно ли получить GUID на клиенте в управляемых формах?

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

Итог

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

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