Разработка и Конфигурация · 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");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Сообщить(Строка(Выборка.Идентификатор));
КонецЕсли;
ГУИД = Ссылка.УникальныйИдентификатор(); // объект -> GUID
СтрокаГУИД = Строка(ГУИД); // "8a3f2c1e-9b4d-11e7-80c5-00155d0a0b1f"Как найти объект по известному GUID
Обратная задача решается конструктором Новый УникальныйИдентификатор(Строка) и методом ПолучитьСсылку() менеджера соответствующего объекта. Важно: метод не проверяет существование объекта — он просто формирует ссылку. Проверку выполняют отдельно, иначе можно получить «битую» ссылку и ошибку при обращении к реквизитам:
СтрокаГУИД = "8a3f2c1e-9b4d-11e7-80c5-00155d0a0b1f";
ГУИД = Новый УникальныйИдентификатор(СтрокаГУИД);
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ИСТИНА ИЗ Справочник.Номенклатура ГДЕ Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Если Запрос.Выполнить().Пустой() Тогда
Сообщить("Объект с таким GUID в базе отсутствует");
КонецЕсли;
Если тип объекта заранее неизвестен, GUID придётся перебирать по всем видам ссылочных объектов метаданных — это медленно на больших базах. Практичнее сначала выяснить тип из источника GUID (журнал обмена, строка «Объект не найден» содержит метку типа) и искать точечно.
Где посмотреть GUID без программирования
Штатного поля с GUID в формах нет, но есть обходные пути. Самый распространённый — внешняя обработка «Поиск объекта по GUID» или универсальный отчёт, который запускают в режиме предприятия через «Файл — Открыть». Пользователь выбирает объект, обработка показывает идентификатор, либо наоборот — принимает строку GUID и находит объект. Такие обработки часто входят в комплект инструментов разработчика.
Второй путь — «Все функции» (в толстом клиенте) или консоль кода в управляемом приложении, если она подключена расширением. В простейшем случае достаточно временно добавить реквизит или вывести GUID в сообщение через встроенную обработку событий, но для разовой задачи проще открыть консоль запросов и выполнить запрос с функцией ГУИД().
Третий вариант — журнал регистрации и типовые механизмы обмена. При синхронизации через «Универсальный формат» (EnterpriseData) GUID объектов фигурирует в сообщениях обмена: их можно увидеть, открыв файл выгрузки XML или журнал сопоставления объектов в настройках синхронизации.
- 1Откройте консоль запросов или внешнюю обработку поиска по GUID
- 2Выберите нужный объект (элемент справочника или документ)
- 3Выполните запрос с функцией ГУИД(Ссылка) либо нажмите кнопку получения идентификатора
- 4Скопируйте строку GUID и сохраните её вместе с типом объекта
- 5Для обратной проверки выполните ПолучитьСсылку и убедитесь, что объект существует
Как найти GUID напрямую в базе данных SQL
В клиент-серверных базах GUID хранится в поле _IDRRef таблиц ссылочных объектов в бинарном виде (16 байт). Прямое чтение из СУБД допустимо только для анализа: запись в таблицы 1С вручную категорически запрещена, так как нарушает целостность данных и поддержку конфигурации. Для чтения используют запрос к таблице вида _Reference123 (нумерацию таблиц смотрят через функцию ПолучитьСтруктуруХраненияБазыДанных()).
Особенность: байтовый порядок GUID в SQL Server отличается от строкового представления в 1С, поэтому простое сравнение строк не сработает. Для сопоставления применяют специальные функции преобразования или ищут объект средствами 1С, а SQL используют лишь для массовой диагностики — например, поиска всех записей с конкретным идентификатором по всем таблицам.
Частые ошибки и ограничения при работе с GUID
Первая типичная ошибка — попытка найти GUID в регистрах сведений или накопления. GUID есть только у ссылочных объектов; записи регистров идентифицируются измерениями, периодом и регистратором. Вторая ошибка — сравнение GUID из разных баз после загрузки не через обмен, а через создание новых объектов: при обычном копировании объект получит новый идентификатор, и сопоставление «по GUID» развалится.
Третья проблема — регистр символов и формат строки. Строковое представление GUID в 1С использует строчные буквы и дефисы; внешние системы могут отдавать его в верхнем регистре, в фигурных скобках или без дефисов. Перед сравнением строки нормализуют: приводят к нижнему регистру и единому формату, иначе сопоставление «не находит» существующий объект.
Проверка результата и контрольные точки
После получения GUID убедитесь, что он корректен и указывает на нужный объект. Контрольные точки ниже помогают отличить рабочий результат от типичной ошибки.
Как проверить результат
36 символов: 5 групп шестнадцатеричных цифр через дефис
Нет дефисов, лишние скобки, длина отличается — строка требует нормализации
ПолучитьСсылку + запрос подтверждают существование, реквизиты читаются
Запрос пустой или «Объект не найден» — GUID не из этой базы или объект удалён
Один и тот же GUID в обеих базах указывает на логически одинаковый объект
GUID есть, но объекты разные — сопоставление настроено неверно
FAQ
Можно ли увидеть GUID в форме элемента без доработок?
Нет, штатные формы GUID не показывают. Используйте внешнюю обработку поиска по GUID, консоль запросов с функцией ГУИД() или временное сообщение через встроенный код.
Меняется ли GUID при перенумерации или переименовании объекта?
Нет. Идентификатор присваивается при создании объекта и не меняется ни при смене кода, ни при изменении наименования, ни при переносе через планы обмена. Новый GUID объект получает только при создании «с нуля», например при ручном копировании в другой базе.
Как по строке «Объект не найден (123:8a3f...)» найти, что было удалено?
Часть после двоеточия — это GUID в шестнадцатеричном служебном формате, а число до двоеточия — метка типа объекта. По метке определяют вид объекта (например, справочник или документ), затем выполняют поиск по GUID средствами 1С или специальной обработкой восстановления ссылок.
Можно ли задать объекту нужный GUID вручную?
Да, программно: метод УстановитьСсылкуНового(Ссылка) у объекта позволяет назначить ссылку с заданным идентификатором до записи. Это используют при миграциях. Назначить GUID уже записанному объекту нельзя — идентификатор неизменен.
Одинаков ли GUID в файловой и клиент-серверной базе?
GUID — свойство объекта, а не способа хранения. При корректной выгрузке/загрузке (dt, обмен) идентификаторы сохраняются независимо от того, файловая база или серверная. Различия есть только во внутреннем представлении на уровне СУБД.
Что важно запомнить
GUID объекта 1С не виден в интерфейсе и получается только программно: УникальныйИдентификатор() в коде или ГУИД() в запросе. Обратный поиск — ПолучитьСсылку с обязательной проверкой существования. Идентификатор неизменен, но гарантированно совпадает между базами только при обмене или переносе с сохранением ссылок.