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