Разработка и Конфигурация · 11 мин
Что такое ГУИД в 1С и как с ним работать
Что такое ГУИД в 1С, как устроен уникальный идентификатор ссылок, как получить его в коде и найти объект по ГУИДу, типичные ошибки при обмене данными.
ГУИД (GUID, Globally Unique Identifier) — это глобально уникальный идентификатор, который платформа 1С автоматически присваивает каждому ссылочному объекту базы данных: элементу справочника, документу, узлу плана обмена и другим сущностям. Идентификатор формируется в момент создания объекта, никогда не повторяется и не меняется на протяжении всей жизни записи, даже если пользователь редактирует наименование, код или реквизиты.
Для пользователя ГУИД обычно невидим, но для разработчика и специалиста по интеграции это ключевой инструмент. Именно по ГУИДу системы обмениваются данными, связываются объекты в распределённых базах и строится синхронизация между 1С и внешними программами — сайтами, CRM, складскими системами. Понимание того, как устроен и где применяется уникальный идентификатор, избавляет от многих ошибок при настройке обменов и поиске дублей.
В интерфейсе программы ГУИД не отображается напрямую: пользователь видит наименование и код, а идентификатор хранится внутри ссылки на объект. Получить его можно программно через метод УникальныйИдентификатор() или через адресную строку браузера в клиент-серверном режиме, когда объект открыт по ссылке навигации.
Как устроен ГУИД и чем он отличается от кода объекта
ГУИД представляет собой 128-битное значение, которое в текстовом виде записывается как 36-символьная строка из шестнадцатеричных цифр, разделённых дефисами, например: b3f4a2c1-8d5e-4a6b-9c7d-2e1f3a4b5c6d. Вероятность случайного совпадения двух независимо сгенерированных идентификаторов настолько мала, что в практических задачах ею пренебрегают — поэтому ГУИД считается глобально уникальным.
Важно отличать ГУИД от кода элемента справочника или номера документа. Код и номер — это прикладные атрибуты, которые видит пользователь и которые могут повторяться в разных базах, меняться вручную или при перенумерации. ГУИД же генерируется платформой, недоступен для редактирования и одинаково уникален в любой базе мира. Именно поэтому при обмене данными между базами сопоставление объектов строится по ГУИДу, а не по коду.
Внутри ссылки на объект ГУИД хранится в двоичном виде и занимает 16 байт. При выгрузке в XML, JSON или при передаче через веб-сервисы он преобразуется в строковое представление, которое можно сохранить во внешней системе и потом использовать для поиска объекта обратно.
Где ГУИД используется на практике
Основная область применения — обмен данными. В планах обмена, универсальных форматах EnterpriseData, при синхронизации через конвертацию данных каждый объект идентифицируется по ГУИДу. Если в двух базах создан один и тот же контрагент независимо, у него будут разные ГУИДы, и механизм сопоставления должен либо найти соответствие по ключевым полям, либо создать дубль — это частая причина задвоения справочников после первого обмена.
Вторая область — интеграция с внешними системами. Интернет-магазин, CRM или WMS сохраняют у себя ГУИДы товаров и заказов из 1С и при последующих обменах передают их обратно. Это позволяет обновлять существующие объекты вместо создания новых. Третий сценарий — прямые ссылки на объекты: навигационная ссылка в 1С содержит ГУИД, поэтому её можно передать коллеге, и он откроет ровно тот же документ.
Как получить ГУИД объекта в коде 1С
Для получения идентификатора у объекта или ссылки используется метод УникальныйИдентификатор(). Он возвращает значение типа «УникальныйИдентификатор», которое при необходимости преобразуется в строку функцией Строка() или автоматически при присвоении строковой переменной.
ГУИДКонтрагента = КонтрагентСсылка.УникальныйИдентификатор();
СтрокаГУИД = Строка(ГУИДКонтрагента);
// Результат: "b3f4a2c1-8d5e-4a6b-9c7d-2e1f3a4b5c6d"
Обратная задача — найти объект по известному ГУИДу — решается через конструктор Новый УникальныйИдентификатор(СтрокаГУИД) и метод ПолучитьСсылку() менеджера соответствующего типа. После получения ссылки обязательно проверяйте, существует ли объект в базе, иначе можно получить «битую ссылку».
ГУИД = Новый УникальныйИдентификатор("b3f4a2c1-8d5e-4a6b-9c7d-2e1f3a4b5c6d");
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(ГУИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
// Объект с таким ГУИДом в базе отсутствует
КонецЕсли;
- 1Откройте нужный объект (справочник или документ) в режиме тонкого или веб-клиента
- 2Скопируйте навигационную ссылку: команда «Получить ссылку» в меню объекта или сочетание клавиш, предусмотренное конфигурацией
- 3Вставьте ссылку в текстовый редактор — в её конце после символа ?ref= будет ГУИД в шестнадцатеричном виде
- 4При необходимости преобразуйте внутренний формат в привычный вид через обработку или поиск в коде
Внутренний и привычный формат записи ГУИДа
Нюанс, который часто ставит в тупик начинающих разработчиков: в навигационных ссылках и при выгрузке в некоторые форматы ГУИД записывается в ином порядке байтов, чем в строковом представлении внутри языка 1С. Например, строка из навигационной ссылки 80b6c3d4e5f6a7b8c9d0e1f2a3b4c5d6 не совпадает посимвольно с результатом Строка(Ссылка.УникальныйИдентификатор()) — сегменты переставлены.
Это не ошибка, а особенность хранения: платформа использует смешанный порядок байтов для эффективной индексации. Если вы передаёте ГУИД во внешнюю систему, договоритесь о едином формате и используйте стандартное строковое представление из кода 1С. При обратном преобразовании из навигационной ссылки применяйте готовые функции перестановки сегментов, а не ручную правку строки.
Как найти объект по ГУИДу и проверить результат
Поиск по ГУИДу нужен, когда из внешней системы пришёл идентификатор, а нужно понять, какой именно объект в 1С ему соответствует. Типичная ситуация: в логе обмена зафиксирована ошибка по объекту с определённым ГУИДом, и требуется открыть его в базе. Для этого пишут несложную обработку: пользователь вставляет строку ГУИДа, обработка перебирает менеджеры ссылочных типов или использует известный тип, получает ссылку и открывает объект.
Признак успешного поиска — метод ПолучитьОбъект() возвращает объект, а у ссылки можно прочитать реквизиты, например наименование. Если объект был удалён, ссылка остаётся «битой»: обращение к реквизитам вызывает ошибку, а запрос к базе показывает, что записи нет. В планах обмена такие ссылки иногда приходят из другой базы, где объект ещё существует, — тогда стоит проверить регистрацию изменений и дождаться следующей синхронизации.
Как проверить результат поиска по ГУИДу
ПолучитьОбъект() возвращает объект, реквизиты читаются
ПолучитьОбъект() возвращает Неопределено — объект удалён или никогда не существовал
ГУИД найден в ожидаемом справочнике или виде документов
Идентификатор принадлежит объекту другого типа — ошибка в логике обмена
Строка ГУИДа из внешней системы совпадает со строковым представлением в 1С
Сегменты переставлены — используется внутренний формат навигационной ссылки
ГУИД при обмене данными: дубли, битые ссылки и восстановление
Самая распространённая проблема в распределённых базах — появление дублей, когда один и тот же реальный объект (контрагент, номенклатура) создан независимо в двух узлах и получил два разных ГУИДа. Механизмы сопоставления при первоначальной настройке обмена решают это поиском по ключевым полям: ИНН и КПП для контрагентов, артикулу для товаров. Если ключевые поля не заполнены или заполнены по-разному, дубль создаётся автоматически.
Обратная ситуация — «объект не найден» в приёмнике. Такое сообщение в протоколе обмена означает, что пришла ссылка с ГУИДом, которого нет в базе-приёмнике: объект выгрузили раньше, чем сам владельца ссылки, либо он был удалён. Безопасное действие — не удалять такие сообщения, а разобраться в порядке выгрузки и при необходимости повторно зарегистрировать объект к обмену.
Для устранения дублей в типовых конфигурациях есть штатная обработка «Поиск и удаление дублей» (в разделе администрирования). Она заменяет все ссылки на дубли ссылкой на выбранный «правильный» элемент и помечает дубли на удаление. Перед запуском убедитесь, что обмен остановлен, а резервная копия создана: массовая замена ссылок необратима без восстановления из копии.
Частые вопросы о ГУИДе в 1С
Может ли ГУИД измениться при редактировании объекта?
Нет. Идентификатор присваивается один раз при создании объекта и остаётся неизменным при любых правках наименования, кода, реквизитов и даже при восстановлении объекта из пометки на удаление. ГУИД «умирает» только вместе с физическим удалением объекта из базы.
Что такое битая ссылка и как её найти?
Битая ссылка — это ссылка с ГУИДом объекта, которого уже нет в базе. В запросах она выглядит как ссылка с нечитаемыми реквизитами, в интерфейсе — как строка вида «Объект не найден». Найти такие ссылки можно типовой обработкой группового перепроведения или запросом с проверкой через соединение с таблицей справочника, где отсутствующие записи дадут NULL.
Почему ГУИД из навигационной ссылки не совпадает со строкой из кода?
Платформа хранит идентификатор в смешанном порядке байтов для оптимизации индексов, поэтому в навигационной ссылке и в XML-выгрузках сегменты ГУИДа переставлены относительно строкового представления. Это один и тот же идентификатор в разных форматах записи. Для преобразования используйте готовые функции перестановки сегментов, а не ручное редактирование.
Можно ли присвоить новому объекту ГУИД существующего?
Технически да: метод УстановитьСсылкуНового() позволяет задать ссылку с нужным идентификатором до записи объекта. Это применяют при переносе данных, чтобы сохранить связи. Но в рабочей базе с настроенным обменом делать этого не стоит — конфликт идентификаторов приведёт к потере или подмене данных при синхронизации.
Есть ли ГУИД у записей регистров?
Нет. Регистры сведений, накопления, бухгалтерии и расчёта не имеют собственных уникальных идентификаторов у записей. Запись регистра сведений идентифицируется ключом (измерениями и, для периодических, периодом), а движения документа — связью с регистратором, у которого ГУИД уже есть.
Как узнать ГУИД объекта, не открывая конфигуратор?
Проще всего скопировать навигационную ссылку на открытый объект — ГУИД содержится в её конце. Также во многих конфигурациях есть внешние обработки «Уникальный идентификатор объекта», которые показывают ГУИД в привычном строковом виде и позволяют выполнить обратный поиск.
Что важно запомнить
ГУИД — это неизменяемый уникальный идентификатор ссылочного объекта 1С, который создаётся платформой и служит основой для обмена данными и интеграций. Получают его методом УникальныйИдентификатор(), обратный поиск выполняют через ПолучитьСсылку() с обязательной проверкой существования объекта. Дубли и битые ссылки устраняйте штатными обработками после создания резервной копии.