Разработка и Конфигурация · 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Откройте консоль кода (например, в инструментах разработчика) в режиме предприятия
- 2Найдите ссылку на объект: через НайтиПоКоду, НайтиПоНаименованию или выбор из формы
- 3Выполните Сообщить(Строка(Ссылка.УникальныйИдентификатор()))
- 4Скопируйте выведенное значение — это и есть GUID объекта
Через универсальные обработки
Обработки «Универсальный подбор и обработка объектов» или «Редактирование реквизитов объекта» показывают идентификатор выбранного элемента в служебных полях. Способ удобен, когда нет доступа к конфигуратору и запрещено выполнение произвольного кода.
Из технологического журнала и СУБД
На клиент-серверном варианте GUID хранится в таблицах SQL в бинарном виде, и прямой запрос к СУБД вернёт его в специфическом порядке байтов, отличном от строкового представления в 1С. Преобразование требует перестановки фрагментов, поэтому для разовых задач этот путь не рекомендуется — легко получить «перевёрнутый» идентификатор.
Как найти объект по известному GUID
Обратная задача — получить ссылку по строке идентификатора — решается методом менеджера объекта ПолучитьСсылку() с конструктором Новый УникальныйИдентификатор(Строка).
СтрокаGUID = "8d3f3b1a-1234-4abc-9def-0123456789ab";
Идентификатор = Новый УникальныйИдентификатор(СтрокаGUID);
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(Идентификатор);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект с таким GUID не найден (битая ссылка)");
Иначе
Сообщить("Найден: " + Ссылка);
КонецЕсли;
Если тип объекта заранее неизвестен, перебирают менеджеры нужных видов (справочники, документы) и проверяют существование объекта через ПолучитьОбъект(). Учтите: вызов ПолучитьСсылку() всегда возвращает ссылку, даже если объекта нет, поэтому проверка существования обязательна.
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID));
Если Ссылка.ПолучитьОбъект() <> Неопределено Тогда
Сообщить("Объект найден");
КонецЕсли;Как задать GUID вручную при создании объекта
При обмене данными часто нужно создать объект с заранее известным идентификатором, чтобы он совпал с записью в другой базе. Для этого используют метод УстановитьСсылкуНового() до записи объекта.
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.УстановитьСсылкуНового(Справочники.Номенклатура.ПолучитьСсылку(
Новый УникальныйИдентификатор(СтрокаGUID)));
НовыйЭлемент.Наименование = "Товар из обмена";
НовыйЭлемент.Записать();
Важно: установить ссылку нового можно только до первой записи объекта. Если элемент уже записан, изменить его GUID штатными средствами нельзя — потребуется создать новый объект и перенести данные, либо использовать специализированные обработки замены ссылок с пониманием рисков для целостности базы.
Особенности для разных типов объектов
Метод УникальныйИдентификатор() работает одинаково для справочников, документов, планов видов характеристик, счетов, видов расчёта, задач и бизнес-процессов. Однако есть отличия:
- у записей регистров сведений и накопления собственного GUID нет — они идентифицируются набором измерений и регистратором;
- у предопределённых элементов идентификатор фиксирован при создании в конфигураторе и совпадает во всех базах с этой конфигурацией;
- перечисления не имеют GUID — их значения идентифицируются именем в метаданных.
Как проверить результат
После получения или назначения идентификатора убедитесь, что всё сработало корректно: строка GUID имеет стандартный формат из пяти групп символов через дефис, по полученному GUID объект реально находится в базе, а при обмене запись в приёмнике получила тот же идентификатор, что и в источнике.
Как проверить результат
36 символов, пять групп через дефисы
Другая длина или бинарный вид — вероятно, значение прочитано из СУБД
ПолучитьОбъект() возвращает объект
Возвращает Неопределено — ссылка битая или неверный тип
GUID в источнике и приёмнике одинаковы
Идентификаторы различаются — объект создан заново без УстановитьСсылкуНового
Что важно запомнить
GUID объекта получают методом УникальныйИдентификатор() у ссылки, обратный поиск — через ПолучитьСсылку() с обязательной проверкой существования. Изменить идентификатор записанного объекта нельзя, а назначить свой GUID можно только новому элементу до записи.
Частые вопросы
Можно ли получить GUID через запрос?
Напрямую в языке запросов функции получения GUID нет. В запросе доступна сама ссылка, а её идентификатор извлекают уже после выборки, перебирая результат и вызывая УникальныйИдентификатор() для каждой ссылки. В СКД и динамических списках вывод GUID в отчёт также требует дополнительной обработки.
Чем GUID отличается от кода справочника?
Код — прикладной реквизит, который может меняться, дублироваться при определённых настройках и зависит от нумерации. GUID формируется платформой один раз, уникален глобально и неизменен на протяжении жизни объекта. Для интеграций всегда используют GUID.
Что такое «битая ссылка» и как её распознать?
Это ссылка на удалённый или несуществующий объект. В строковом виде она отображается как «<Объект не найден> (GUID)». Программно признак — вызов ПолучитьОбъект() возвращает Неопределено. Из текста такой ссылки можно извлечь GUID и попытаться восстановить объект с тем же идентификатором.
Можно ли сгенерировать новый GUID самостоятельно?
Да, конструктор Новый УникальныйИдентификатор() без параметров создаёт случайный идентификатор. Это полезно, когда нужно заранее подготовить ключ для будущего объекта, например при пакетной загрузке данных с предварительным сопоставлением.
Одинаков ли GUID у объекта в файловой и серверной базе?
Да, если объект перенесён штатными средствами обмена или выгрузки — идентификатор сохраняется. GUID привязан к объекту, а не к способу хранения базы. Различаться он будет только если объект создан заново независимо в каждой базе.