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

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

Как получить уникальный идентификатор справочника в 1С

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

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

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

Что такое GUID элемента справочника и когда он нужен

Каждый объект ссылочного типа в 1С (элемент справочника, документ, план видов характеристик) хранится в базе с внутренним уникальным идентификатором — 36-символьной строкой вида «8b3f9c2e-1a4d-4e5f-9a7b-2c3d4e5f6a7b». Именно этот идентификатор, а не код или наименование, используется платформой для хранения ссылок в реквизитах других объектов.

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

Как получить GUID программно во встроенном языке

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

// Находим элемент по коду

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

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

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

Сообщить(Строка(Идентификатор));

КонецЕсли;

Если элемент уже выбран в форме или получен из реквизита другого объекта, искать его заново не нужно — вызывайте метод сразу у имеющейся ссылки. Для обратной задачи, когда по известному GUID требуется получить ссылку, используется конструктор: Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор("8b3f9c2e-...")).

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

Как узнать GUID без программирования

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

Ещё один способ — получить навигационную ссылку на элемент. Откройте элемент справочника, в меню «Ещё» выберите «Вывести список» или воспользуйтесь командой получения ссылки (в типовых конфигурациях на управляемых формах доступна команда «Получить ссылку» либо сочетание клавиш для копирования навигационной ссылки). Ссылка имеет вид e1cib/data/Справочник.Номенклатура?ref=..., где закодированное значение после «ref=» содержит идентификатор объекта во внутреннем представлении.

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

Получение GUID через запрос и СКД

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Ссылка

|ИЗ

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

|ГДЕ

| НЕ Номенклатура.ПометкаУдаления";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить(Строка(Выборка.Ссылка.УникальныйИдентификатор())

+ ";" + Выборка.Ссылка.Наименование);

КонецЦикла;

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

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

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

Идентификатор = Новый УникальныйИдентификатор("8b3f9c2e-1a4d-4e5f-9a7b-2c3d4e5f6a7b");

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

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

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

Иначе

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

КонецЕсли;

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

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

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

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

36 символов с дефисами, только цифры и буквы a–f

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

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

Существование элемента
Норма

ПолучитьОбъект() вернул объект, наименование читается

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

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

Соответствие элементу
Норма

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

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

Находится другой элемент или «Объект не найден»

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

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

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

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

Типичные ошибки
01
Не проверена пустая ссылка — получен нулевой GUID и принят за результат
02
GUID из одной базы использован для поиска в другой, где элемент создавался независимо
03
Попытка получить GUID у перечисления или записи регистра сведений — метода нет
04
Создание объекта с заданным GUID в рабочей базе без резервной копии
05
Путаница между кодом элемента и GUID при интеграции с внешней системой

Проверка результата и практические рекомендации

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

Для регулярных интеграций не передавайте GUID «вручную» через файлы и сообщения — оформите выгрузку через HTTP-сервис, план обмена или типовой механизм синхронизации данных. Ручное копирование идентификаторов оправдано только для разовых операций и отладки.

Итог

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

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

Частые вопросы

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

Нет, в языке запросов 1С нет функции, возвращающей GUID ссылки. Запросом отбирают нужные ссылки, а идентификатор получают при обходе выборки методом УникальныйИдентификатор() в коде.

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

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

Что означает GUID из одних нулей?

Нулевой идентификатор (00000000-0000-0000-0000-000000000000) соответствует пустой ссылке. Если вы получили такой GUID, значит, поиск элемента не дал результата, и метод вызван у пустой ссылки.

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

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

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

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

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

Да, через навигационную ссылку: в типовых конфигурациях на управляемых формах у элемента можно получить ссылку вида e1cib/data/..., в которой закодирован идентификатор. Также GUID может быть виден в отчётах и обработках, уже встроенных в конфигурацию, если они выводят ссылки.