Разработка и Конфигурация · 9 мин
Уникальный идентификатор в 1С: что это и как с ним работать
Что такое уникальный идентификатор (GUID) в 1С, как получить и найти объект по нему, как преобразовать ссылку в GUID и обратно, типичные ошибки и примеры кода.
Каждый объект ссылочного типа в 1С — элемент справочника, документ, задача, счёт — получает при создании уникальный идентификатор (GUID, Globally Unique Identifier). Это значение генерируется платформой автоматически, не повторяется в пределах информационной базы и не меняется на протяжении всей жизни объекта. Именно по GUID, а не по коду или наименованию, платформа внутренне различает записи.
Понимание того, как устроен и где применяется уникальный идентификатор, необходимо в трёх практических ситуациях: при настройке обмена данными между базами, при поиске «потерянного» объекта по ссылке из ошибки и при разработке интеграций с внешними системами. Ниже разобраны устройство GUID, способы его получения, обратное преобразование и типичные ошибки.
Что представляет собой GUID в 1С и как устроен
Технически GUID — это 128-битное число, отображаемое в виде строки вида 8d3f5a2b-1c4e-4a7b-9d0e-2f6a8b1c3d5e. Вероятность случайного совпадения двух независимо сгенерированных идентификаторов настолько мала, что в практических задачах ей пренебрегают: GUID считается глобально уникальным.
Важное свойство 1С: GUID формируется в момент создания объекта и присваивается ссылке ещё до записи в базу. Это позволяет заранее знать идентификатор будущего объекта — например, чтобы связать его с другими данными в одной транзакции. После записи идентификатор зафиксирован: переименование, смена кода или перенос в другую группу на него не влияют.
Отличие GUID от кода и номера принципиально. Код справочника или номер документа — это «человеческие» реквизиты, которые могут дублироваться между базами, меняться при перенумерации и зависеть от префиксов. GUID — машинный идентификатор, не зависящий ни от чего, кроме факта создания конкретной записи.
Где GUID применяется на практике
Главная область применения — обмены данными. Механизмы конвертации данных, планы обмена и типовые синхронизации (например, между «Управлением торговлей» и «Бухгалтерией») сопоставляют объекты разных баз именно по GUID. Если в одной базе создать контрагента вручную, а в другой он придёт из обмена, совпадения наименований недостаточно — система ориентируется на идентификатор.
Вторая область — диагностика. В сообщениях об ошибках, журналах регистрации и «битых ссылках» объект часто фигурирует в виде GUID, и умение найти по нему запись экономит часы ручного поиска.
Третья область — интеграции. Веб-сервисы, HTTP-API и внешние системы (сайты, CRM) передают идентификаторы объектов 1С в виде строк GUID, потому что это единственный стабильный ключ, который можно хранить во внешней базе.
Как получить GUID объекта в коде
У любой ссылки есть свойство УникальныйИдентификатор(), возвращающее значение типа «УникальныйИдентификатор». Чтобы получить строковое представление, значение преобразуют функцией Строка() или оператором присваивания в строковую переменную.
СсылкаНаКонтрагента = Справочники.Контрагенты.НайтиПоКоду("000000123");
ГУИД = СсылкаНаКонтрагента.УникальныйИдентификатор();
СтрокаГУИД = Строка(ГУИД);
Сообщить(СтрокаГУИД); // например: 8d3f5a2b-1c4e-4a7b-9d0e-2f6a8b1c3d5eДля нового, ещё не записанного объекта идентификатор можно задать вручную методом УстановитьСсылкуНового(). Это используется при обменах, когда нужно создать объект с заранее известным GUID, пришедшим из другой базы:
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.УстановитьСсылкуНового(
Справочники.Номенклатура.ПолучитьСсылку(
Новый УникальныйИдентификатор("8d3f5a2b-1c4e-4a7b-9d0e-2f6a8b1c3d5e")));
НовыйЭлемент.Наименование = "Позиция из обмена";
НовыйЭлемент.Записать();Как найти объект по GUID
Обратная задача — восстановить ссылку по строковому идентификатору — решается методом ПолучитьСсылку() у менеджера соответствующего вида объектов. Строку предварительно преобразуют в тип «УникальныйИдентификатор» через конструктор.
- 1Получите строку GUID из ошибки, журнала регистрации или внешней системы.
- 2Определите вид объекта: справочник, документ и т.д. — это часто видно по контексту сообщения.
- 3Создайте значение: Новый УникальныйИдентификатор(СтрокаГУИД).
- 4Получите ссылку: Справочники.ИмяСправочника.ПолучитьСсылку(ГУИД).
- 5Проверьте, что объект существует: сравните ПолучитьОбъект() с Неопределено или проверьте запросом.
Если вид объекта неизвестен, придётся перебирать менеджеры ссылочных типов или воспользоваться типовой обработкой «Поиск и удаление дублей» / универсальными инструментами разработчика, где поиск по GUID реализован по всем видам метаданных. Проверка существования обязательна: ПолучитьСсылку() возвращает ссылку даже на несуществующий объект, и обращение к её реквизитам приведёт к ошибке.
GUID в обменах и «битые ссылки»
При удалении объекта, на который ссылаются другие записи, в базе остаётся «битая ссылка» — значение вида «Объект не найден (8d3f5a2b:...)». Строка в скобках — это и есть GUID удалённого объекта, записанный в сокращённом формате. По нему можно понять, какая именно запись была удалена, и, при необходимости, восстановить объект из копии базы с тем же идентификатором через УстановитьСсылкуНового().
В планах обмена GUID играет роль ключа сопоставления. Типовые механизмы при загрузке сначала ищут объект по GUID, затем — по полям поиска (код, наименование, ИНН). Если объект создан вручную в обеих базах, у него разные GUID, и без дополнительных правил поиска появятся дубли. Поэтому начальную выгрузку справочников корректно выполнять из одной базы, а не создавать записи параллельно.
Типичные ошибки при работе с GUID
Отдельная ловушка — хранение GUID во внешних системах в виде строк с дефисами в «человеческом» порядке. Внутреннее двоичное представление GUID в 1С отличается от текстового порядка байтов, поэтому при интеграциях всегда передавайте идентификатор как строку, полученную через Строка(Ссылка.УникальныйИдентификатор()), и обратно — через конструктор Новый УникальныйИдентификатор(Строка). Это гарантирует симметричность преобразования.
Как проверить результат
Как проверить результат
Строка из 32 символов с дефисами, повторный вызов даёт то же значение
Пустая строка или ошибка — значит, переменная не является ссылкой
ПолучитьОбъект() вернул объект, реквизиты читаются
Объект = Неопределено — записи с таким GUID нет или неверно указан вид метаданных
После записи УникальныйИдентификатор совпадает с заданным
Ошибка уникальности — GUID уже занят другим объектом
FAQ
Можно ли изменить GUID существующего объекта?
Нет, штатными средствами идентификатор записанного объекта не изменяется. Обходной путь — создать новый объект с нужным GUID через УстановитьСсылкуНового() и перенести в него данные и ссылки, но это трудоёмкая операция, оправданная только при восстановлении удалённых записей.
Почему у двух одинаковых контрагентов в разных базах разные GUID?
Потому что объекты были созданы независимо. GUID присваивается в момент создания и не зависит от содержимого. Чтобы идентификаторы совпали, объект должен попасть во вторую базу обменом или переносом с сохранением ссылки.
Что означает «Объект не найден (84:8d3f...0c7e)» в поле документа?
Это битая ссылка: объект, на который указывало поле, удалён. Значение в скобках — служебное представление GUID удалённой записи. По нему можно определить, какая запись пропала, и восстановить её из резервной копии с тем же идентификатором.
Можно ли найти объект по GUID, не зная, справочник это или документ?
Да, но перебором: нужно последовательно вызвать ПолучитьСсылку() для менеджеров всех ссылочных видов и проверить существование объекта. Готовые инструменты разработчика (ИР и аналоги) делают это автоматически по всем видам метаданных.
Чем GUID отличается от кода справочника?
Код — видимый пользователю реквизит, который может повторяться между базами, меняться при перенумерации и иметь префиксы. GUID — скрытый машинный идентификатор, уникальный и неизменный. Для обменов и интеграций используют GUID, для отбора пользователем — код.
Безопасно ли передавать GUID во внешнюю систему?
Да, GUID не содержит данных объекта — это только ключ. Но учитывайте, что зная GUID и имея доступ к API, внешняя система сможет обращаться к объекту, поэтому доступ к сервисам всё равно должен ограничиваться авторизацией.
Что важно запомнить
GUID — неизменяемый 128-битный идентификатор, который платформа присваивает каждой ссылке при создании. Получают его через УникальныйИдентификатор(), обратно ссылку восстанавливают через ПолучитьСсылку() с обязательной проверкой существования объекта. В обменах сопоставляйте записи по GUID, а новые объекты с заданным идентификатором создавайте через УстановитьСсылкуНового() — и всегда на базе с актуальной архивной копией.