Разработка и Конфигурация · 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С идентификатор ссылки получают методом УникальныйИдентификатор(). Метод возвращает значение типа «УникальныйИдентификатор», которое при преобразовании в строку даёт привычный вид с дефисами.
Ссылка = Справочники.Номенклатура.НайтиПоКоду("000123");
ГУИД = Ссылка.УникальныйИдентификатор();
Сообщить(Строка(ГУИД)); // например: 8f3e2a1b-5c4d-11e9-9a3b-00155d0a1b2cGUID можно получить и в запросе — функция языка запросов для этого не предусмотрена напрямую, но поле «Ссылка» при выгрузке результата позволяет затем вызвать метод. В СКД и консолях запросов часто добавляют вычисляемое поле именно для вывода идентификаторов.
Если нужно посмотреть GUID без программирования, используют внешние обработки вроде «редактора объектов» или консоль кода: открываете объект, выполняете одну строку и получаете идентификатор. Также GUID виден в параметрах при отладке.
- 1Откройте консоль кода или внешнюю обработку для работы с объектами
- 2Получите ссылку: найдите элемент по коду, наименованию или выберите из формы
- 3Выполните выражение Ссылка.УникальныйИдентификатор()
- 4Скопируйте строковое представление GUID для дальнейшего поиска или обмена
Как найти объект по GUID
Обратная задача — восстановить ссылку по известному идентификатору. Для этого создают значение типа «УникальныйИдентификатор» из строки и передают его методу ПолучитьСсылку() менеджера нужного вида объекта.
ГУИД = Новый УникальныйИдентификатор("8f3e2a1b-5c4d-11e9-9a3b-00155d0a1b2c");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект с таким GUID не найден или удалён");
КонецЕсли;Здесь есть важный нюанс: метод ПолучитьСсылку() вернёт ссылку, даже если объекта в базе нет. Поэтому результат обязательно проверяют — либо через ПолучитьОбъект() (вернёт Неопределено для отсутствующего объекта), либо через запрос по ссылке. Пропуск этой проверки — частая причина ошибок в обменах.
Если вид объекта заранее неизвестен, придётся перебирать менеджеры нужных типов или использовать функции общих модулей, которые определяют тип по ссылке. В типовых конфигурациях для этого есть готовые процедуры в модулях работы со ссылками.
GUID в обменах и интеграциях
Основная практическая роль GUID — сопоставление объектов при обмене между базами. Когда две базы синхронизируются, именно идентификатор позволяет понять, что «Контрагент Иванов» в первой базе и «Иванов И.И.» во второй — один и тот же объект, даже если наименования и коды различаются.
В планах обмена и правилах конвертации данных GUID используется как ключ поиска. При выгрузке в XML идентификатор записывается в атрибут ссылки, при загрузке по нему ищется существующий объект. Если объект не найден, создаётся новый — и ему можно назначить тот же GUID через УстановитьСсылкуНового(), чтобы связи сохранились.
В веб-сервисах и HTTP-интерфейсах GUID передают как строку: внешняя система хранит идентификаторы объектов 1С и использует их при последующих запросах. Это стандартный подход при интеграции с сайтами, CRM и мобильными приложениями.
Битые ссылки и роль GUID в их поиске
«Битая ссылка» — это ссылка, которая хранится в реквизите, но объект с таким GUID в базе отсутствует (удалён физически или потерян при обмене). В формах и отчётах она отображается как «Объект не найден» с фрагментом идентификатора.
Текст вида <Объект не найден> (123:8f3e00155d0a1b2c...) содержит представление GUID в специфическом формате. Из этого представления идентификатор можно восстановить программно — существуют обработки и функции, преобразующие его в обычный GUID, после чего становится понятно, какой именно объект был удалён.
Для массовой диагностики используют запросы с соединением таблиц: если при левом соединении по ссылке поля связанной таблицы равны NULL, ссылка битая. Дальше объект либо восстанавливают из архивной копии, либо очищают реквизит.
Практические приёмы и ограничения
Несколько полезных особенностей, которые стоит держать в голове. Во-первых, GUID нельзя задать произвольно для уже существующего объекта — только для новой ссылки через УстановитьСсылкуНового() до записи объекта. Во-вторых, при копировании элемента интерактивно или кодом новая копия всегда получает новый GUID.
В-третьих, представление GUID в тексте ошибок и журнале регистрации отличается от стандартного строкового формата — байты внутри групп переставлены. Для преобразования используют готовые функции, а не ручную перестановку символов: ошибиться в порядке байт очень легко.
Как проверить корректность работы с GUID
Сравнение выполняется как значений типа УникальныйИдентификатор, а не строк
Сравнение строк с разным регистром или форматом даёт ложные расхождения
После ПолучитьСсылку() выполнена проверка существования объекта
Ссылка используется без проверки, при обращении к реквизитам возникает ошибка
Один и тот же объект имеет одинаковый GUID в обеих базах
В базах дубли объектов с разными GUID — признак сбоя правил конвертации
Часто задаваемые вопросы
Можно ли изменить GUID существующего объекта?
Нет, штатными средствами изменить идентификатор уже записанного объекта нельзя. Единственный способ «перенести» GUID — создать новый объект с заданной ссылкой через УстановитьСсылкуНового(), а старый удалить. Это трудоёмкая операция, требующая обновления всех ссылок на объект, и применяется только в исключительных случаях.
Одинаковый ли GUID у объекта в разных базах после обмена?
Да, если обмен настроен корректно и объект переносился механизмами синхронизации: идентификатор сохраняется при загрузке. Но если объект создавали вручную в каждой базе отдельно, GUID будут разными, и система станет считать их разными объектами, пока не выполнить сопоставление.
Как узнать GUID предопределённого элемента?
Так же, как для обычного: получить ссылку через менеджер (например, Справочники.Валюты.Рубль или через ПредопределенноеЗначение) и вызвать УникальныйИдентификатор(). У предопределённых элементов GUID формируется по специальному правилу и одинаков во всех базах с одинаковой конфигурацией.
Что делать, если внешняя система прислала GUID в другом формате?
Приведите строку к стандартному виду: уберите фигурные скобки, проверьте наличие дефисов в позициях 8-4-4-4-12, нормализуйте регистр. После этого создайте значение через Новый УникальныйИдентификатор(Строка). Если строка не соответствует формату, конструктор выдаст ошибку — это признак некорректных данных на стороне источника.
Занимает ли GUID много места в базе?
Идентификатор занимает 16 байт в бинарном виде. На фоне типичных объёмов прикладных данных это несущественно, поэтому использование GUID как ключа связи не считается проблемой производительности в штатных сценариях работы 1С.
Что важно запомнить
GUID в 1С — автоматически генерируемый неизменяемый идентификатор ссылки, глобально уникальный и невидимый пользователю. Получают его методом УникальныйИдентификатор(), восстанавливают объект через ПолучитьСсылку() с обязательной проверкой существования. Основные сценарии применения — обмен между базами, интеграции и поиск битых ссылок.