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

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

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

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

Уникальный идентификатор (GUID, он же УИД) — это внутренний 36-символьный код, который платформа 1С присваивает каждому объекту базы: документу, элементу справочника, записи регистра. Он выглядит примерно так: a3f1c2d4-8b5e-4a6f-9c7d-2e1f0a9b8c7d и не меняется на протяжении всей жизни объекта, в отличие от кода и номера, которые пользователь может отредактировать.

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

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

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

GUID (Globally Unique Identifier) — глобально уникальный идентификатор из 32 шестнадцатеричных символов, разделённых дефисами на пять групп. Платформа генерирует его автоматически в момент создания объекта и хранит в системном поле ссылки. Два объекта в разных базах теоретически не могут получить одинаковый GUID — именно это свойство используется во всех механизмах обмена.

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

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

Как узнать GUID объекта через адресную строку

Самый простой способ, не требующий ни программирования, ни дополнительных инструментов, — посмотреть адресную строку при открытии объекта в веб-клиенте или в браузере, если база опубликована на веб-сервере. Откройте нужный документ или элемент справочника и посмотрите на URL: в нём будет фрагмент вида ?ref=... или параметр с идентификатором.

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

Этот способ подходит, когда нужно разово узнать идентификатор одного-двух объектов и под рукой нет инструментов разработчика. Для массового получения GUID по списку объектов он неудобен — здесь нужен запрос или обработка.

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

Консоль запросов — стандартный инструмент, который есть в составе многих типовых конфигураций (например, в «1С:ERP» и «1С:Бухгалтерии» через подсистему «Инструменты разработчика») или запускается как внешняя обработка. В языке запросов идентификатор получают через представление ссылки, но чаще используют встроенный язык.

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

bsl
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Код = &Код");
Запрос.УстановитьПараметр("Код", "00-000123");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
    ГУИД = Выборка.Ссылка.УникальныйИдентификатор();
    Сообщить(Строка(ГУИД));
КонецЕсли;

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

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

Как найти объект по известному GUID

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

bsl
ГУИД = Новый УникальныйИдентификатор("a3f1c2d4-8b5e-4a6f-9c7d-2e1f0a9b8c7d");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
    Сообщить("Объект с таким GUID не найден");
Иначе
    Сообщить("Найден: " + Строка(Ссылка));
КонецЕсли;

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

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

Поиск GUID через внешние обработки и типовые инструменты

Для пользователей без навыков программирования удобнее готовые обработки. Наиболее распространённые варианты: «Универсальные подбор и обработка объектов» (позволяет выбрать объект и вывести произвольный алгоритм, включая получение GUID), «Поиск объектов по GUID» (решает обратную задачу перебором метаданных) и «Редактор объекта» — показывает ссылку, GUID и позволяет открыть объект напрямую.

В типовых конфигурациях на БСП (Библиотека стандартных подсистем) часто доступна функция «Поиск ссылок на объект» и «Поиск и удаление дублей», которые оперируют ссылками, но для получения именно GUID всё равно потребуется либо консоль кода, либо обработка. В «1С:ERP» и «1С:Управление торговлей» подсистема «Инструменты разработчика» включается через настройки администрирования.

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

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

Подходит для разового просмотра одного объекта без прав разработчика. Ограничение: формат идентификатора отличается порядком байтов, массово не применить.

Консоль запросов / консоль кода

Гибкий способ для выборки GUID по условиям. Требует прав на запуск внешних обработок и базовых знаний встроенного языка.

Внешняя обработка поиска по GUID

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

Конфигуратор и отладчик

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

Особенности GUID при обмене и в битых ссылках

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

Битая ссылка в журнале документов или в сообщении об ошибке выглядит как «Объект не найден (123:a3f1c2d48b5e...)». Число до двоеточия — внутренний идентификатор типа, после него — GUID объекта, который был физически удалён. Зная GUID, можно проверить, есть ли такой объект в архивной копии базы, и восстановить его оттуда, либо принять решение о замене битых ссылок.

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

Проверка результата и контрольные точки

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

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

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

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

36 символов, 4 дефиса, только цифры и буквы a–f

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

Нет дефисов, есть русские буквы или длина отличается — скопировано не полностью

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

ПолучитьСсылку + запрос возвращают именно тот объект с тем же кодом и наименованием

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

Объект не найден или найден другой — GUID взят не из той базы или не из той таблицы

Сопоставление при обмене
Норма

Один и тот же объект в двух базах имеет одинаковый GUID

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

GUID различаются — объекты созданы независимо, после обмена будет дубль

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

Итог

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

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

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

Можно ли узнать GUID без прав разработчика?

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

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

Это нормально: в навигационной ссылке байты идентификатора записаны в перевёрнутом порядке внутри первых групп. Это один и тот же GUID в разных представлениях. Для сравнения приведите оба значения к одному формату или используйте метод УникальныйИдентификатор() как эталон.

Как найти объект по GUID, если неизвестно, справочник это или документ?

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

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

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

Что означает «Объект не найден» с длинным кодом в сообщении?

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

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

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