Разработка и Конфигурация · 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. В этом случае обходят выборку из запроса и для каждой строки вызывают УникальныйИдентификатор() у поля ссылки.
СтрокаGUID = Строка(Объект.Ссылка.УникальныйИдентификатор());Обратная задача: найти объект по известному GUID
Обратное преобразование нужно, когда из внешней системы пришёл идентификатор и требуется найти соответствующий объект в базе. Для этого создают значение типа УникальныйИдентификатор из строки, а затем формируют ссылку через метод ПолучитьСсылку() менеджера соответствующего типа.
СтрокаGUID = "8b3f9c1e-2a4d-4e5f-9a1b-0c2d3e4f5a6b";
Идентификатор = Новый УникальныйИдентификатор(СтрокаGUID);
ТоварСсылка = Справочники.Номенклатура.ПолучитьСсылку(Идентификатор);
Если ТоварСсылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект с таким GUID не найден в базе");
КонецЕсли;
Конструктор Новый УникальныйИдентификатор(Строка) выбрасывает исключение, если строка не соответствует формату GUID. Поэтому при приёме данных извне строку стоит оборачивать в попытку/исключение или предварительно проверять длину и структуру.
Нюанс: ПолучитьСсылку() возвращает ссылку даже если объекта в базе нет — физически ссылка просто указывает на несуществующую запись. Проверка существования выполняется через ПолучитьОбъект() или запросом по ссылке.
Как узнать GUID объекта без программирования
Если нужно разово узнать идентификатор конкретного элемента, необязательно писать обработку. Самый простой путь — внешняя обработка или консоль кода, но есть и способы без дополнительных инструментов.
Вариант первый: открыть объект в режиме предприятия и выполнить команду «Ещё → Вывести список» не поможет, а вот через функциональность «Получить ссылку» (кнопка с цепочкой в командной панели формы объекта) можно получить навигационную ссылку вида e1cib/data/Справочник.Номенклатура?ref=.... Фрагмент после ref — это шестнадцатеричное представление GUID в переставленном порядке байт, а не привычный формат с дефисами; для прямого использования в коде его нужно преобразовать.
Вариант второй: универсальные отчёты и консоли запросов. Во многих типовых конфигурациях и на диске ИТС есть инструменты «Консоль запросов» и «Универсальный отчёт», где можно вывести ссылку и через выражение УникальныйИдентификатор() получить строковый GUID. Для разработчика удобнее всего консоль кода — одна строка решает задачу.
- 1Откройте консоль кода (обработка с диска ИТС или встроенная в вашу конфигурацию)
- 2Найдите ссылку на объект, например: Спр = Справочники.Номенклатура.НайтиПоНаименованию("Стол офисный")
- 3Выполните: Сообщить(Строка(Спр.УникальныйИдентификатор()))
- 4Скопируйте выведенную строку GUID
- 5Проверьте обратным поиском через ПолучитьСсылку, что объект находится
Получение идентификатора в запросе
В языке запросов 1С есть функция УникальныйИдентификатор(), которая принимает ссылку и возвращает её внутреннее значение. Она удобна для выгрузки пар «объект — GUID» без обхода выборки в коде.
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка,
Номенклатура.Наименование КАК Наименование,
УникальныйИдентификатор(Номенклатура.Ссылка) КАК Идентификатор
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
НЕ Номенклатура.ПометкаУдаления
Ограничение: функция работает только со ссылочными полями и не применяется к значениям других типов. Кроме того, результат запроса с GUID нельзя напрямую использовать в условии соединения с таблицей другой базы — такие сопоставления выполняются уже на стороне кода или в механизмах обмена.
При больших выборках помните, что вывод GUID увеличивает объём передаваемых данных. Если идентификатор нужен только для десятка записей, выгоднее наложить отбор в запросе, чем фильтровать результат потом.
GUID и навигационная ссылка: в чём разница
Пользователи часто путают уникальный идентификатор с навигационной ссылкой, которую можно скопировать из формы объекта. Навигационная ссылка — это адрес для открытия объекта в клиенте 1С, она содержит имя типа и закодированное представление GUID. Она работает только внутри конкретной базы и не является переносимым ключом.
Для интеграций, файлов обмена и хранения ключей во внешних системах нужен именно GUID в стандартном строковом виде. Если внешняя система сохранила навигационную ссылку, из неё можно извлечь идентификатор, но это дополнительное преобразование и источник ошибок.
Что использовать в разных задачах
Универсальный способ для кода, обменов и интеграций. Возвращает переносимый GUID, подходит почти всегда
Только для открытия объекта пользователем внутри той же базы. Не подходит как ключ для внешних систем
Оптимальна для массовой выгрузки пар объект-GUID без обхода выборки в коде
Типичные ошибки и ограничения
Первая ошибка — попытка присвоить строку GUID напрямую ссылочному реквизиту. Типы несовместимы: строку нужно сначала превратить в УникальныйИдентификатор, затем через ПолучитьСсылку() — в ссылку конкретного типа. Пропуск любого шага вызывает ошибку преобразования типов.
Вторая ошибка — использование GUID из другой базы без проверки. Если базы не связаны обменом, одинаковых идентификаторов у разных объектов не будет, но и сам объект по пришедшему GUID может отсутствовать. Результат — «битые» ссылки в документах.
Третья ошибка — хранение GUID в регистрах как строки переменной длины без нормализации. GUID могут записываться в разном регистре символов (прописные/строчные буквы), и сравнение строк «как есть» даёт ложные несовпадения. Храните идентификатор в типе УникальныйИдентификатор или приводите строки к одному регистру.
Как проверить результат
После получения GUID убедитесь, что строка имеет длину 36 символов и содержит четыре дефиса в стандартных позициях. Любое отклонение означает, что вы получили не GUID, а, например, навигационную ссылку или внутреннее представление.
Для обратного преобразования контроль простой: получите ссылку по GUID и сравните Строка(Ссылка.УникальныйИдентификатор()) с исходной строкой. Совпадение подтверждает корректность обоих преобразований.
Как проверить результат
36 символов, 4 дефиса, шестнадцатеричные знаки
Строка вида e1cib/data/... — это навигационная ссылка, не GUID
ПолучитьОбъект() возвращает объект, реквизиты читаются
ПолучитьОбъект() возвращает Неопределено — объекта нет в базе
GUID отличается от 00000000-0000-0000-0000-000000000000
Нулевой GUID — исходная ссылка была пустой
Часто задаваемые вопросы
Меняется ли GUID при переносе объекта в другую группу или переименовании?
Нет. Идентификатор привязан к ссылке, а не к реквизитам объекта. Переименование, смена родителя, изменение любых полей не влияют на GUID. Он изменится только если объект удалить и создать заново.
Можно ли задать объекту нужный GUID вручную?
Да, при создании нового объекта можно вызвать УстановитьСсылкуНового() с заранее сформированной ссылкой через ПолучитьСсылку(Новый УникальныйИдентификатор(Строка)). Так делают при загрузке данных из других баз, чтобы сохранить сопоставление ключей.
Почему GUID в навигационной ссылке выглядит иначе, чем в коде?
В навигационной ссылке идентификатор хранится в виде шестнадцатеричной строки с другим порядком байтов и без дефисов. Это внутренний формат платформы; для использования в коде его нужно преобразовать в стандартное представление.
Как найти все «битые» ссылки по GUID?
Выполните запрос с левым соединением таблицы, где хранится ссылка, к таблице объекта: если объект отсутствует, поля соединения будут NULL. Альтернатива — типовая обработка «Поиск и удаление дублей» и сервисные отчёты для анализа ссылочной целостности.
Работает ли УникальныйИдентификатор() у записей регистров?
Нет, записи регистров не являются ссылочными объектами и не имеют GUID. Идентификаторы есть только у ссылочных типов: справочников, документов, планов обмена, планов видов характеристик, планов счетов, задач и бизнес-процессов.
Можно ли получить GUID на клиенте в управляемых формах?
Да, метод УникальныйИдентификатор() доступен на тонком и веб-клиенте для ссылок. Если требуется серверный контекст (например, обратный поиск объекта), вызов выполняют в серверной процедуре формы или через вызов сервера.
Что важно запомнить
GUID ссылки получают методом УникальныйИдентификатор(), обратный поиск — через ПолучитьСсылку с обязательной проверкой существования объекта. Не путайте GUID с навигационной ссылкой и всегда проверяйте формат строки перед преобразованием.