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

Разработка и Конфигурация · 10 мин

Как узнать внутренний идентификатор объекта в 1С

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

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

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

Способов несколько: от простого запроса в консоли до просмотра таблиц СУБД. Выбор зависит от того, есть ли у вас доступ к конфигуратору, какие права выданы в базе и нужен ли разовый просмотр или программное получение в коде.

Что такое внутренний идентификатор и где он хранится

Внутренний идентификатор объекта в 1С — это GUID (глобально уникальный идентификатор), строка вида «a1b2c3d4-e5f6-7890-abcd-ef1234567890». Платформа генерирует его автоматически при записи нового объекта и хранит в служебном поле таблицы базы данных. Идентификатор не зависит от кода, номера, наименования и других реквизитов: даже если переименовать элемент справочника, GUID останется прежним.

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

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

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

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

Пример запроса для справочника «Номенклатура»:

ВЫБРАТЬ

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

Номенклатура.Код КАК Код,

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

ИЗ

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

ГДЕ

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

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

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

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

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

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

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

Сообщить("Идентификатор: " + Строка(ГУИД));

КонецЕсли;

Обратная задача — найти объект по известному GUID — решается через ПолучитьСсылку:

ГУИД = Новый УникальныйИдентификатор("a1b2c3d4-e5f6-7890-abcd-ef1234567890");

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

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

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

КонецЕсли;

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

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

Через навигационную ссылку в тонком клиенте

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

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

Через веб-клиент

При работе через браузер навигационная ссылка объекта видна прямо в адресной строке после открытия формы элемента. Способ удобен, когда нет доступа к конфигуратору, но нужно быстро сообщить идентификатор разработчику интеграции.

Специализированные обработки и инструменты разработчика

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

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

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

Просмотр идентификатора на уровне СУБД

В клиент-серверном варианте GUID хранится в поле _IDRRef таблиц ссылочных объектов (например, _Reference123 для справочника). Администратор с доступом к SQL Server или PostgreSQL может выполнить прямой запрос к таблице и увидеть идентификаторы в двоичном виде.

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

Сравнение способов

Навигационная ссылка

Подходит пользователю без прав разработчика; минус — GUID в обратном порядке байтов, нужна конвертация

Встроенный язык

Точный и универсальный способ; требует доступа к конфигуратору или консоли кода

Консоль запросов

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

Прямой запрос к СУБД

Работает даже при повреждённых данных; требует прав администратора СУБД и знания структуры таблиц

Как проверить результат и типичные ошибки

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

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

Отдельная ситуация — предопределённые элементы. Их GUID в разных информационных базах одной конфигурации обычно совпадает, если базы создавались из одного шаблона, но при самостоятельном создании «предопределённых» элементов через обработку идентификаторы будут разными. На это стоит опираться при настройке обменов.

Итог

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

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

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

Меняется ли GUID объекта при его изменении или переносе?

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

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

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

Почему GUID из навигационной ссылки не совпадает с тем, что показывает код?

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

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

Ошибка вида «Объект не найден (a1b2c3d4-...)» содержит GUID удалённого объекта. По нему можно определить тип объекта только косвенно — например, поиском по таблицам СУБД или анализом места в коде, где возникла ошибка. Штатно восстановить объект по одному GUID нельзя, нужна копия базы.

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

Если базы созданы из одного шаблона конфигурации — как правило, да, потому что предопределённые элементы создаются при первоначальном заполнении с фиксированными идентификаторами. Но полагаться на это без проверки не стоит: при нештатных обновлениях идентификаторы могут различаться.

Можно ли узнать GUID без прав администратора и конфигуратора?

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