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

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

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

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

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

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

Ниже разобраны все рабочие способы с примерами кода, ограничениями и проверкой результата. Материал применим к платформе 1С:Предприятие 8.3 в типовых и самописных конфигурациях.

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

GUID (глобальный уникальный идентификатор) — это 128-битное значение, которое платформа присваивает объекту при создании и хранит в поле ссылки таблицы базы данных. В текстовом виде он выглядит как строка вида 8d3f8a1c-4b2e-4f7a-9c1d-2e5b6a7c8d9e. Идентификатор не меняется при переименовании элемента, смене кода, переносе в другую группу и даже при обмене через планы обмена — именно поэтому он используется как надёжный ключ сопоставления.

Важно различать GUID и навигационную ссылку. Навигационная ссылка (например, e1cib/data/Справочник.Номенклатура?ref=...) — это представление ссылки для интерфейса, она содержит тот же идентификатор, но в ином формате. Для интеграций и сопоставления объектов между базами используется именно GUID в стандартном строковом виде.

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

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

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

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

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

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

КонецЕсли;

Альтернатива — функция XMLСтрока(Ссылка), которая сразу возвращает GUID в строковом виде. Этот вариант удобен в запросах и при передаче значения во внешние системы, потому что не требует получения объекта и работает напрямую со ссылкой. Обратное преобразование выполняется через XMLЗначение(Тип("СправочникСсылка.Номенклатура"), СтрокаGUID).

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

bsl
// GUID в строку и обратно
СтрокаGUID = XMLСтрока(СсылкаНаЭлемент);
СсылкаОбратно = XMLЗначение(Тип("СправочникСсылка.Номенклатура"), СтрокаGUID);

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

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

ВЫБРАТЬ

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

ИЗ

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

ГДЕ

Номенклатура.Код = &Код

Результат запроса выгружается в таблицу значений, после чего для каждой строки применяется XMLСтрока(СтрокаТЗ.Ссылка). В консоли запросов для управляемого приложения многие версии показывают ссылку в представлении, из которого GUID можно скопировать через контекстное меню ячейки.

Для массовой выгрузки идентификаторов (например, для сопоставления с внешней базой) удобно построить таблицу «Код — Наименование — GUID» и выгрузить её в табличный документ или CSV. Такой подход безопасен: запросы только читают данные и не изменяют базу.

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

Если доступа к конфигуратору нет, используйте штатные возможности пользовательского режима. В списке справочника откройте меню «Ещё» → «Вывести список» и в настройке добавьте колонку «Ссылка» — в табличном документе будет показано строковое представление ссылки. Для отдельного элемента можно скопировать навигационную ссылку командой «Ещё» → «Получить ссылку» в форме элемента: идентификатор содержится в параметре ref в шестнадцатеричном виде.

Наиболее практичный путь — универсальная внешняя обработка «Поиск объекта по GUID» или «Уникальный идентификатор», которые публикуются в открытых источниках для администраторов 1С. Такая обработка открывается через «Файл» → «Открыть» и позволяет как получить GUID по выбранному элементу, так и найти объект по известному идентификатору. Перед запуском любой внешней обработки убедитесь, что она получена из доверенного источника.

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

Обратная задача — найти объект по идентификатору из лога обмена или сообщения об ошибке вида «Объект не найден (8d3f8a1c...)». Программно это делается так:

Идентификатор = Новый УникальныйИдентификатор("8d3f8a1c-4b2e-4f7a-9c1d-2e5b6a7c8d9e");

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

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

Сообщить("Объект с таким GUID отсутствует в базе");

КонецЕсли;

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

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

Сравнение способов получения GUID

Разные методы отличаются требованиями к правам, скоростью и применимостью. Выбирайте по ситуации:

Способы получения GUID

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

Точный и быстрый способ для доработок и отладки; требует права на запуск кода или внешней обработки

XMLСтрока(Ссылка)

Удобен в запросах и при передаче во внешние системы; сразу даёт строковый вид

Вывести список / навигационная ссылка

Доступен обычному пользователю без программирования; неудобен для массовой обработки

Внешняя обработка поиска по GUID

Универсальна, работает в обе стороны; требует проверки источника и прав на открытие внешних файлов

Для разовой задачи пользователя достаточно навигационной ссылки или вывода списка. Для интеграций и регулярных обменов закладывайте программное получение GUID через XMLСтрока() — это стандарт де-факто при передаче ссылок между системами.

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

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

Ещё одно ограничение: при загрузке данных из файлов и внешних систем один и тот же логический элемент может существовать в разных базах с разными GUID. Поэтому при настройке обмена сопоставление строят по GUID только внутри механизмов планов обмена; для произвольных интеграций ведётся таблица соответствия идентификаторов.

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

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

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

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

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

36 символов: 5 групп в шестнадцатеричном виде через дефисы

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

Пустая строка, представление вида «Объект не найден» или навигационная ссылка целиком

Обратное преобразование
Норма

XMLЗначение по строке возвращает ссылку на тот же элемент

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

Ошибка преобразования или ссылка на другой объект

Существование объекта
Норма

Запрос по ссылке возвращает одну строку

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

Запрос пуст — объект удалён или GUID из другой базы

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

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

Меняется ли GUID элемента при переименовании или переносе в другую группу?

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

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

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

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

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

Как получить GUID в тонком клиенте без конфигуратора?

Откройте форму элемента и выполните «Ещё» → «Получить ссылку» — скопируйте навигационную ссылку, идентификатор содержится в её параметре ref. Либо в списке справочника используйте «Ещё» → «Вывести список» с добавленной колонкой «Ссылка» и скопируйте значение из табличного документа.

Почему по GUID из сообщения об ошибке объект не находится?

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

Итог

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

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