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

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

Как получить GUID элемента справочника в 1С

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

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

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

Ниже разобраны все рабочие способы с примерами кода, ограничениями каждого подхода и типичными ошибками, из-за которых GUID получается «не тот» или не получается вовсе.

Что такое GUID объекта и где он хранится

В терминах 1С GUID — это значение типа «УникальныйИдентификатор», которое платформа присваивает каждой ссылке на объект базы данных в момент её создания. Идентификатор не меняется при переименовании элемента, смене кода или любых реквизитов: он привязан к самой ссылке, а не к данным объекта.

Физически GUID хранится в поле ссылки таблицы справочника в СУБД. Именно поэтому два элемента с одинаковым наименованием и кодом в разных базах (или даже в одной) всегда имеют разные GUID, если были созданы независимо. Совпадение GUID в двух базах означает, что объект попал туда обменом или копированием ссылки.

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

Способ 1: метод УникальныйИдентификатор() в коде

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

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

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

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

Сообщить(Строка(ГУИД)); // например: 8b3c9d2e-1a4f-4e5b-9c7d-2f8a1b3c4d5e

КонецЕсли;

Обратите внимание: метод вызывается у ссылки (объект типа СправочникСсылка), а не у объекта (СправочникОбъект). Если у вас в руках объект, сначала возьмите его свойство Ссылка: Объект.Ссылка.УникальныйИдентификатор().

Если элемент ещё не записан в базу (новый объект), у его ссылки может не быть устойчивого GUID — платформа назначит идентификатор при записи. Поэтому получать GUID имеет смысл только после Записать().

Способ 2: консоль кода для разового просмотра

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

Минимальный код для консоли:

Сообщить(Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка").УникальныйИдентификатор());

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

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

Способ 3: функции XMLСтрока и XMLСсылка для обменов

В обменах данными GUID обычно передают через функции сериализации. XMLСтрока(Ссылка) возвращает строковое представление ссылки, которое для ссылочных типов совпадает с GUID. Обратная операция — XMLЗначение(Тип("СправочникСсылка.Номенклатура"), ГУИДСтрокой) — восстанавливает ссылку из строки.

ГУИДСтрокой = XMLСтрока(ЭлементСсылка);

// обратное преобразование:

ВосстановленнаяСсылка = XMLЗначение(Тип("СправочникСсылка.Номенклатура"), ГУИДСтрокой);

Есть и альтернативный путь: Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(ГУИДСтрокой)). Разница в том, что ПолучитьСсылку вернёт ссылку даже если объект физически отсутствует в базе (битая ссылка), а XMLЗначение тоже создаст ссылку независимо от наличия объекта. Проверять существование объекта нужно отдельно.

Какой способ выбрать

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

Универсальный программный способ, работает везде. Требует ссылки на объект.

XMLСтрока / XMLЗначение

Оптимально для обменов и интеграций, где GUID передаётся строкой между системами.

ПолучитьСсылку(УникальныйИдентификатор)

Для восстановления ссылки из строки GUID; возвращает ссылку даже на несуществующий объект — нужна проверка.

Консоль кода / обработка

Для разового ручного просмотра без изменения конфигурации.

Как проверить, что GUID получен правильно

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

Второй контроль — обратная проверка: восстановите ссылку из полученной строки и убедитесь, что она указывает именно на тот элемент. Если Ссылка.ПолучитьОбъект() возвращает Неопределено, объект с таким GUID в базе отсутствует — это признак битой ссылки или неверной базы.

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

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

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

36 символов, 4 дефиса, только hex-цифры 0-9 и a-f

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

Другая длина, лишние символы, скобки или фигурные скобки

Обратное восстановление ссылки
Норма

XMLЗначение возвращает ссылку, ПолучитьОбъект() даёт объект

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

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

Соответствие базе
Норма

GUID найден в той же базе, где будет использоваться

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

GUID взят из копии или архива — в рабочей базе идентификатор другой

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

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

Вторая группа ошибок связана с ожиданием, что GUID «по наименованию» совпадёт в разных базах. Это не так: идентичность объектов в распределённых системах обеспечивается только механизмами обмена, которые переносят ссылки целиком. Ручное создание «такого же» элемента в другой базе даёт другой GUID.

Наконец, помните о правах: выполнение произвольного кода и запуск внешних обработок доступны не всем пользователям. В клиент-серверном режиме код консоли выполняется на сервере, и у учётной записи должны быть соответствующие права.

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

FAQ

Можно ли получить GUID прямо в запросе 1С?

Напрямую как поле — нет, язык запросов не имеет функции УникальныйИдентификатор. Обычно выбирают ссылку запросом, а GUID получают уже в коде при обходе выборки. Для представления объекта строкой в запросе есть ПРЕДСТАВЛЕНИЕССЫЛКИ, но это не GUID.

Изменится ли GUID при изменении кода или наименования элемента?

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

Как найти элемент справочника по известному GUID?

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

Почему GUID из 1С не совпадает с GUID во внешней системе?

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

Есть ли GUID у записей регистра сведений?

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

Можно ли задать элементу справочника свой GUID вручную?

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

Итог

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

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