Справочники и Данные · 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 не выводится — запрос возвращает ссылку, а идентификатор извлекается уже в коде.
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ НЕ ПометкаУдаления");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Строка(Выборка.Ссылка.УникальныйИдентификатор()) + " | " + Выборка.Ссылка.Наименование);
КонецЦикла;Как узнать GUID через консоль запросов
Если под рукой нет конфигуратора или нет прав разработчика, GUID можно получить в режиме предприятия через консоль запросов — внешнюю обработку, которая входит в состав инструментов разработчика или подсистем «Инструменты разработчика». Сам запрос возвращает ссылку, а консоль умеет показывать её GUID в отдельной колонке или через представление.
Порядок действий: откройте консоль запросов, напишите запрос вида ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Код = &Код, задайте параметр и выполните. В результатах выделите ссылку — большинство консолей показывают уникальный идентификатор в панели свойств или по команде контекстного меню «Показать GUID».
Альтернатива без консоли — обработка «Универсальный подбор и обработка объектов» или аналогичные инструменты, где для любого выбранного объекта можно вывести служебные свойства, включая GUID. Такие обработки часто уже встроены в типовые конфигурации в разделе администрирования или поставляются отдельно.
Обратная задача: найти элемент справочника по GUID
Часто исходные данные обратные: в сообщении об ошибке, файле обмена или логе интеграции есть только строка GUID, и нужно понять, какой это элемент. Для этого используется связка ПолучитьСсылку() и конструктора Новый УникальныйИдентификатор():
ГУИД = Новый УникальныйИдентификатор("8b3b9c1e-1234-4a5b-9c8d-1a2b3c4d5e6f");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект с таким GUID не найден");
Иначе
Сообщить("Найден: " + Ссылка.Наименование);
КонецЕсли;
Ключевой нюанс: ПолучитьСсылку() всегда возвращает ссылку, даже если объекта с таким GUID в базе нет. Проверка существования выполняется через попытку получить объект или через запрос к базе по этой ссылке. Пропуск этой проверки — типичная причина ошибок обращения к несуществующим данным.
Если вид справочника заранее неизвестен (GUID может принадлежать любому объекту), придётся перебирать менеджеры нужных типов или использовать специализированные обработки поиска ссылки по GUID, которые делают это автоматически.
- 1Скопируйте строку GUID из сообщения об ошибке или файла обмена
- 2Определите предполагаемый вид объекта (справочник, документ)
- 3Выполните код: ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID))
- 4Проверьте существование объекта через запрос или ПолучитьОбъект()
- 5Если объект не найден — проверьте, не из другой ли базы этот GUID
GUID в обменах и битые ссылки
При обмене данными между базами GUID используется как ключ сопоставления объектов. Если в приёмнике элемент не найден по GUID, создаётся новый — так возникают дубли. Поэтому при настройке синхронизации полезно уметь сверять идентификаторы по обе стороны обмена.
Отдельный случай — «битые ссылки»: когда объект удалён физически (например, при свёртке базы или некорректной загрузке), а ссылки на него остались. В интерфейсе такая ссылка отображается как «Объект не найден (123:abc…)», где в скобках частично виден идентификатор. По этому фрагменту можно попытаться восстановить объект в базе-источнике или создать заглушку с тем же GUID через УстановитьСсылкуНового().
При восстановлении объекта по известному GUID действуйте аккуратно: сначала убедитесь, что объект действительно отсутствует, и только потом создавайте новый с принудительно заданной ссылкой. Ошибка здесь может привести к рассинхронизации обменов.
Типичные ошибки и ограничения
Первая распространённая ошибка — попытка получить GUID у объекта, а не у ссылки. У объекта (СправочникОбъект) метода УникальныйИдентификатор() нет; нужно обращаться к его свойству Ссылка: Объект.Ссылка.УникальныйИдентификатор().
Вторая ошибка — сравнение GUID как строк без учёта регистра или сравнение строки с типом «УникальныйИдентификатор» напрямую. Перед сравнением приводите обе стороны к одному типу: либо обе к строке, либо обе к УникальныйИдентификатор.
Третья группа проблем связана с ожиданием, что GUID одинаков в разных базах. При переносе данных загрузкой «создать новый» идентификаторы не сохраняются, и сопоставлять базы по GUID после такого переноса нельзя. Также помните, что GUID нельзя «придумать» для существующего объекта — он меняется только при создании нового объекта с установленной ссылкой.
Как проверить результат
После получения GUID убедитесь, что он корректен: строка должна содержать 36 символов, включая четыре дефиса, и состоять из шестнадцатеричных цифр. Если вместо идентификатора вы получили пустую строку или ошибку — проверьте, что работаете именно со ссылкой, а не с Неопределено или с объектом.
Обратная проверка надёжнее всего: возьмите полученный GUID, выполните ПолучитьСсылку() и убедитесь, что найденный элемент — тот самый, с которого начинали. Совпадение наименования и кода подтверждает, что идентификатор получен и интерпретирован верно.
Как проверить результат
36 символов, 4 дефиса, шестнадцатеричные цифры
Пустая строка, текст ошибки, иная длина
По GUID находится исходный элемент
Объект не найден или найден другой элемент
GUID совпадает в базе-источнике и приёмнике
Идентификаторы разные при «том же» элементе
Часто задаваемые вопросы
Можно ли узнать GUID элемента без программирования?
Да, если в базе доступна консоль запросов, «Инструменты разработчика» или обработка просмотра свойств объекта — они показывают GUID выбранной ссылки. В стандартной форме элемента справочника GUID не отображается, и без специальных инструментов узнать его нельзя.
Изменится ли GUID при переименовании или изменении кода элемента?
Нет. GUID присваивается один раз при создании объекта и не зависит от значений любых реквизитов, включая код и наименование. Идентификатор меняется только если объект удалить и создать заново.
Почему ПолучитьСсылку возвращает ссылку, хотя объекта нет?
Так устроен механизм: метод формирует ссылку из GUID без обращения к данным. Существование объекта нужно проверять отдельно — запросом по ссылке или попыткой получить объект. Это штатное поведение платформы, а не ошибка.
Одинаков ли GUID одного элемента в рабочей и копии базы?
Если копия создана физическим копированием базы (выгрузка/загрузка dt или копия на уровне СУБД) — GUID совпадают. Если данные переносились обменом с созданием новых объектов — идентификаторы будут разными, даже если элементы логически те же.
Как получить GUID сразу для всех элементов справочника?
Выполните запрос по ссылкам справочника и в цикле вызовите УникальныйИдентификатор() для каждой ссылки, выводя пару «GUID — наименование» в файл или табличный документ. Для больших справочников выгружайте порциями, чтобы не перегружать память.
Можно ли задать элементу справочника свой GUID вручную?
Только при создании нового объекта: сформировать ссылку через ПолучитьСсылку(Новый УникальныйИдентификатор(...)), установить её методом УстановитьСсылкуНового и записать объект. У существующего объекта GUID изменить нельзя.
Что важно запомнить
GUID получают методом УникальныйИдентификатор() у ссылки, а обратный поиск — через ПолучитьСсылку с обязательной проверкой существования объекта. Идентификатор не меняется при редактировании, но различается между независимыми базами. В режиме предприятия GUID доступен через консоль запросов и инструменты разработчика.