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

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

1С: как получить УИД объекта

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

УИД (уникальный идентификатор, GUID) — это 36-символьная строка вида «8d3f0a1e-2b4c-4d5e-9f6a-7b8c9d0e1f2a», которую платформа 1С присваивает каждому объекту базы: элементу справочника, документу, записи регистра. Знать УИД нужно при обмене данными между базами, интеграции с внешними системами, поиске «потерянных» объектов и отладке синхронизаций.

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

Что такое УИД в 1С и чем он отличается от ссылки

Ссылка — это внутреннее значение платформы, которое однозначно указывает на объект базы данных. УИД — строковое представление этой ссылки, понятное внешним системам. Одна и та же ссылка всегда даёт один и тот же идентификатор, и наоборот: по УИД можно восстановить ссылку, если известен тип объекта.

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

Как получить УИД программно через код

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

// Получаем УИД известной ссылки

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

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

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

Сообщить(УИДСтрокой); // например: "8d3f0a1e-2b4c-4d5e-9f6a-7b8c9d0e1f2a"

КонецЕсли;

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

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

Обратная задача: найти объект по УИД

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

СтрокаУИД = "8d3f0a1e-2b4c-4d5e-9f6a-7b8c9d0e1f2a";

УИД = Новый УникальныйИдентификатор(СтрокаУИД);

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

// Проверяем, существует ли объект реально

Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Ссылка = &Ссылка");

Запрос.УстановитьПараметр("Ссылка", Ссылка);

Если Запрос.Выполнить().Пустой() Тогда

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

КонецЕсли;

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

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

Если под рукой нет конфигуратора и прав на выполнение кода, есть обходные пути. В управляемом приложении откройте список объектов, нажмите «Ещё → Вывести список» и добавьте в настройку поле «Ссылка» — но учтите, что выводится внутреннее представление, а не классический GUID, поэтому способ подходит ограниченно.

Практичнее использовать универсальные внешние обработки (консоль кода, «Поиск объектов по GUID» и подобные), которые администратор запускает через «Файл → Открыть». Такие обработки показывают идентификатор выбранного объекта и выполняют обратный поиск. В клиент-серверном режиме УИД также виден в технологическом журнале и в СУБД-инструментах, но прямой доступ к таблицам СУБД требует понимания структуры хранения 1С и допустим только на чтение.

Порядок действий для разового получения УИД
  1. 1
    Откройте внешнюю консоль кода или создайте простую обработку
  2. 2
    Получите ссылку на объект: поиском по коду, наименованию или через выбор пользователя
  3. 3
    Выполните Сообщить(Строка(Ссылка.УникальныйИдентификатор()))
  4. 4
    Скопируйте 36-символьную строку из окна сообщений
  5. 5
    Проверьте результат обратным поиском через ПолучитьСсылку

Особенности в управляемом приложении и на сервере

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

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

Типичные ошибки при работе с УИД

Самая частая ошибка — попытка вызвать УникальныйИдентификатор() у объекта, а не у ссылки, либо у пустой ссылки. Пустая ссылка вернёт идентификатор из нулей, что при обмене интерпретируется как отсутствие значения и приводит к неоднозначным сопоставлениям.

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

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

Проверка результата

После получения УИД убедитесь, что он корректен: длина строки — 36 символов, формат — пять групп шестнадцатеричных цифр через дефис. Выполните обратный поиск: создайте Новый УникальныйИдентификатор из строки и получите ссылку — она должна указывать на исходный объект.

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

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

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

36 символов, 5 групп через дефис, только цифры и a-f

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

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

Обратный поиск
Норма

ПолучитьСсылку(УИД) возвращает тот же объект

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

Ссылка получена, но запрос не находит объект — объекта нет в базе

Пустая ссылка
Норма

УИД отличается от 00000000-0000-0000-0000-000000000000

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

Нулевой идентификатор — ссылка была пустой

Итог

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

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

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

Можно ли увидеть УИД объекта в типовой форме без доработок?

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

Изменится ли УИД после обмена данными между базами?

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

Как получить УИД сразу для списка объектов?

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

Чем УИД отличается от кода и номера документа?

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

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

Технически — да, через УстановитьСсылкуНового с заранее созданной ссылкой по нужному GUID. Это применяют при миграциях, чтобы сохранить сопоставление с внешней системой. Без крайней необходимости делать этого не стоит: ошибка приведёт к конфликтам идентификаторов.

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

Да, метод доступен в тонком, толстом и веб-клиенте. Ограничения возможны только в безопасном режиме выполнения внешних обработок, где администратор запретил доступ к прикладным объектам.