Разработка и Конфигурация · 8 мин
1С: как получить УИД объекта
Как получить УИД (GUID) объекта в 1С: через код, ссылку, запрос и внешние инструменты. Примеры на встроенном языке, типичные ошибки и проверка результата.
УИД (уникальный идентификатор, GUID) — это 36-символьная строка вида «8d3f0a1e-2b4c-4d5e-9f6a-7b8c9d0e1f2a», которую платформа 1С присваивает каждому объекту базы: элементу справочника, документу, записи регистра. Знать УИД нужно при обмене данными между базами, интеграции с внешними системами, поиске «потерянных» объектов и отладке синхронизаций.
Получить идентификатор можно несколькими способами: программно через встроенный язык, через консоль кода, внешними инструментами вроде стандартной обработки или через запрос к базе. Выбор зависит от того, есть ли у вас доступ к конфигуратору, работаете вы в обычном или управляемом приложении и нужен ли разовый результат или механизм в составе решения.
Что такое УИД в 1С и чем он отличается от ссылки
Ссылка — это внутреннее значение платформы, которое однозначно указывает на объект базы данных. УИД — строковое представление этой ссылки, понятное внешним системам. Одна и та же ссылка всегда даёт один и тот же идентификатор, и наоборот: по УИД можно восстановить ссылку, если известен тип объекта.
Важно понимать, что УИД не виден в интерфейсе по умолчанию. В формах списков и карточках объектов он не отображается, потому что предназначен для машинной обработки, а не для пользователя. Поэтому «посмотреть УИД» штатной кнопкой в типовой конфигурации обычно нельзя — нужен либо код, либо дополнительный инструмент.
Как получить УИД программно через код
Основной способ — метод УникальныйИдентификатор() у ссылки. Он возвращает значение типа «УникальныйИдентификатор», которое легко преобразуется в строку.
// Получаем УИД известной ссылки
СсылкаНаЭлемент = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если Не СсылкаНаЭлемент.Пустая() Тогда
УИДСтрокой = Строка(СсылкаНаЭлемент.УникальныйИдентификатор());
Сообщить(УИДСтрокой); // например: "8d3f0a1e-2b4c-4d5e-9f6a-7b8c9d0e1f2a"
КонецЕсли;
Если объект у вас уже открыт в переменной (например, в обработчике формы), обращайтесь к его свойству Ссылка: Объект.Ссылка.УникальныйИдентификатор(). У самого объекта (типа «СправочникОбъект») метода нет — идентификатор берётся только со ссылки.
УИД = Ссылка.УникальныйИдентификатор();
СтрокаУИД = Строка(УИД);Обратная задача: найти объект по УИД
Частая ситуация — есть строка идентификатора из внешней системы или сообщения об ошибке обмена, и нужно найти объект в базе. Для этого используется конструктор Новый УникальныйИдентификатор(СтрокаУИД) и метод менеджера ПолучитьСсылку().
СтрокаУИД = "8d3f0a1e-2b4c-4d5e-9f6a-7b8c9d0e1f2a";
УИД = Новый УникальныйИдентификатор(СтрокаУИД);
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(УИД);
// Проверяем, существует ли объект реально
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Если Запрос.Выполнить().Пустой() Тогда
Сообщить("Объект с таким УИД не найден");
КонецЕсли;
Обратите внимание: ПолучитьСсылку всегда вернёт ссылку, даже если объекта с таким идентификатором в базе нет. Проверка существования через запрос или через попытку получения объекта обязательна, иначе рискуете работать с «битой» ссылкой.
Как узнать УИД без программирования
Если под рукой нет конфигуратора и прав на выполнение кода, есть обходные пути. В управляемом приложении откройте список объектов, нажмите «Ещё → Вывести список» и добавьте в настройку поле «Ссылка» — но учтите, что выводится внутреннее представление, а не классический GUID, поэтому способ подходит ограниченно.
Практичнее использовать универсальные внешние обработки (консоль кода, «Поиск объектов по GUID» и подобные), которые администратор запускает через «Файл → Открыть». Такие обработки показывают идентификатор выбранного объекта и выполняют обратный поиск. В клиент-серверном режиме УИД также виден в технологическом журнале и в СУБД-инструментах, но прямой доступ к таблицам СУБД требует понимания структуры хранения 1С и допустим только на чтение.
- 1Откройте внешнюю консоль кода или создайте простую обработку
- 2Получите ссылку на объект: поиском по коду, наименованию или через выбор пользователя
- 3Выполните Сообщить(Строка(Ссылка.УникальныйИдентификатор()))
- 4Скопируйте 36-символьную строку из окна сообщений
- 5Проверьте результат обратным поиском через ПолучитьСсылку
Особенности в управляемом приложении и на сервере
Метод УникальныйИдентификатор() доступен и на клиенте, и на сервере, поэтому в управляемых формах его можно вызывать напрямую — например, по кнопке «Показать УИД». Это удобно для доработки карточек объектов: добавьте команду формы, которая выводит идентификатор текущей ссылки через ПоказатьПредупреждение или копирует в буфер обмена.
В тонком и веб-клиенте ограничений для этого метода нет. Ограничения возникают только при попытке выполнить произвольный код в безопасном режиме (например, во внешних обработках с ограниченными правами) — там доступ к прикладным объектам может быть запрещён настройками профиля безопасности.
Типичные ошибки при работе с УИД
Самая частая ошибка — попытка вызвать УникальныйИдентификатор() у объекта, а не у ссылки, либо у пустой ссылки. Пустая ссылка вернёт идентификатор из нулей, что при обмене интерпретируется как отсутствие значения и приводит к неоднозначным сопоставлениям.
Вторая типичная проблема — сравнение УИД как строк без учёта регистра и формата. Внешние системы могут передавать идентификатор в верхнем регистре или с фигурными скобками. Перед сравнением приводите обе строки к одному виду: нижний регистр, без скобок и пробелов.
Проверка результата
После получения УИД убедитесь, что он корректен: длина строки — 36 символов, формат — пять групп шестнадцатеричных цифр через дефис. Выполните обратный поиск: создайте Новый УникальныйИдентификатор из строки и получите ссылку — она должна указывать на исходный объект.
Как проверить результат
36 символов, 5 групп через дефис, только цифры и a-f
Другая длина, скобки, русские буквы — строка повреждена
ПолучитьСсылку(УИД) возвращает тот же объект
Ссылка получена, но запрос не находит объект — объекта нет в базе
УИД отличается от 00000000-0000-0000-0000-000000000000
Нулевой идентификатор — ссылка была пустой
Что важно запомнить
УИД получают методом УникальныйИдентификатор() у ссылки, обратный поиск — через ПолучитьСсылку с обязательной проверкой существования. Для разовых задач достаточно консоли кода, для пользователей — кнопки в форме или внешней обработки.
Частые вопросы
Можно ли увидеть УИД объекта в типовой форме без доработок?
Штатного отображения GUID в карточках типовых конфигураций нет. Варианты без программирования: универсальная внешняя обработка поиска по GUID или вывод поля «Ссылка» в списке, хотя последний показывает не классический формат GUID.
Изменится ли УИД после обмена данными между базами?
При штатных механизмах обмена (планы обмена, EnterpriseData) идентификатор сохраняется — именно по нему объекты сопоставляются. При переносе через произвольные файлы без передачи GUID объект в новой базе получит новый идентификатор.
Как получить УИД сразу для списка объектов?
Выполните цикл по выборке запроса: для каждой строки вызовите Выборка.Ссылка.УникальныйИдентификатор() и выведите результат в табличный документ или сообщение. Для больших объёмов выгружайте в файл, чтобы не переполнять окно сообщений.
Чем УИД отличается от кода и номера документа?
Код и номер — прикладные реквизиты, которые могут повторяться между базами и меняться пользователем. УИД генерируется платформой, уникален в пределах всей системы и не редактируется, поэтому именно он используется для надёжной идентификации при интеграциях.
Можно ли задать объекту свой УИД вручную?
Технически — да, через УстановитьСсылкуНового с заранее созданной ссылкой по нужному GUID. Это применяют при миграциях, чтобы сохранить сопоставление с внешней системой. Без крайней необходимости делать этого не стоит: ошибка приведёт к конфликтам идентификаторов.
Работает ли метод УникальныйИдентификатор() в тонком клиенте?
Да, метод доступен в тонком, толстом и веб-клиенте. Ограничения возможны только в безопасном режиме выполнения внешних обработок, где администратор запретил доступ к прикладным объектам.