Разработка и Конфигурация · 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С
Основной способ — метод УникальныйИдентификатор() у любой ссылки. Он работает для справочников, документов, планов видов характеристик, планов счетов и других ссылочных типов.
СсылкаНаЭлемент = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если Не СсылкаНаЭлемент.Пустая() Тогда
ГУИД = СсылкаНаЭлемент.УникальныйИдентификатор();
Сообщить(Строка(ГУИД)); // например: 8a3f2c1d-5e6b-4a7c-9d8e-1f2a3b4c5d6e
КонецЕсли;Обратная задача — найти объект по известному GUID. Для этого сначала создают идентификатор из строки, затем получают ссылку через метод ПолучитьСсылку() менеджера объекта:
ГУИД = Новый УникальныйИдентификатор("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 остались в других таблицах. Платформа не может удалить сам идентификатор из всех мест, где он упоминается, — она лишь помечает такие ссылки как ведущие в никуда.
- 1Запустите «Тестирование и исправление» информационной базы с проверкой ссылочной целостности — предварительно сделайте резервную копию.
- 2Выберите вариант обработки: создавать объекты-заглушки, очищать ссылки или удалять объекты с битыми ссылками.
- 3Для точечного анализа найдите GUID из текста ошибки и проверьте наличие объекта кодом ПолучитьСсылку + ПолучитьОбъект.
- 4После исправления повторите проверку и убедитесь, что отчёты и обороты по затронутым данным сходятся.
Безопасная практика — сначала прогнать проверку в режиме «только проверка», выгрузить список проблемных мест и разобрать их вручную. Часто битая ссылка — симптом ошибки в обмене, и чистка без устранения причины приведёт к повторному появлению проблемы.
Сравнение объектов и типичные операции с GUID
В коде ссылки сравнивают напрямую оператором «=» — платформа сравнивает именно идентификаторы. Сравнивать строковые представления GUID нужно только на границе систем, например при разборе ответа внешнего сервиса.
Отдельный нюанс — генерация GUID вручную. Конструктор Новый УникальныйИдентификатор() создаёт случайный идентификатор, который можно присвоить новой ссылке через УстановитьСсылкуНового(). Это используют, когда объект нужно зарегистрировать к обмену ещё до записи или когда требуется заранее известный идентификатор на стороне внешней системы.
Как проверить результат работы с GUID
Контрольные точки
36 символов, формат 8-4-4-4-12 шестнадцатеричных цифр через дефисы
Другая длина, отсутствуют дефисы, нечитаемые символы — строка повреждена
ПолучитьОбъект() возвращает объект, реквизиты читаются
ПолучитьОбъект() = Неопределено — объект удалён или 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 в открытых источниках — исключена.