Разработка и Конфигурация · 9 мин
Как узнать GUID объекта 1С
Практические способы узнать GUID объекта 1С: через запрос, обработку, отладчик и код. Разбор ошибок, проверка результата и ответы на частые вопросы.
GUID (глобальный уникальный идентификатор) — это внутренний идентификатор, который платформа 1С присваивает каждому объекту базы: элементу справочника, документу, записи регистра. В отличие от кода или номера, GUID не изменяется при редактировании объекта и одинаков во всех узлах обмена, поэтому именно по нему выполняется синхронизация данных между базами.
Узнать GUID чаще всего требуется при настройке обменов, поиске «битых» ссылок, отладке интеграций через веб-сервисы и при ручной регистрации объектов в планах обмена. Ниже разобраны рабочие способы получения GUID — от простого запроса до программного кода, с проверкой результата и типовыми ошибками.
Зачем нужен GUID и когда его искать
Код справочника и номер документа могут совпадать в разных базах и меняться пользователем, поэтому для обменов они не подходят. GUID уникален в рамках всей распределённой системы и назначается один раз при создании объекта. Именно по GUID механизмы обмена понимают, что два объекта в разных базах — это одно и то же.
Типовые ситуации, когда нужен GUID: объект не выгружается в другую базу и нужно проверить его регистрацию; в сообщении об ошибке обмена указан непонятный идентификатор; требуется найти «битую» ссылку вида «Объект не найден (77:8d2f...)»; нужно сопоставить объект с записью во внешней системе, которая хранит именно GUID.
Как узнать GUID через запрос
Самый быстрый способ без программирования — консоль запросов. Откройте консоль (в типовых конфигурациях на управляемых формах она есть в разделе «Инструменты разработчика», либо используйте внешнюю консоль запросов) и выполните запрос к нужной таблице.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Код = &Код";
Запрос.УстановитьПараметр("Код", "000000123");
Результат = Запрос.Выполнить().Выгрузить();
В таблице результата колонка «Ссылка» обычно показывает представление объекта. Чтобы увидеть именно GUID, обратитесь к свойству ссылки программно — через обход выборки и метод УникальныйИдентификатор(). Во многих консолях запросов есть кнопка «Показать GUID» либо колонку можно вывести через вычисляемое поле.
- 1Откройте консоль запросов или консоль кода
- 2Напишите запрос к таблице объекта с отбором по коду или наименованию
- 3Выполните запрос и найдите нужную строку
- 4Получите GUID вызовом Ссылка.УникальныйИдентификатор() для найденной строки
- 5Скопируйте строку GUID для дальнейшего использования
Программное получение GUID в коде
Если ссылка на объект уже известна, GUID получается одной строкой. Метод УникальныйИдентификатор() есть у любой ссылки на объект базы данных — справочника, документа, плана счетов и т.д.
GUIDСтрокой = Строка(Ссылка.УникальныйИдентификатор());
Сообщить(GUIDСтрокой);
Обратная задача — найти объект по известному GUID — решается методом менеджера соответствующего типа. Важно: конструктор Новый УникальныйИдентификатор(Строка) принимает строку GUID, а ПолучитьСсылку() вернёт ссылку даже если объекта нет в базе — поэтому результат нужно проверять.
Ид = Новый УникальныйИдентификатор("8d2f1a3e-5b7c-4e1d-9f2a-3c6b8d0e1f4a");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(Ид);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект с таким GUID не найден");
КонецЕсли;
GUID = Строка(Ссылка.УникальныйИдентификатор());Как узнать GUID через отладчик без написания обработки
Если под рукой нет консоли запросов, но есть конфигуратор и права на отладку, GUID можно посмотреть интерактивно. Поставьте точку останова в любом серверном обработчике, где доступна ссылка на нужный объект (например, ПриЗаписи документа), запустите отладку и в табло вычислите выражение Ссылка.УникальныйИдентификатор().
Альтернатива без точек останова — окно «Вычислить выражение» (Shift+F9) в уже запущенном сеансе отладки. Этот способ удобен разработчику, но требует остановки кода, поэтому в работающей базе пользователей применять его следует аккуратно: остановленный серверный вызов может блокировать сеанс.
Поиск объекта по GUID и «битые» ссылки
Обратная задача встречается чаще: в журнале обмена или в тексте ошибки есть GUID, и нужно понять, какой это объект и существует ли он вообще. Универсальный подход — перебрать типы метаданных и попытаться получить ссылку по GUID для каждого вида справочников и документов, затем проверить, существует ли объект.
«Битая» ссылка в интерфейсе выглядит как «Объект не найден (77:8d2f...)». Число после двоеточия — это и есть GUID в служебном представлении. Чтобы восстановить объект, можно создать новый элемент и программно присвоить ему ссылку с нужным GUID через УстановитьСсылкуНового() — так делают при восстановлении данных после сбоев обмена.
Особенности GUID в обменах и внешних системах
При обмене через планы обмена и EnterpriseData GUID передаётся вместе с объектом и служит ключом сопоставления. Если в приёмнике объект с таким GUID не найден, создаётся новый с этим же идентификатором — поэтому GUID в связанных базах совпадают, и это норма, а не ошибка.
При интеграции через веб-сервисы и HTTP-интерфейсы GUID обычно отдаётся наружу в строковом виде. Учтите, что внешние системы могут хранить его в другом регистре или с фигурными скобками — при сопоставлении приводите строки к единому формату, иначе поиск по GUID будет давать ложные промахи.
Типичные ошибки при работе с GUID
Самая частая ошибка — попытка получить GUID у объекта, а не у ссылки. У объекта (результат ПолучитьОбъект()) метод УникальныйИдентификатор() отсутствует; вызывать его нужно у свойства Ссылка. Вторая типичная ситуация — ПолучитьСсылку() возвращает ссылку на несуществующий объект, и дальнейшее обращение к реквизитам приводит к ошибке или пустым значениям.
Как проверить результат
После получения GUID убедитесь, что он корректен: строка должна состоять из 36 символов с четырьмя дефисами в стандартных позициях и содержать только шестнадцатеричные символы. Самая надёжная проверка — обратное преобразование: создайте УникальныйИдентификатор из строки и получите ссылку; если объект найден и это именно тот элемент, с которого начинали, — всё верно.
Как проверить результат
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 — они идентифицируются набором измерений (и периода для периодических регистров). Если для интеграции нужен устойчивый идентификатор, его добавляют как отдельный реквизит регистра и заполняют при записи.