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

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

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

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

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

Задача узнать GUID возникает у разработчиков при отладке обменов, у интеграторов при настройке связи «1С ↔ внешняя система» и у администраторов при поиске «битых» ссылок. Ниже разобраны рабочие способы: через встроенный язык, запрос, готовые обработки и ручной разбор ссылки.

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

Что такое GUID в 1С и где он применяется

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

Основные области применения:

  • синхронизация с сайтами, CRM, WMS и мобильными приложениями — внешняя система хранит GUID как ключ записи;
  • обмены между базами 1С, где сопоставление идёт не по коду, а по идентификатору;
  • поиск «битых ссылок» — строка вида «Объект не найден (123:abc... )» содержит GUID удалённого объекта;
  • отладка и анализ данных напрямую в СУБД (SQL Server, PostgreSQL).

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

Как узнать GUID через встроенный язык

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

Пример кода

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

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

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

Сообщить(ГУИД); // например: 3f2504e0-4f89-11d3-9a0c-0305e82c3301

КонецЕсли;

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

НовыйГУИД = Новый УникальныйИдентификатор("3f2504e0-4f89-11d3-9a0c-0305e82c3301");

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

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

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

КонецЕсли;

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

bsl
ГУИД = Ссылка.УникальныйИдентификатор(); // получить GUID объекта
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор("3f2504e0-4f89-11d3-9a0c-0305e82c3301")); // обратно

Как получить GUID запросом

Когда нужны идентификаторы сразу многих объектов, удобнее запрос с функцией УникальныйИдентификатор(). Она принимает ссылку и возвращает GUID:

ВЫБРАТЬ

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

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

ИЗ

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

ГДЕ

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

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

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

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

Если под рукой нет конфигуратора или прав на выполнение кода, есть несколько обходных путей.

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

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

Через универсальные обработки

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

Через поиск по ссылке

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

Сравнение вариантов

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

Подходит разработчику; быстро и точно, но нужны права на выполнение кода

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

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

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

Работает без программирования, но GUID нужно преобразовывать из перевёрнутого формата

Готовые обработки

Удобны для разовых задач; зависит от наличия обработки в базе

Как найти объект по GUID из «битой ссылки»

Типичная ситуация: в документе или регистре встречается значение «<Объект не найден> (84:8d4a005056a5...)». Число до двоеточия — внутренний идентификатор типа, после него — GUID в сыром виде.

Порядок действий:

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

Хранение GUID для обмена с внешними системами

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

Альтернатива — дополнительный реквизит строкового типа в самом объекте. Так проще, но при нескольких интеграциях реквизитов становится много, и управлять ими сложнее. Выбор зависит от числа внешних систем и требований к скорости обмена.

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

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

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

Вторая группа — работа с сырым форматом. GUID в навигационной ссылке, в СУБД и в строковом представлении 1С выглядит по-разному из-за порядка байт. Сравнивать их «как есть» нельзя — нужны функции преобразования.

Типичные ошибки
01
Сравнение GUID из SQL-таблицы со строкой 1С без преобразования порядка байт — объекты «не находятся»
02
Использование ПолучитьСсылку() без проверки существования — в данных появляются битые ссылки
03
Сопоставление объектов между базами по коду вместо GUID — дубли при разной префиксации
04
Хранение GUID в реквизите с ограничением длины меньше 36 символов — обрезанные идентификаторы

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

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

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

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

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

36 символов в виде 8-4-4-4-12 шестнадцатеричных цифр

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

Другая длина, обрезанные или переставленные блоки

Обратное получение ссылки
Норма

ПолучитьСсылку() возвращает ссылку, объект открывается, реквизиты читаются

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

Объект не найден или пустая ссылка

Совпадение объекта
Норма

Наименование и код соответствуют исходному объекту

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

Открывается другой элемент — GUID перепутан

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

Итог

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

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

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

Можно ли изменить GUID существующего объекта?

Штатными средствами — нет, идентификатор доступен только для чтения. Единственный легальный способ «получить другой GUID» — создать новый объект и перенести в него данные, а старый удалить. Прямая правка таблиц СУБД разрушит ссылочную целостность.

Почему GUID одного объекта разный в рабочей и тестовой базе?

Если тестовая база создана не копированием, а загрузкой данных через обмен или вводом объектов заново, платформа сгенерировала новые идентификаторы. Чтобы GUID совпадали, базу нужно разворачивать из файловой копии (.dt) или бэкапа СУБД.

Как узнать GUID сразу для всех элементов справочника?

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

Что означает строка «Объект не найден (84:8d4a...)»?

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

Есть ли GUID у записей регистров и у пользователей?

У записей регистров сведений и накопления классического GUID ссылки нет — запись идентифицируется набором измерений, периодом и регистратором. У пользователей информационной базы идентификатор есть: он доступен через свойство УникальныйИдентификатор объекта ПользовательИнформационнойБазы.

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

Нет, GUID — это не число, а 128-битное значение. Передавать его следует в виде строки из 36 символов. При обратной загрузке строка преобразуется конструктором Новый УникальныйИдентификатор(СтрокаГУИД).