Разработка и Конфигурация · 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» в сервисных обработках.
- 1Откройте консоль кода или любую обработку с выполнением произвольного кода
- 2Получите ссылку: Справочники.ИмяСправочника.НайтиПоКоду(...) или НайтиПоНаименованию(...)
- 3Выполните Сообщить(Ссылка.УникальныйИдентификатор())
- 4Скопируйте строку из окна сообщений и проверьте, что она содержит 36 символов с дефисами
Способ 3: функции XMLСтрока и XMLСсылка для обменов
В обменах данными GUID обычно передают через функции сериализации. XMLСтрока(Ссылка) возвращает строковое представление ссылки, которое для ссылочных типов совпадает с GUID. Обратная операция — XMLЗначение(Тип("СправочникСсылка.Номенклатура"), ГУИДСтрокой) — восстанавливает ссылку из строки.
ГУИДСтрокой = XMLСтрока(ЭлементСсылка);
// обратное преобразование:
ВосстановленнаяСсылка = XMLЗначение(Тип("СправочникСсылка.Номенклатура"), ГУИДСтрокой);
Есть и альтернативный путь: Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(ГУИДСтрокой)). Разница в том, что ПолучитьСсылку вернёт ссылку даже если объект физически отсутствует в базе (битая ссылка), а XMLЗначение тоже создаст ссылку независимо от наличия объекта. Проверять существование объекта нужно отдельно.
Какой способ выбрать
Универсальный программный способ, работает везде. Требует ссылки на объект.
Оптимально для обменов и интеграций, где GUID передаётся строкой между системами.
Для восстановления ссылки из строки GUID; возвращает ссылку даже на несуществующий объект — нужна проверка.
Для разового ручного просмотра без изменения конфигурации.
Как проверить, что GUID получен правильно
Самая частая проблема — перепутанные базы: GUID взят из тестовой копии, а ищется в рабочей, где тот же по наименованию элемент имеет другой идентификатор. Всегда сверяйте, из какой информационной базы получено значение.
Второй контроль — обратная проверка: восстановите ссылку из полученной строки и убедитесь, что она указывает именно на тот элемент. Если Ссылка.ПолучитьОбъект() возвращает Неопределено, объект с таким GUID в базе отсутствует — это признак битой ссылки или неверной базы.
Как проверить результат
36 символов, 4 дефиса, только hex-цифры 0-9 и a-f
Другая длина, лишние символы, скобки или фигурные скобки
XMLЗначение возвращает ссылку, ПолучитьОбъект() даёт объект
ПолучитьОбъект() возвращает Неопределено — объекта нет в базе
GUID найден в той же базе, где будет использоваться
GUID взят из копии или архива — в рабочей базе идентификатор другой
Типичные ошибки и ограничения
Ошибка номер один — попытка получить GUID у значения, а не у ссылки. Наименование, код или реквизит «СсылкаНаОбъект» строкового типа методом УникальныйИдентификатор() не обладают — платформа выдаст ошибку «Метод объекта не обнаружен».
Вторая группа ошибок связана с ожиданием, что GUID «по наименованию» совпадёт в разных базах. Это не так: идентичность объектов в распределённых системах обеспечивается только механизмами обмена, которые переносят ссылки целиком. Ручное создание «такого же» элемента в другой базе даёт другой GUID.
Наконец, помните о правах: выполнение произвольного кода и запуск внешних обработок доступны не всем пользователям. В клиент-серверном режиме код консоли выполняется на сервере, и у учётной записи должны быть соответствующие права.
FAQ
Можно ли получить GUID прямо в запросе 1С?
Напрямую как поле — нет, язык запросов не имеет функции УникальныйИдентификатор. Обычно выбирают ссылку запросом, а GUID получают уже в коде при обходе выборки. Для представления объекта строкой в запросе есть ПРЕДСТАВЛЕНИЕССЫЛКИ, но это не GUID.
Изменится ли GUID при изменении кода или наименования элемента?
Нет. GUID привязан к ссылке и не зависит от реквизитов. Он сохраняется при любых правках объекта и пропадает только вместе с физическим удалением объекта из базы.
Как найти элемент справочника по известному GUID?
Используйте Справочники.ИмяСправочника.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаГУИД)), затем проверьте существование объекта через ПолучитьОбъект(): если возвращено Неопределено, объекта с таким GUID в базе нет.
Почему GUID из 1С не совпадает с GUID во внешней системе?
Частые причины: разный регистр букв, фигурные скобки вокруг GUID в некоторых системах, перестановка байтов в отдельных интеграциях. Приводите строку к одному виду (нижний регистр, без скобок) перед сравнением.
Есть ли GUID у записей регистра сведений?
Нет. GUID имеют только ссылочные объекты: справочники, документы, планы видов характеристик, планы счетов, планы обмена, задачи, бизнес-процессы. Записи регистров идентифицируются набором измерений (и периодом для периодических регистров).
Можно ли задать элементу справочника свой GUID вручную?
Да, через УстановитьСсылкуНового(Справочники.Имя.ПолучитьСсылку(Новый УникальныйИдентификатор(НужныйГУИД))) до записи нового объекта. Так делают при миграциях, чтобы сохранить идентификаторы. Использовать следует осторожно: конфликт с существующим GUID приведёт к ошибке записи.
Что важно запомнить
GUID элемента справочника получают методом Ссылка.УникальныйИдентификатор(); для обменов удобны XMLСтрока и XMLЗначение, а для восстановления ссылки — ПолучитьСсылку с обязательной проверкой существования объекта. GUID не зависит от реквизитов и уникален для каждой базы, поэтому всегда сверяйте, из какой базы взят идентификатор.