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

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

Как узнать GUID объекта 1С

Практические способы узнать GUID объекта 1С: через запрос, обработку, отладчик и код. Разбор ошибок, проверка результата и ответы на частые вопросы.

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

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

Зачем нужен GUID и когда его искать

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

Типовые ситуации, когда нужен GUID: объект не выгружается в другую базу и нужно проверить его регистрацию; в сообщении об ошибке обмена указан непонятный идентификатор; требуется найти «битую» ссылку вида «Объект не найден (77:8d2f...)»; нужно сопоставить объект с записью во внешней системе, которая хранит именно GUID.

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

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка

|ИЗ

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

|ГДЕ

| Номенклатура.Код = &Код";

Запрос.УстановитьПараметр("Код", "000000123");

Результат = Запрос.Выполнить().Выгрузить();

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

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

Программное получение GUID в коде

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

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

Сообщить(GUIDСтрокой);

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

Ид = Новый УникальныйИдентификатор("8d2f1a3e-5b7c-4e1d-9f2a-3c6b8d0e1f4a");

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

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

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

КонецЕсли;

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

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

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

Альтернатива без точек останова — окно «Вычислить выражение» (Shift+F9) в уже запущенном сеансе отладки. Этот способ удобен разработчику, но требует остановки кода, поэтому в работающей базе пользователей применять его следует аккуратно: остановленный серверный вызов может блокировать сеанс.

Поиск объекта по GUID и «битые» ссылки

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

«Битая» ссылка в интерфейсе выглядит как «Объект не найден (77:8d2f...)». Число после двоеточия — это и есть GUID в служебном представлении. Чтобы восстановить объект, можно создать новый элемент и программно присвоить ему ссылку с нужным GUID через УстановитьСсылкуНового() — так делают при восстановлении данных после сбоев обмена.

Особенности GUID в обменах и внешних системах

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

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

Типичные ошибки при работе с GUID

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

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

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

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

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

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

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

36 символов, 4 дефиса, только 0-9 и a-f

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

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

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

ПолучитьСсылку() вернула ссылку, ПолучитьОбъект() не равен Неопределено

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

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

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

Найденный объект — тот же элемент, с которого получали GUID

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

Найден другой объект — ошибка в строке GUID

Итог

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

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

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

Можно ли увидеть GUID объекта в обычном режиме 1С:Предприятие без программирования?

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

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

Нет. GUID назначается один раз при создании объекта и не меняется ни при редактировании реквизитов, ни при перепроведении, ни при изменении кода или номера. Удаление объекта «освобождает» GUID, но повторно платформа его не использует.

Что означает «Объект не найден (77:8d2f...)» в списке?

Это «битая» ссылка: в поле хранится GUID объекта, который был удалён из базы или никогда в неё не загружался. Число после двоеточия — служебное представление GUID. Такие ссылки либо очищают, либо восстанавливают объект с нужным GUID из резервной копии или базы-источника обмена.

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

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

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

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

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

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