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

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

GUID в 1С: где найти и как получить уникальный идентификатор объекта

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

GUID (глобальный уникальный идентификатор) в 1С — это 36-символьная строка вида 8a3f2c1e-9b4d-11e7-80c5-00155d0a0b1f, которая однозначно определяет ссылочный объект базы: элемент справочника, документ, план счетов и так далее. В отличие от кода или номера, GUID не меняется при переименовании, перенумерации и переносе данных между базами, поэтому именно он используется при обмене, синхронизации и интеграциях с внешними системами.

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

Важно различать две задачи: получить GUID по известной ссылке и найти объект по известному GUID. Обе решаются штатными средствами платформы, но код разный, и путаница между ними — частая причина ошибок «объект не найден».

Что такое GUID в 1С и зачем он нужен

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

GUID незаменим в трёх сценариях. Первый — синхронизация между базами: идентификатор позволяет понять, что «Номенклатура» в ERP и «Номенклатура» в Бухгалтерии — один и тот же товар. Второй — интеграция с сайтом, CRM или мобильным приложением: внешняя система хранит GUID и обращается к конкретному объекту через HTTP-сервис или веб-сервис. Третий — поиск «битых ссылок» и восстановление удалённых объектов, когда в базе осталась строка вида «Объект не найден (123:8a3f...)».

Как получить GUID по ссылке на объект

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

Элемент = Справочники.Номенклатура.НайтиПоКоду("000000123");

Если Не Элемент.Пустая() Тогда

ГУИД = Элемент.УникальныйИдентификатор();

Сообщить(Строка(ГУИД)); // например: 8a3f2c1e-9b4d-11e7-80c5-00155d0a0b1f

КонецЕсли;

Тот же результат даёт запрос с функцией ГУИД() — она удобна, когда нужно выгрузить идентификаторы сразу для списка объектов или передать их в таблицу значений:

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

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

"ВЫБРАТЬ

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

| ГУИД(Номенклатура.Ссылка) КАК Идентификатор

|ИЗ

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

|ГДЕ

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

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

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда

Сообщить(Строка(Выборка.Идентификатор));

КонецЕсли;

bsl
ГУИД = Ссылка.УникальныйИдентификатор(); // объект -> GUID
СтрокаГУИД = Строка(ГУИД); // "8a3f2c1e-9b4d-11e7-80c5-00155d0a0b1f"

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

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

СтрокаГУИД = "8a3f2c1e-9b4d-11e7-80c5-00155d0a0b1f";

ГУИД = Новый УникальныйИдентификатор(СтрокаГУИД);

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

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

Запрос.Текст = "ВЫБРАТЬ ИСТИНА ИЗ Справочник.Номенклатура ГДЕ Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

Если Запрос.Выполнить().Пустой() Тогда

Сообщить("Объект с таким GUID в базе отсутствует");

КонецЕсли;

Если тип объекта заранее неизвестен, GUID придётся перебирать по всем видам ссылочных объектов метаданных — это медленно на больших базах. Практичнее сначала выяснить тип из источника GUID (журнал обмена, строка «Объект не найден» содержит метку типа) и искать точечно.

Где посмотреть GUID без программирования

Штатного поля с GUID в формах нет, но есть обходные пути. Самый распространённый — внешняя обработка «Поиск объекта по GUID» или универсальный отчёт, который запускают в режиме предприятия через «Файл — Открыть». Пользователь выбирает объект, обработка показывает идентификатор, либо наоборот — принимает строку GUID и находит объект. Такие обработки часто входят в комплект инструментов разработчика.

Второй путь — «Все функции» (в толстом клиенте) или консоль кода в управляемом приложении, если она подключена расширением. В простейшем случае достаточно временно добавить реквизит или вывести GUID в сообщение через встроенную обработку событий, но для разовой задачи проще открыть консоль запросов и выполнить запрос с функцией ГУИД().

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

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

Как найти GUID напрямую в базе данных SQL

В клиент-серверных базах GUID хранится в поле _IDRRef таблиц ссылочных объектов в бинарном виде (16 байт). Прямое чтение из СУБД допустимо только для анализа: запись в таблицы 1С вручную категорически запрещена, так как нарушает целостность данных и поддержку конфигурации. Для чтения используют запрос к таблице вида _Reference123 (нумерацию таблиц смотрят через функцию ПолучитьСтруктуруХраненияБазыДанных()).

Особенность: байтовый порядок GUID в SQL Server отличается от строкового представления в 1С, поэтому простое сравнение строк не сработает. Для сопоставления применяют специальные функции преобразования или ищут объект средствами 1С, а SQL используют лишь для массовой диагностики — например, поиска всех записей с конкретным идентификатором по всем таблицам.

Частые ошибки и ограничения при работе с GUID

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

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

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

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

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

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

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

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

36 символов: 5 групп шестнадцатеричных цифр через дефис

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

Нет дефисов, лишние скобки, длина отличается — строка требует нормализации

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

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

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

Запрос пустой или «Объект не найден» — GUID не из этой базы или объект удалён

Совпадение при синхронизации
Норма

Один и тот же GUID в обеих базах указывает на логически одинаковый объект

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

GUID есть, но объекты разные — сопоставление настроено неверно

FAQ

Можно ли увидеть GUID в форме элемента без доработок?

Нет, штатные формы GUID не показывают. Используйте внешнюю обработку поиска по GUID, консоль запросов с функцией ГУИД() или временное сообщение через встроенный код.

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

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

Как по строке «Объект не найден (123:8a3f...)» найти, что было удалено?

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

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

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

Одинаков ли GUID в файловой и клиент-серверной базе?

GUID — свойство объекта, а не способа хранения. При корректной выгрузке/загрузке (dt, обмен) идентификаторы сохраняются независимо от того, файловая база или серверная. Различия есть только во внутреннем представлении на уровне СУБД.

Итог

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

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