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

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

1С: как получить уникальный идентификатор объекта

Как получить уникальный идентификатор (GUID) объекта в 1С: способы через код, запросы, консоль и стандартные инструменты. Практические примеры и типичные ошибки.

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

Получить GUID можно несколькими способами: программно во встроенном языке, через консоль кода, запросом, а также из строки ссылки «1С». Выбор зависит от задачи — разовая проверка, разработка обмена или поиск объекта по известному идентификатору. Ниже разобраны рабочие методы с примерами кода и ограничениями.

Что такое уникальный идентификатор в 1С и когда он нужен

GUID (Globally Unique Identifier) — это 128-битное значение, которое платформа генерирует автоматически при создании объекта. В базе он хранится в поле «Ссылка» и отображается в формате вида 8d3f3b1a-1234-4abc-9def-0123456789ab. Два объекта в разных базах практически никогда не получат одинаковый идентификатор.

На практике GUID требуется в типовых сценариях:

  • настройка обмена между конфигурациями, когда объекты сопоставляются по идентификатору, а не по коду или наименованию;
  • интеграция с сайтом, CRM или веб-сервисами, где внешняя система хранит GUID как ключ записи 1С;
  • поиск «битых» ссылок и восстановление удалённых объектов;
  • отладка — когда нужно точно указать, о каком именно элементе идёт речь.

Как получить GUID программно во встроенном языке

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

СсылкаНаЭлемент = Справочники.Номенклатура.НайтиПоКоду("000000123");

Если Не СсылкаНаЭлемент.Пустая() Тогда

GUID = Строка(СсылкаНаЭлемент.УникальныйИдентификатор());

Сообщить(GUID); // например: 8d3f3b1a-1234-4abc-9def-0123456789ab

КонецЕсли;

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

Как узнать GUID без программирования

Через консоль кода

Во внешних инструментах разработчика (ИР) или любой консоли кода для управляемого приложения выполните одну строку, подставив нужную ссылку. Это самый быстрый способ разово узнать идентификатор без изменения конфигурации.

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

Через универсальные обработки

Обработки «Универсальный подбор и обработка объектов» или «Редактирование реквизитов объекта» показывают идентификатор выбранного элемента в служебных полях. Способ удобен, когда нет доступа к конфигуратору и запрещено выполнение произвольного кода.

Из технологического журнала и СУБД

На клиент-серверном варианте GUID хранится в таблицах SQL в бинарном виде, и прямой запрос к СУБД вернёт его в специфическом порядке байтов, отличном от строкового представления в 1С. Преобразование требует перестановки фрагментов, поэтому для разовых задач этот путь не рекомендуется — легко получить «перевёрнутый» идентификатор.

Как найти объект по известному GUID

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

СтрокаGUID = "8d3f3b1a-1234-4abc-9def-0123456789ab";

Идентификатор = Новый УникальныйИдентификатор(СтрокаGUID);

Ссылка = Справочники.Номенклатура.ПолучитьСсылку(Идентификатор);

Если Ссылка.ПолучитьОбъект() = Неопределено Тогда

Сообщить("Объект с таким GUID не найден (битая ссылка)");

Иначе

Сообщить("Найден: " + Ссылка);

КонецЕсли;

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

bsl
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID));
Если Ссылка.ПолучитьОбъект() <> Неопределено Тогда
    Сообщить("Объект найден");
КонецЕсли;

Как задать GUID вручную при создании объекта

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

НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();

НовыйЭлемент.УстановитьСсылкуНового(Справочники.Номенклатура.ПолучитьСсылку(

Новый УникальныйИдентификатор(СтрокаGUID)));

НовыйЭлемент.Наименование = "Товар из обмена";

НовыйЭлемент.Записать();

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

Особенности для разных типов объектов

Метод УникальныйИдентификатор() работает одинаково для справочников, документов, планов видов характеристик, счетов, видов расчёта, задач и бизнес-процессов. Однако есть отличия:

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

Как проверить результат

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

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

Как проверить результат

Формат строки GUID
Норма

36 символов, пять групп через дефисы

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

Другая длина или бинарный вид — вероятно, значение прочитано из СУБД

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

ПолучитьОбъект() возвращает объект

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

Возвращает Неопределено — ссылка битая или неверный тип

Совпадение при обмене
Норма

GUID в источнике и приёмнике одинаковы

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

Идентификаторы различаются — объект создан заново без УстановитьСсылкуНового

Итог

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

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

Частые вопросы

Можно ли получить GUID через запрос?

Напрямую в языке запросов функции получения GUID нет. В запросе доступна сама ссылка, а её идентификатор извлекают уже после выборки, перебирая результат и вызывая УникальныйИдентификатор() для каждой ссылки. В СКД и динамических списках вывод GUID в отчёт также требует дополнительной обработки.

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

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

Что такое «битая ссылка» и как её распознать?

Это ссылка на удалённый или несуществующий объект. В строковом виде она отображается как «<Объект не найден> (GUID)». Программно признак — вызов ПолучитьОбъект() возвращает Неопределено. Из текста такой ссылки можно извлечь GUID и попытаться восстановить объект с тем же идентификатором.

Можно ли сгенерировать новый GUID самостоятельно?

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

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

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