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

Справочники и Данные · 11 мин

Как получить ГУИД справочника в 1С

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

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

Задача «получить ГУИД справочника» возникает в нескольких ситуациях: при настройке обмена с сайтом или другой базой 1С, при поиске элемента по ссылке из сообщения об ошибке, при написании обработок и отчётов, при восстановлении битых ссылок. Способ получения зависит от того, есть ли у вас доступ к конфигуратору и право на выполнение произвольного кода.

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

Что такое GUID в 1С и чем он отличается от кода

GUID (глобально уникальный идентификатор) — значение типа «УникальныйИдентификатор», которое платформа генерирует автоматически при создании объекта. В строковом виде он выглядит как 36 символов: «8b3b9c1e-1234-4a5b-9c8d-1a2b3c4d5e6f». Идентификатор присваивается один раз и не изменяется ни при переименовании элемента, ни при изменении его кода.

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

Важно понимать, что GUID привязан к конкретной базе. Один и тот же логический элемент «Номенклатура: Гвоздь 5х120» в рабочей и тестовой базе будет иметь разные идентификаторы, если базы не были получены копированием. При обмене через правила конвертации GUID обычно сохраняется, но при загрузке «как новый объект» — нет.

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

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

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

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

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

Сообщить(Строка(ГУИД));

КонецЕсли;

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

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

bsl
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ НЕ ПометкаУдаления");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Строка(Выборка.Ссылка.УникальныйИдентификатор()) + " | " + Выборка.Ссылка.Наименование);
КонецЦикла;

Как узнать GUID через консоль запросов

Если под рукой нет конфигуратора или нет прав разработчика, GUID можно получить в режиме предприятия через консоль запросов — внешнюю обработку, которая входит в состав инструментов разработчика или подсистем «Инструменты разработчика». Сам запрос возвращает ссылку, а консоль умеет показывать её GUID в отдельной колонке или через представление.

Порядок действий: откройте консоль запросов, напишите запрос вида ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Код = &Код, задайте параметр и выполните. В результатах выделите ссылку — большинство консолей показывают уникальный идентификатор в панели свойств или по команде контекстного меню «Показать GUID».

Альтернатива без консоли — обработка «Универсальный подбор и обработка объектов» или аналогичные инструменты, где для любого выбранного объекта можно вывести служебные свойства, включая GUID. Такие обработки часто уже встроены в типовые конфигурации в разделе администрирования или поставляются отдельно.

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

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

ГУИД = Новый УникальныйИдентификатор("8b3b9c1e-1234-4a5b-9c8d-1a2b3c4d5e6f");

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

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

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

Иначе

Сообщить("Найден: " + Ссылка.Наименование);

КонецЕсли;

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

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

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

GUID в обменах и битые ссылки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пустая строка, текст ошибки, иная длина

Обратное получение элемента
Норма

По GUID находится исходный элемент

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

Объект не найден или найден другой элемент

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

GUID совпадает в базе-источнике и приёмнике

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

Идентификаторы разные при «том же» элементе

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

Можно ли узнать GUID элемента без программирования?

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

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

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

Почему ПолучитьСсылку возвращает ссылку, хотя объекта нет?

Так устроен механизм: метод формирует ссылку из GUID без обращения к данным. Существование объекта нужно проверять отдельно — запросом по ссылке или попыткой получить объект. Это штатное поведение платформы, а не ошибка.

Одинаков ли GUID одного элемента в рабочей и копии базы?

Если копия создана физическим копированием базы (выгрузка/загрузка dt или копия на уровне СУБД) — GUID совпадают. Если данные переносились обменом с созданием новых объектов — идентификаторы будут разными, даже если элементы логически те же.

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

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

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

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

Итог

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

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