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

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

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

Что такое GUID в 1С, как устроен уникальный идентификатор ссылок, способы получить GUID объекта, восстановить ссылку по GUID и избежать битых ссылок.

GUID (Globally Unique Identifier) в 1С — это уникальный идентификатор, который платформа автоматически присваивает каждой ссылке на объект базы данных: элементу справочника, документу, записи плана счетов и так далее. Именно по GUID система различает два элемента с одинаковым наименованием, связывает объекты между собой и сопоставляет данные при обмене между базами.

GUID выглядит как строка из 32 шестнадцатеричных символов, сгруппированных дефисами, например: 8f3e2a1b-5c4d-11e9-9a3b-00155d0a1b2c. В отличие от кода или номера документа, которые пользователь может изменить, GUID не редактируется и остаётся неизменным на протяжении всей жизни объекта.

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

Как устроен GUID и где он хранится

GUID в 1С соответствует стандарту UUID (Universally Unique Identifier) и состоит из 128 бит. Вероятность совпадения двух случайно сгенерированных идентификаторов настолько мала, что для практических задач её считают нулевой. Поэтому GUID позволяет объединять данные из разных баз без риска коллизий.

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

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

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

Начинающие часто путают GUID с кодом справочника или номером документа. Это принципиально разные вещи. Код и номер — прикладные реквизиты, которые видит пользователь, которые можно редактировать и которые уникальны только в рамках конкретной базы и вида объекта.

GUID же служебный: пользователь его не видит, изменить его нельзя, и он глобально уникален. Если скопировать элемент справочника, копия получит новый GUID, даже если код и наименование совпадут.

СвойствоGUIDКод / номер
Кто назначаетПлатформа автоматическиПлатформа или пользователь
Можно изменитьНетДа
Область уникальностиГлобальнаяВ пределах базы и вида объекта
Виден пользователюНет (только программно)Да
Используется для связи объектовДаНет

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

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

bsl
Ссылка = Справочники.Номенклатура.НайтиПоКоду("000123");
ГУИД = Ссылка.УникальныйИдентификатор();
Сообщить(Строка(ГУИД)); // например: 8f3e2a1b-5c4d-11e9-9a3b-00155d0a1b2c

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

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

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

Как найти объект по GUID

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

bsl
ГУИД = Новый УникальныйИдентификатор("8f3e2a1b-5c4d-11e9-9a3b-00155d0a1b2c");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
    Сообщить("Объект с таким GUID не найден или удалён");
КонецЕсли;

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

Если вид объекта заранее неизвестен, придётся перебирать менеджеры нужных типов или использовать функции общих модулей, которые определяют тип по ссылке. В типовых конфигурациях для этого есть готовые процедуры в модулях работы со ссылками.

GUID в обменах и интеграциях

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

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

В веб-сервисах и HTTP-интерфейсах GUID передают как строку: внешняя система хранит идентификаторы объектов 1С и использует их при последующих запросах. Это стандартный подход при интеграции с сайтами, CRM и мобильными приложениями.

Битые ссылки и роль GUID в их поиске

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

Текст вида <Объект не найден> (123:8f3e00155d0a1b2c...) содержит представление GUID в специфическом формате. Из этого представления идентификатор можно восстановить программно — существуют обработки и функции, преобразующие его в обычный GUID, после чего становится понятно, какой именно объект был удалён.

Для массовой диагностики используют запросы с соединением таблиц: если при левом соединении по ссылке поля связанной таблицы равны NULL, ссылка битая. Дальше объект либо восстанавливают из архивной копии, либо очищают реквизит.

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

Практические приёмы и ограничения

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

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

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

Как проверить корректность работы с GUID

Сравнение двух идентификаторов
Норма

Сравнение выполняется как значений типа УникальныйИдентификатор, а не строк

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

Сравнение строк с разным регистром или форматом даёт ложные расхождения

Поиск объекта по GUID
Норма

После ПолучитьСсылку() выполнена проверка существования объекта

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

Ссылка используется без проверки, при обращении к реквизитам возникает ошибка

Обмен между базами
Норма

Один и тот же объект имеет одинаковый GUID в обеих базах

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

В базах дубли объектов с разными GUID — признак сбоя правил конвертации

Часто задаваемые вопросы

Можно ли изменить GUID существующего объекта?

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

Одинаковый ли GUID у объекта в разных базах после обмена?

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

Как узнать GUID предопределённого элемента?

Так же, как для обычного: получить ссылку через менеджер (например, Справочники.Валюты.Рубль или через ПредопределенноеЗначение) и вызвать УникальныйИдентификатор(). У предопределённых элементов GUID формируется по специальному правилу и одинаков во всех базах с одинаковой конфигурацией.

Что делать, если внешняя система прислала GUID в другом формате?

Приведите строку к стандартному виду: уберите фигурные скобки, проверьте наличие дефисов в позициях 8-4-4-4-12, нормализуйте регистр. После этого создайте значение через Новый УникальныйИдентификатор(Строка). Если строка не соответствует формату, конструктор выдаст ошибку — это признак некорректных данных на стороне источника.

Занимает ли GUID много места в базе?

Идентификатор занимает 16 байт в бинарном виде. На фоне типичных объёмов прикладных данных это несущественно, поэтому использование GUID как ключа связи не считается проблемой производительности в штатных сценариях работы 1С.

Итог

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

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