Разработка и Конфигурация · 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 выглядит так: выбираете ссылки из таблицы справочника или документа, а затем в обходе результата вызываете метод УникальныйИдентификатор():
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Код = &Код");
Запрос.УстановитьПараметр("Код", "00-000123");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ГУИД = Выборка.Ссылка.УникальныйИдентификатор();
Сообщить(Строка(ГУИД));
КонецЕсли;Если конфигурация типовая и режим запуска позволяет, откройте консоль кода (в подсистеме «Инструменты разработчика» это «Консоль кода») и выполните однострочный вызов для конкретного объекта. Результат — строка с идентификатором в стандартном формате с дефисами, которую можно скопировать и передать.
- 1Откройте консоль запросов или консоль кода (типовая подсистема «Инструменты разработчика» либо внешняя обработка)
- 2Сформируйте запрос к нужной таблице с отбором по коду, номеру или наименованию
- 3В обходе результата вызовите Ссылка.УникальныйИдентификатор() и выведите результат
- 4Скопируйте строку GUID и сверьте формат: 36 символов, 4 дефиса
- 5Проверьте, что найден именно тот объект — сравните код и наименование
Как найти объект по известному GUID
Обратная задача встречается чаще: из другой базы, файла обмена или письма пришёл идентификатор, и нужно найти соответствующий объект в своей базе. Для этого используется конструктор Новый УникальныйИдентификатор(строка) и метод менеджера объекта ПолучитьСсылку().
ГУИД = Новый УникальныйИдентификатор("a3f1c2d4-8b5e-4a6f-9c7d-2e1f0a9b8c7d");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект с таким GUID не найден");
Иначе
Сообщить("Найден: " + Строка(Ссылка));
КонецЕсли;Главная сложность — заранее неизвестен тип объекта. Если GUID пришёл без указания, документ это или справочник, придётся перебирать метаданные: последовательно вызывать ПолучитьСсылку для каждого вида справочников и документов и проверять, существует ли объект. Готовые обработки «поиск объекта по GUID» делают именно такой перебор автоматически.
Проверка существования объекта обязательна. Метод ПолучитьСсылку всегда возвращает ссылку, даже если объекта с таким GUID никогда не существовало — это будет «битая» ссылка. Признак отсутствия объекта: попытка получить объект возвращает Неопределено, а запрос по этой ссылке даёт пустой результат.
Поиск GUID через внешние обработки и типовые инструменты
Для пользователей без навыков программирования удобнее готовые обработки. Наиболее распространённые варианты: «Универсальные подбор и обработка объектов» (позволяет выбрать объект и вывести произвольный алгоритм, включая получение GUID), «Поиск объектов по GUID» (решает обратную задачу перебором метаданных) и «Редактор объекта» — показывает ссылку, GUID и позволяет открыть объект напрямую.
В типовых конфигурациях на БСП (Библиотека стандартных подсистем) часто доступна функция «Поиск ссылок на объект» и «Поиск и удаление дублей», которые оперируют ссылками, но для получения именно GUID всё равно потребуется либо консоль кода, либо обработка. В «1С:ERP» и «1С:Управление торговлей» подсистема «Инструменты разработчика» включается через настройки администрирования.
Сравнение вариантов
Подходит для разового просмотра одного объекта без прав разработчика. Ограничение: формат идентификатора отличается порядком байтов, массово не применить.
Гибкий способ для выборки GUID по условиям. Требует прав на запуск внешних обработок и базовых знаний встроенного языка.
Лучший вариант для обратной задачи, когда тип объекта неизвестен. Ограничение: обработку нужно скачать и иметь право её открывать.
Подходит разработчику при отладке обменов: GUID виден в табло для любой ссылки. Не подходит обычному пользователю и для файловых баз под нагрузкой.
Особенности GUID при обмене и в битых ссылках
При обмене через планы обмена, конвертацию данных или универсальный формат EnterpriseData сопоставление объектов идёт именно по GUID. Если один и тот же контрагент был создан вручную в двух базах независимо, у него будут разные идентификаторы — после обмена появится дубль. Поэтому при настройке интеграций полезно уметь выгружать GUID из обеих систем и сравнивать их.
Битая ссылка в журнале документов или в сообщении об ошибке выглядит как «Объект не найден (123:a3f1c2d48b5e...)». Число до двоеточия — внутренний идентификатор типа, после него — GUID объекта, который был физически удалён. Зная GUID, можно проверить, есть ли такой объект в архивной копии базы, и восстановить его оттуда, либо принять решение о замене битых ссылок.
Проверка результата и контрольные точки
После получения GUID убедитесь, что он соответствует нужному объекту: выполните обратный поиск по этому идентификатору и сравните наименование, код и дату объекта с исходными. Это особенно важно при массовой выгрузке, где смещение на одну строку в таблице результата приведёт к рассинхронизации сотен объектов.
Как проверить результат
36 символов, 4 дефиса, только цифры и буквы a–f
Нет дефисов, есть русские буквы или длина отличается — скопировано не полностью
ПолучитьСсылку + запрос возвращают именно тот объект с тем же кодом и наименованием
Объект не найден или найден другой — GUID взят не из той базы или не из той таблицы
Один и тот же объект в двух базах имеет одинаковый GUID
GUID различаются — объекты созданы независимо, после обмена будет дубль
Если GUID нужен регулярно — например, для ежедневной выгрузки каталога на сайт — не стоит делать это вручную. Правильнее добавить в обмен выгрузку идентификатора в отдельное поле или хранить сопоставление «код — GUID» в регистре сведений, чтобы интеграция не зависела от ручных операций.
Что важно запомнить
GUID — неизменяемый идентификатор объекта, который получают методом Ссылка.УникальныйИдентификатор(), через консоль запросов, внешние обработки или навигационную ссылку. Обратный поиск выполняется через ПолучитьСсылку с обязательной проверкой существования объекта. При передаче GUID между системами сверяйте формат записи и никогда не записывайте объект по несуществующей ссылке.
Частые вопросы
Можно ли узнать GUID без прав разработчика?
Да. Откройте объект в тонком или веб-клиенте и используйте команду «Получить ссылку» в меню «Ещё» — в навигационной ссылке после параметра ref= содержится идентификатор. Учтите, что порядок байтов в нём отличается от строкового представления GUID, и для передачи во внешнюю систему может потребоваться преобразование.
Почему GUID из навигационной ссылки не совпадает с тем, что показывает запрос?
Это нормально: в навигационной ссылке байты идентификатора записаны в перевёрнутом порядке внутри первых групп. Это один и тот же GUID в разных представлениях. Для сравнения приведите оба значения к одному формату или используйте метод УникальныйИдентификатор() как эталон.
Как найти объект по GUID, если неизвестно, справочник это или документ?
Нужно перебрать все виды ссылочных объектов метаданных: для каждого справочника, документа, плана счетов и т.д. вызвать ПолучитьСсылку(ГУИД) и проверить существование объекта запросом. Готовые обработки «поиск по GUID» автоматизируют этот перебор.
Меняется ли GUID при переносе объекта между базами?
При штатном обмене (планы обмена, конвертация данных, EnterpriseData) идентификатор сохраняется — объект в базе-приёмнике создаётся с тем же GUID. При ручном создании объекта в другой базе GUID будет новым, даже если все реквизиты совпадают.
Что означает «Объект не найден» с длинным кодом в сообщении?
Это битая ссылка: в базе осталась ссылка на объект, который был физически удалён. Длинный код после двоеточия — GUID удалённого объекта. По нему можно попытаться найти объект в архивной копии и восстановить, либо заменить битые ссылки штатной обработкой поиска и замены значений.
Можно ли задать объекту свой GUID вручную?
Да, методом УстановитьСсылкуНового() перед первой записью объекта можно назначить ему конкретную ссылку с нужным идентификатором. Так делают механизмы обмена. Самостоятельно без необходимости этого делать не стоит: ошибка приведёт к конфликтам сопоставления при обменах.