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

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

GUID в 1С: что это такое и как с ним работать

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

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

Аббревиатура GUID расшифровывается как Globally Unique Identifier — глобально уникальный идентификатор. В 1С он представлен типом «УникальныйИдентификатор» и выглядит как строка из 36 символов в шестнадцатеричном формате, например: 8a3f2c1d-5e6b-4a7c-9d8e-1f2a3b4c5d6e. Вероятность совпадения двух случайно сгенерированных GUID настолько мала, что в практических задачах её считают нулевой.

Разработчик или интегратор сталкивается с GUID постоянно: при обмене данными между базами, при настройке веб-сервисов, при поиске «битых» ссылок и при разборе ошибок вида «Объект не найден». Понимание того, как устроен идентификатор и где его посмотреть, экономит часы отладки.

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

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

Когда в документе «Реализация товаров» заполняется поле «Контрагент», в базе физически хранится не название контрагента, а ссылка, основанная на GUID. Если контрагента переименуют, документ ничего не потеряет — связь останется целой. Если же GUID указывает на несуществующий объект, пользователь видит в поле надпись вида «<Объект не найден> (8a3f2c1d…)

» — это и есть «битая ссылка».

Как получить GUID объекта в 1С

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

bsl
СсылкаНаЭлемент = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если Не СсылкаНаЭлемент.Пустая() Тогда
    ГУИД = СсылкаНаЭлемент.УникальныйИдентификатор();
    Сообщить(Строка(ГУИД)); // например: 8a3f2c1d-5e6b-4a7c-9d8e-1f2a3b4c5d6e
КонецЕсли;

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

bsl
ГУИД = Новый УникальныйИдентификатор("8a3f2c1d-5e6b-4a7c-9d8e-1f2a3b4c5d6e");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
    Сообщить("Объект не найден — ссылка битая");
КонецЕсли;

Проверка ПолучитьОбъект() = Неопределено — стандартный способ убедиться, что объект с таким GUID реально существует в базе. Простое сравнение ссылки с пустой здесь не сработает: ссылка по произвольному GUID формально не пустая, даже если объекта нет.

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

Далеко не всегда нужно писать код. Есть несколько способов увидеть идентификатор объекта через интерфейс или стандартные инструменты.

  • Адресная строка браузера (тонкий/веб-клиент). При открытии объекта в URL присутствует параметр ref с идентификатором ссылки в служебном представлении.
  • Внешние обработки и консоль кода. Во многих типовых инструментах администратора есть команда «Показать GUID» или аналогичная.
  • Командная панель объекта. В некоторых конфигурациях доступна команда «Получить ссылку» / «Скопировать ссылку», результат которой содержит идентификатор.
  • Запрос к таблицам СУБД. В MS SQL или PostgreSQL ссылка хранится в поле _IDRRef в двоичном виде — это тот же GUID, но в перевёрнутом порядке байтов, что требует аккуратной конвертации.

GUID при обмене данными и интеграциях

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

Отсюда следует важное правило: объекты, созданные независимо в двух базах (например, один и тот же контрагент, заведённый вручную и в ERP, и в Бухгалтерии), будут иметь разные GUID. При первом обмене появятся дубли. Чтобы этого избежать, либо вводят данные в одной системе и выгружают в другую, либо в правилах конвертации настраивают поиск по реквизитам (ИНН, код) до поиска по GUID.

В интеграциях через HTTP-сервисы и OData GUID передаётся как строка. Типовой формат OData в 1С использует конструкцию вида Catalog_Номенклатура(guid'8a3f2c1d-...'). Внешняя система должна хранить именно строковое представление и не пытаться «обрезать» или переформатировать его.

Как искать объект при обмене

По GUID

Быстро и надёжно, если базы синхронизировались с самого начала. Не работает для объектов, созданных независимо.

По реквизитам (код, ИНН)

Спасает при объединении разрозненных баз. Риск ложных совпадений, если реквизиты заполнены небрежно.

Комбинированный поиск

Сначала по GUID, при неудаче — по реквизитам. Самый устойчивый вариант для реальных обменов.

GUID и «битые» ссылки

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

Как найти и обработать битые ссылки
  1. 1
    Запустите «Тестирование и исправление» информационной базы с проверкой ссылочной целостности — предварительно сделайте резервную копию.
  2. 2
    Выберите вариант обработки: создавать объекты-заглушки, очищать ссылки или удалять объекты с битыми ссылками.
  3. 3
    Для точечного анализа найдите GUID из текста ошибки и проверьте наличие объекта кодом ПолучитьСсылку + ПолучитьОбъект.
  4. 4
    После исправления повторите проверку и убедитесь, что отчёты и обороты по затронутым данным сходятся.

Безопасная практика — сначала прогнать проверку в режиме «только проверка», выгрузить список проблемных мест и разобрать их вручную. Часто битая ссылка — симптом ошибки в обмене, и чистка без устранения причины приведёт к повторному появлению проблемы.

Сравнение объектов и типичные операции с GUID

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

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

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

Как проверить результат работы с GUID

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

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

Строковое представление GUID
Норма

36 символов, формат 8-4-4-4-12 шестнадцатеричных цифр через дефисы

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

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

Существование объекта по GUID
Норма

ПолучитьОбъект() возвращает объект, реквизиты читаются

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

ПолучитьОбъект() = Неопределено — объект удалён или GUID из другой базы

Сопоставление при обмене
Норма

После обмена количество объектов не выросло неожиданно, дублей нет

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

Появились дубли по наименованию — правила искали только по GUID

Итоговый критерий корректной работы с идентификаторами прост: любой объект однозначно находится по GUID в своей базе, обмен не плодит дубли, а внешние системы хранят идентификаторы в исходном строковом виде.

Итог

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

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

Частые вопросы о GUID в 1С

При отладке интеграций удобно завести журнал, где для каждого переданного объекта фиксируются GUID в базе 1С и идентификатор во внешней системе. Это сокращает поиск рассинхронизаций с часов до минут.
ПЗ
Практическое замечание
Может ли GUID объекта измениться?

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

Чем GUID отличается от кода справочника или номера документа?

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

Как узнать GUID объекта, если под рукой только толстый клиент без конфигуратора?

Откройте объект в тонком или веб-клиенте и посмотрите параметр ref в адресной строке браузера — там служебное представление ссылки. Альтернатива — типовые и внешние обработки с функцией «Показать GUID» либо консоль кода с однострочным вызовом УникальныйИдентификатор().

Почему при обмене появились дубли, хотя объекты «одинаковые»?

Потому что одинаковые по смыслу объекты были созданы независимо в двух базах и получили разные GUID. Правила обмена по умолчанию ищут по идентификатору, не находят совпадения и создают новый объект. Решение — настроить поиск по реквизитам (ИНН, код) или предварительно синхронизировать GUID обработкой сопоставления.

Можно ли восстановить объект, зная только его GUID из битой ссылки?

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

Безопасно ли передавать GUID во внешние системы?

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