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

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

Как узнать GUID в 1С: способы получения уникального идентификатора

Как узнать GUID объекта в 1С: через запрос, встроенный язык, обработку и XML. Практические способы получения уникального идентификатора с примерами кода.

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

Выбор способа зависит от вашей роли: пользователю без прав разработчика подойдёт консоль запросов или внешняя обработка, программисту — методы встроенного языка. Все описанные ниже приёмы работают на платформе 8.3 в управляемом и обычном приложении.

Что такое GUID и когда он нужен

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

На практике GUID требуется в нескольких ситуациях: при настройке обмена данными между базами (объекты сопоставляются именно по GUID), при интеграции с сайтом, CRM или складской системой, при поиске «битых» ссылок вида «Объект не найден», а также при ручном восстановлении удалённых данных из копии базы.

Важно понимать разницу: код и номер — это «человеческие» идентификаторы, видимые пользователю, а GUID — технический. Два объекта с одинаковым кодом в разных базах будут иметь разные GUID, если создавались независимо.

Способ 1. Запрос с функцией УникальныйИдентификатор

Самый доступный метод — консоль запросов. В языке запросов есть оператор, возвращающий GUID ссылки. Откройте консоль запросов (в типовых конфигурациях на управляемом приложении она часто есть в разделе «Администрирование», либо используйте внешнюю консоль) и выполните запрос:

ВЫБРАТЬ

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

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

ИЗ

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

ГДЕ

Номенклатура.Код = &Код

В параметр «Код» подставьте код нужного элемента. В результате получите строку GUID в стандартном формате через дефисы. Запрос можно адаптировать под любой объект: документы, справочники, планы видов характеристик.

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

Порядок действий через консоль запросов
  1. 1
    Откройте консоль запросов (типовую или внешнюю обработку)
  2. 2
    Вставьте текст запроса с функцией УникальныйИдентификатор
  3. 3
    Укажите параметр отбора — код, номер или наименование объекта
  4. 4
    Выполните запрос и скопируйте значение GUID из результата

Способ 2. Встроенный язык: метод УникальныйИдентификатор()

Для разработчика основной способ — метод ссылки УникальныйИдентификатор(). Он возвращает значение типа «УникальныйИдентификатор», которое при выводе преобразуется в строку:

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

Сообщить(ГУИД); // 8d3b9a1e-4f2c-11e7-9a1b-00155d0a2b3c

Обратная задача — найти объект по известному GUID — решается конструктором Новый УникальныйИдентификатор(СтрокаГУИД) и методом ПолучитьСсылку() менеджера объекта:

ГУИД = Новый УникальныйИдентификатор("8d3b9a1e-4f2c-11e7-9a1b-00155d0a2b3c");

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

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

Сообщить("Объект не найден");

КонецЕсли;

Проверка на «битую» ссылку обязательна: если объект удалён, ПолучитьСсылку() вернёт ссылку, но обращение к её реквизитам покажет «Объект не найден». Это типичная ситуация при разборе ошибок обмена.

Способ 3. GUID через URL в веб-клиенте и тонком клиенте

Если база опубликована на веб-сервере, GUID объекта виден прямо в адресной строке браузера при открытии формы объекта. Ссылка вида .../e1cib/data/Справочник.Номенклатура?ref=8d3b9a1e4f2c11e79a1b00155d0a2b3c содержит GUID в параметре ref, только без дефисов и с особым порядком байт.

Важный нюанс: внутреннее представление GUID в параметре ref отличается от строкового вида перестановкой байтов в первых трёх группах. Для преобразования используют несложную функцию перестановки символов или готовые обработки-конвертеры. Для разовой задачи проще воспользоваться способами 1–2.

Способ 4. GUID в XML-выгрузке и при обмене

При выгрузке данных в XML (например, через типовую обработку «Выгрузка и загрузка данных XML») каждый объект сопровождается атрибутом Ref, содержащим GUID. Откройте файл выгрузки в текстовом редакторе, найдите объект по наименованию или номеру — рядом будет его идентификатор.

Этот способ незаменим, когда рабочая база недоступна: например, нужно узнать GUID объекта из архивной копии, не разворачивая её. Также GUID фигурирует в файлах обмена по планам обмена и в регистрации изменений.

Способ 5. Готовые обработки для пользователя

Если нет доступа к конфигуратору и консоли запросов, используйте внешние обработки «Узнать GUID объекта»: они открываются через Файл → Открыть и показывают идентификатор выбранной ссылки в один клик. Во многих конфигурациях на БСП есть встроенные инструменты разработчика с аналогичной функцией.

Для работы внешних обработок нужны права на открытие внешних файлов — в некоторых базах это запрещено настройками профиля безопасности. В этом случае запросите GUID у администратора или разработчика.

Как проверить результат и типичные ошибки

Проверить корректность GUID просто: подставьте его в код поиска объекта из способа 2. Если объект найден и его реквизиты совпадают с ожидаемыми — идентификатор верный. Если получаете «Объект не найден», либо GUID ошибочен, либо объект удалён, либо перепутан тип объекта (например, ищете в справочнике «Номенклатура» ссылку на документ).

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

Типичные ошибки
01
Подстановка GUID из URL без преобразования байт — находится чужой или несуществующий объект
02
Поиск по GUID в неправильном типе объекта — ПолучитьСсылку() вызывается у другого менеджера
03
Отсутствие проверки на битую ссылку — код падает с ошибкой при обращении к реквизитам
04
Уверенность, что одинаковые объекты в разных базах имеют одинаковый GUID — это верно только после обмена
Контрольные точки

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

Формат GUID
Норма

Строка вида xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, 36 символов

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

32 символа без дефисов — это внутреннее представление, требуется преобразование

Поиск объекта по GUID
Норма

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

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

Сообщение «Объект не найден» — GUID ошибочен или объект удалён

Совпадение объекта
Норма

Реквизиты найденного объекта совпадают с исходным

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

Найден другой объект — перепутан порядок байт или тип

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

Можно ли узнать GUID без прав разработчика?

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

Меняется ли GUID при изменении или переносе объекта?

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

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

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

Почему GUID из запроса и из URL выглядят по-разному?

Платформа хранит GUID в двоичном виде, и при выводе в URL (параметр ref) байты первых групп записываются в обратном порядке. Это один и тот же идентификатор в разных представлениях. Для преобразования используют функции перестановки символов, которые легко найти в типовых механизмах обмена.

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

Технически да — через метод УстановитьСсылкуНового() с конструктором Новый УникальныйИдентификатор. Так делают при синхронизации баз. Но в рабочей базе без резервной копии этого делать не стоит: конфликт идентификаторов нарушит ссылочную целостность.

Одинаков ли GUID у объекта в файловой и клиент-серверной копии одной базы?

Да, если копия получена выгрузкой/загрузкой или копированием файла базы — GUID объектов сохраняются. Разными идентификаторы будут только у объектов, созданных независимо в каждой из баз.

Итог

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

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