Разработка и Конфигурация · 8 мин
Как получить GUID объекта в 1С
Как узнать GUID объекта в 1С: через встроенный язык, запрос, обработку и отладчик. Получение ссылки по GUID, проверка битых ссылок и типовые ошибки.
GUID (глобальный уникальный идентификатор) — это 36-символьная строка вида «a1b2c3d4-…», которую платформа 1С присваивает каждому объекту базы: элементу справочника, документу, плану счетов. По GUID можно однозначно найти объект при обмене данными между базами, интеграции с внешними системами и поиске «битых» ссылок.
Получить GUID можно несколькими способами — в зависимости от того, где вы работаете: в конфигураторе, в отладчике, через запрос или во внешней обработке. Ниже разобраны все рабочие варианты с готовым кодом.
Что такое GUID в 1С и когда он нужен
Каждая ссылка на объект базы (справочник, документ, план видов характеристик и др.) внутренне хранится как уникальный идентификатор. Именно GUID, а не код или наименование, гарантирует уникальность объекта в распределённых базах и при обменах.
Типичные ситуации, когда нужен GUID:
- сопоставление объектов двух баз при ручной синхронизации;
- поиск объекта по идентификатору из файла обмена или лога интеграции;
- восстановление «битой ссылки» — когда в базе остался GUID, а объект удалён;
- передача идентификатора во внешнюю систему (сайт, CRM, веб-сервис).
Как получить GUID объекта встроенным языком
Основной способ — вызвать метод УникальныйИдентификатор() у ссылки. Метод возвращает значение типа «УникальныйИдентификатор», для вывода его преобразуют в строку.
// Получаем GUID элемента справочника
СсылкаНаЭлемент = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если Не СсылкаНаЭлемент.Пустая() Тогда
ГУИД = СсылкаНаЭлемент.УникальныйИдентификатор();
Сообщить(Строка(ГУИД)); // например: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
КонецЕсли;
Тот же подход работает для документов, планов счетов, планов обмена и любых других ссылочных типов. Важно: метод вызывается именно у ссылки (СправочникСсылка, ДокументСсылка), а не у объекта (СправочникОбъект). Если у вас объект — обратитесь к его свойству Ссылка.
ГУИДСтрокой = Строка(Ссылка.УникальныйИдентификатор());Как узнать GUID через запрос
В языке запросов нет прямой функции вывода GUID, но есть обходной приём: представление ссылки в виде строки GUID получают через соединение с таблицей или через функцию ПРЕДСТАВЛЕНИЕССЫЛКИ — она, однако, возвращает навигационную ссылку, а не чистый GUID. Практичнее получить ссылку запросом, а GUID извлечь уже в коде:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Код = &Код";
Запрос.УстановитьПараметр("Код", "000000123");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Сообщить(Строка(Выборка.Ссылка.УникальныйИдентификатор()));
КонецЕсли;
Этот вариант удобен, когда GUID нужно получить массово для списка объектов: выбираете ссылки запросом и в цикле выводите идентификаторы в таблицу значений или файл.
Как получить ссылку по GUID (обратная задача)
Обратная задача встречается чаще: есть строка GUID из файла обмена или лога, нужно найти объект в базе. Для этого используется конструктор Новый УникальныйИдентификатор(Строка) и метод менеджера ПолучитьСсылку():
ГУИД = Новый УникальныйИдентификатор("a1b2c3d4-e5f6-7890-abcd-ef1234567890");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);
// Проверяем, существует ли объект реально
Запрос = Новый Запрос("ВЫБРАТЬ 1 ИЗ Справочник.Номенклатура ГДЕ Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Если Запрос.Выполнить().Пустой() Тогда
Сообщить("Объект с таким GUID не найден (битая ссылка)");
Иначе
Сообщить("Найден: " + Ссылка);
КонецЕсли;
Как узнать GUID без программирования
Если под рукой нет конфигуратора с правами на запуск кода, есть пользовательские варианты:
- Отладчик. Поставьте точку останова в модуле, где доступна ссылка, откройте табло (Shift+F9) и введите выражение
Строка(Ссылка.УникальныйИдентификатор()). - Универсальные обработки. Обработки «Поиск объектов по GUID» из публикаций на профильных ресурсах позволяют ввести GUID и найти объект любого типа без изменения конфигурации.
- Навигационная ссылка. Команда «Получить ссылку» в форме объекта возвращает строку вида
e1cib/data/Справочник.Номенклатура?ref=...— хвост послеref=это шестнадцатеричное представление GUID (в перевёрнутом порядке байт, преобразование требует функции).
- 1Откройте внешнюю обработку или консоль кода в режиме предприятия
- 2Получите ссылку на объект: найдите его по коду, наименованию или запросом
- 3Вызовите Ссылка.УникальныйИдентификатор() и преобразуйте результат в строку
- 4Скопируйте полученную строку GUID для передачи или поиска
- 5Для обратной задачи используйте ПолучитьСсылку и обязательно проверьте существование объекта
GUID и битые ссылки
«Битая ссылка» — это ссылка на удалённый объект. В реквизитах документов и регистров она отображается как «<Объект не найден> (…:a1b2c3d4…)». Из этого представления можно извлечь GUID и попытаться восстановить объект методом ПолучитьСсылку() с последующим созданием объекта по этой ссылке — так работают обработки восстановления удалённых данных.
Строковое представление битой ссылки содержит GUID в особом формате (с перестановкой байтов), поэтому для корректного извлечения используют готовые функции преобразования, а не простое копирование подстроки.
Ограничения и особенности
GUID присваивается объектам ссылочных типов. У записей регистров сведений, накопления и бухгалтерии GUID нет — они идентифицируются измерениями и регистратором. У документа GUID есть, у его движений — нет.
При обмене через планы обмена GUID сохраняется между базами — это основа сопоставления объектов. При загрузке через универсальный обмен (XML) объект может получить новый GUID, если сопоставление не настроено.
Что важно запомнить
GUID получают методом УникальныйИдентификатор() у ссылки, обратный поиск — ПолучитьСсылку() с обязательной проверкой существования объекта. Для разовых задач достаточно отладчика или консоли кода, для массовых — запроса с выводом GUID в цикле.
Частые вопросы
Можно ли изменить GUID существующего объекта?
Нет, штатными средствами GUID изменить нельзя — он назначается при создании и неизменен. Единственный способ «получить другой GUID» — создать новый объект и переназначить все ссылки на него.
Как получить GUID у только что созданного объекта?
После метода Записать() обратитесь к ссылке объекта: НовыйГУИД = Объект.Ссылка.УникальныйИдентификатор();. До записи у нового объекта ссылка уже существует (получена через ПолучитьСсылкуНового), поэтому GUID доступен и до записи.
Одинаков ли GUID объекта в двух базах при обмене?
Да, если обмен выполняется штатными механизмами (планы обмена, конвертация данных с сопоставлением по GUID) — идентификатор сохраняется. При загрузке «как новый объект» GUID будет сгенерирован заново.
Как найти объект по GUID, если неизвестен его тип?
Переберите менеджеры ссылочных типов (Справочники, Документы и т.д.) и для каждого вызовите ПолучитьСсылку с проверкой существования, либо используйте готовую обработку «Поиск объекта по GUID», которая делает это автоматически.
Чем GUID отличается от навигационной ссылки?
GUID — это сам идентификатор объекта. Навигационная ссылка — строка для открытия формы объекта в клиенте, она включает тип объекта и закодированный GUID. По навигационной ссылке объект можно открыть, но для программного поиска нужен GUID.
Можно ли сравнивать два GUID оператором «=»?
Да, значения типа УникальныйИдентификатор сравниваются напрямую. Если сравниваете строки — предварительно приведите обе к одному регистру, так как строковое представление может отличаться регистром символов.