Разработка и Конфигурация · 10 мин
Как получить GUID объекта в 1С
Как получить GUID объекта в 1С через встроенный язык, запросы и внешние обработки. Примеры кода, поиск по GUID, типичные ошибки и ответы на вопросы.
GUID (глобальный уникальный идентификатор) в 1С присваивается каждому объекту базы данных автоматически при создании и не меняется на протяжении всей жизни объекта. Именно по GUID, а не по коду или номеру, система различает элементы справочников, документы и другие сущности при обмене данными между базами, интеграции с внешними системами и репликации.
Разработчику и администратору GUID нужен постоянно: чтобы сопоставить записи в двух базах, найти «потерянный» объект по ссылке из лога обмена, разобрать ошибку вида «Объект не найден (85:8f9a...)» или настроить выгрузку во внешнюю систему. Встроенный язык 1С предоставляет для этого несколько штатных механизмов, и выбор конкретного зависит от задачи.
В материале разобраны основные способы получить GUID объекта: через метод УникальныйИдентификатор(), через запрос, через универсальные инструменты в режиме предприятия, а также обратная задача — найти объект по известному GUID. Отдельно описаны ограничения и ошибки, которые чаще всего встречаются на практике.
Что такое GUID в 1С и где он хранится
GUID в 1С — это 128-битный идентификатор формата 8f9a1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c, который платформа генерирует при записи нового объекта. Он хранится в системном поле таблицы базы данных и недоступен для редактирования: изменить GUID штатными средствами нельзя, его можно только перенести при загрузке объекта через COM-соединение или обмен, если специально задать идентификатор при создании.
Важно понимать разницу между GUID и другими идентификаторами. Код справочника или номер документа — это пользовательские реквизиты, которые могут совпадать в разных базах и меняться. Навигационная ссылка (вида e1cib/data/Справочник.Номенклатура?ref=...) — это представление для веб-интерфейса, содержащее GUID в закодированном виде. Только GUID гарантированно уникален в пределах распределённой системы и подходит для надёжного сопоставления объектов.
Как получить GUID через встроенный язык
Основной способ — метод УникальныйИдентификатор(), доступный у любой ссылки на объект базы данных (элемент справочника, документ, запись регистра сведений через ключ и т.д.). Метод возвращает значение типа УникальныйИдентификатор, которое при необходимости приводят к строке.
НоменклатураСсылка = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если Не НоменклатураСсылка.Пустая() Тогда
ГУИД = НоменклатураСсылка.УникальныйИдентификатор();
СтрокаГУИД = Строка(ГУИД); // "8f9a1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c"
Сообщить(СтрокаГУИД);
КонецЕсли;
Тот же подход работает в цикле при выборке нескольких объектов — например, когда нужно выгрузить GUID всех контрагентов во внешний файл для сопоставления с CRM. Учтите, что метод вызывается именно у ссылки, а не у объекта данных: если у вас в руках объект (СправочникОбъект), обращайтесь к его свойству Ссылка.
ГУИД = Ссылка.УникальныйИдентификатор();
СтрокаГУИД = Строка(ГУИД);Получение GUID через запрос
Язык запросов 1С не имеет функции, напрямую возвращающей GUID в виде строки, но ссылку можно выбрать и затем обработать в коде. Это удобно для пакетной обработки: запрос возвращает ссылки, а GUID вычисляется в цикле.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Строка(Выборка.Ссылка.УникальныйИдентификатор()));
КонецЦикла;
Если нужно вывести GUID прямо в консоли запросов или отчёте на СКД без кода, используют приём с представлением ссылки: функция ПРЕДСТАВЛЕНИЕ(Ссылка) GUID не вернёт, поэтому чаще применяют выгрузку результата запроса в таблицу значений и последующий обход в коде. Готовые консоли запросов с поддержкой вывода GUID есть в составе типовых инструментов разработчика.
Как узнать GUID без программирования
Если под рукой нет конфигуратора или прав на выполнение кода, GUID можно узнать из навигационной ссылки. Откройте объект в режиме предприятия, скопируйте ссылку через «Ещё → Получить ссылку» (или Ctrl+F11 в тонком клиенте) — в конце ссылки после параметра ref= находится закодированный GUID. Декодировать его в читаемый вид помогают внешние обработки и онлайн-конвертеры, либо небольшая функция на встроенном языке.
Другой вариант — универсальные обработки «Поиск и замена значений», «Консоль кода» или «Инструменты разработчика», которые показывают GUID выбранной ссылки одним нажатием. В типовых конфигурациях на БСП часть таких функций доступна через «Все функции → Стандартные», если у пользователя есть права администратора.
- 1Откройте объект в режиме 1С:Предприятие
- 2Скопируйте ссылку: меню «Ещё» → «Получить ссылку» или Ctrl+F11
- 3Найдите в ссылке фрагмент после ref=
- 4Декодируйте значение через обработку или функцию преобразования
- 5Сверьте результат с GUID, полученным кодом, при сомнениях
Обратная задача: найти объект по GUID
Часто GUID приходит извне — из лога обмена, из другой базы, из текста ошибки. Чтобы получить ссылку по строке GUID, используют конструктор Новый УникальныйИдентификатор(Строка) и метод менеджера ПолучитьСсылку(). Поскольку тип объекта заранее неизвестен, перебирают менеджеры нужных видов.
СтрокаГУИД = "8f9a1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c";
ГУИД = Новый УникальныйИдентификатор(СтрокаГУИД);
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект с таким GUID не найден");
Иначе
Сообщить("Найден: " + Ссылка);
КонецЕсли;
Так выглядит и разбор ошибок вида «Объект не найден (85:8f9a...)»: число перед двоеточием указывает на таблицу, а шестнадцатеричная часть — на GUID в сыром представлении. Специальные обработки преобразуют эту запись в обычный GUID и сразу показывают, существует ли объект в базе.
Ограничения и типичные ошибки
Первая частая ошибка — попытка получить GUID у значения, которое не является ссылкой: у строки, числа или структуры метод УникальныйИдентификатор() отсутствует, и код падает с ошибкой. Перед вызовом проверяйте тип через ТипЗнч() или убеждайтесь, что переменная точно содержит ссылку.
Вторая ошибка — сравнение GUID как строк с разным регистром или форматом. Строковое представление GUID в 1С всегда в нижнем регистре, но значения из внешних систем могут приходить в верхнем регистре или в фигурных скобках. Перед сравнением приводите обе строки к одному виду или сравнивайте значения типа УникальныйИдентификатор, а не строки.
Третья группа проблем связана с переносом данных. При выгрузке через правила обмена GUID сохраняется только если это предусмотрено настройкой; при ручном создании объекта в новой базе GUID будет другим, и сопоставление «по коду» может привести к дублям. Планируя интеграцию, заранее решите, какая база является источником GUID.
Проверка результата и практические рекомендации
После получения GUID проверьте корректность простым способом: длина строки — 36 символов, дефисы на позициях 9, 14, 19 и 24, остальные символы — шестнадцатеричные цифры. Обратное преобразование через Новый УникальныйИдентификатор(Строка) не должно вызывать исключения — это быстрый тест валидности.
При массовой выгрузке GUID для интеграции сохраняйте вместе с идентификатором тип объекта и человекочитаемое представление (наименование, код): это упростит разбор расхождений, когда внешняя система сообщит о проблеме с конкретной записью. Для регулярных обменов логируйте пары «GUID — ссылка в приёмнике», чтобы не искать соответствия заново при каждой ошибке.
Как проверить результат
36 символов, 4 дефиса, шестнадцатеричные цифры
Другая длина, лишние символы, фигурные скобки
Новый УникальныйИдентификатор(Строка) выполняется без ошибки
Исключение «Недопустимое значение»
ПолучитьОбъект() возвращает объект
Возвращается Неопределено — объекта нет в базе
Что важно запомнить
GUID получают методом УникальныйИдентификатор() у ссылки, обратно объект находят через ПолучитьСсылку(Новый УникальныйИдентификатор(Строка)). GUID неизменен и уникален, поэтому именно он используется для сопоставления объектов между базами и системами. Перед записью найденной по GUID ссылки всегда проверяйте существование объекта.
Частые вопросы
Можно ли изменить GUID существующего объекта?
Штатными средствами — нет, платформа не позволяет редактировать уникальный идентификатор. Если нужно, чтобы объект в другой базе имел тот же GUID, его загружают через обмен данными или создают программно с явным указанием идентификатора через ПолучитьСсылку(ГУИД) до первой записи объекта.
Почему GUID одного объекта различается в двух базах?
Значит, объект создавался в каждой базе независимо, а не переносился обменом. Для сопоставления таких записей используют регистры соответствия, поиск по ключевым реквизитам (код, ИНН, наименование) или повторную загрузку с сохранением исходного GUID.
Как получить GUID записи регистра сведений?
У отдельной записи регистра сведений нет ссылки и GUID — идентифицируйте её набором измерений (и периода для периодических регистров). GUID есть у регистратора, если регистр подчинён документу: получите ссылку на документ-регистратор и вызовите УникальныйИдентификатор() у неё.
Что означает ошибка «Объект не найден (85:8f9a...)»?
Это «битая ссылка»: в реквизите хранится ссылка на объект, который был удалён физически (например, при свёртке базы или обмене с удалением). Числа в скобках — внутренний идентификатор таблицы и GUID в сыром виде. Обработайте базу тестированием и исправлением либо восстановите объект по GUID из архивной копии.
Можно ли получить GUID в запросе без кода?
Напрямую в тексте запроса функции для GUID нет. Выбирайте ссылку в запросе и преобразуйте её в коде после выполнения, либо используйте консоли запросов и инструменты разработчика, которые показывают GUID ссылки автоматически.
Совпадает ли GUID в файловой и клиент-серверной базе после выгрузки?
Да, если база перенесена штатной выгрузкой/загрузкой через файл .dt или обменом — GUID всех объектов сохраняются. GUID изменятся только если объекты создаются заново программным способом без переноса идентификаторов.