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

Разработка и Конфигурация · 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. Учтите, что метод вызывается именно у ссылки, а не у объекта данных: если у вас в руках объект (СправочникОбъект), обращайтесь к его свойству Ссылка.

bsl
ГУИД = Ссылка.УникальныйИдентификатор();
СтрокаГУИД = Строка(ГУИД);

Получение GUID через запрос

Язык запросов 1С не имеет функции, напрямую возвращающей GUID в виде строки, но ссылку можно выбрать и затем обработать в коде. Это удобно для пакетной обработки: запрос возвращает ссылки, а GUID вычисляется в цикле.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Ссылка

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| НЕ Номенклатура.ПометкаУдаления";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить(Строка(Выборка.Ссылка.УникальныйИдентификатор()));

КонецЦикла;

Если нужно вывести GUID прямо в консоли запросов или отчёте на СКД без кода, используют приём с представлением ссылки: функция ПРЕДСТАВЛЕНИЕ(Ссылка) GUID не вернёт, поэтому чаще применяют выгрузку результата запроса в таблицу значений и последующий обход в коде. Готовые консоли запросов с поддержкой вывода GUID есть в составе типовых инструментов разработчика.

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

Если под рукой нет конфигуратора или прав на выполнение кода, GUID можно узнать из навигационной ссылки. Откройте объект в режиме предприятия, скопируйте ссылку через «Ещё → Получить ссылку» (или Ctrl+F11 в тонком клиенте) — в конце ссылки после параметра ref= находится закодированный GUID. Декодировать его в читаемый вид помогают внешние обработки и онлайн-конвертеры, либо небольшая функция на встроенном языке.

Другой вариант — универсальные обработки «Поиск и замена значений», «Консоль кода» или «Инструменты разработчика», которые показывают GUID выбранной ссылки одним нажатием. В типовых конфигурациях на БСП часть таких функций доступна через «Все функции → Стандартные», если у пользователя есть права администратора.

GUID из навигационной ссылки
  1. 1
    Откройте объект в режиме 1С:Предприятие
  2. 2
    Скопируйте ссылку: меню «Ещё» → «Получить ссылку» или Ctrl+F11
  3. 3
    Найдите в ссылке фрагмент после ref=
  4. 4
    Декодируйте значение через обработку или функцию преобразования
  5. 5
    Сверьте результат с GUID, полученным кодом, при сомнениях

Обратная задача: найти объект по GUID

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

СтрокаГУИД = "8f9a1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c";

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

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

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

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

Иначе

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

КонецЕсли;

Так выглядит и разбор ошибок вида «Объект не найден (85:8f9a...)»: число перед двоеточием указывает на таблицу, а шестнадцатеричная часть — на GUID в сыром представлении. Специальные обработки преобразуют эту запись в обычный GUID и сразу показывают, существует ли объект в базе.

Ограничения и типичные ошибки

Первая частая ошибка — попытка получить GUID у значения, которое не является ссылкой: у строки, числа или структуры метод УникальныйИдентификатор() отсутствует, и код падает с ошибкой. Перед вызовом проверяйте тип через ТипЗнч() или убеждайтесь, что переменная точно содержит ссылку.

Вторая ошибка — сравнение GUID как строк с разным регистром или форматом. Строковое представление GUID в 1С всегда в нижнем регистре, но значения из внешних систем могут приходить в верхнем регистре или в фигурных скобках. Перед сравнением приводите обе строки к одному виду или сравнивайте значения типа УникальныйИдентификатор, а не строки.

Третья группа проблем связана с переносом данных. При выгрузке через правила обмена GUID сохраняется только если это предусмотрено настройкой; при ручном создании объекта в новой базе GUID будет другим, и сопоставление «по коду» может привести к дублям. Планируя интеграцию, заранее решите, какая база является источником GUID.

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

Проверка результата и практические рекомендации

После получения GUID проверьте корректность простым способом: длина строки — 36 символов, дефисы на позициях 9, 14, 19 и 24, остальные символы — шестнадцатеричные цифры. Обратное преобразование через Новый УникальныйИдентификатор(Строка) не должно вызывать исключения — это быстрый тест валидности.

При массовой выгрузке GUID для интеграции сохраняйте вместе с идентификатором тип объекта и человекочитаемое представление (наименование, код): это упростит разбор расхождений, когда внешняя система сообщит о проблеме с конкретной записью. Для регулярных обменов логируйте пары «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 изменятся только если объекты создаются заново программным способом без переноса идентификаторов.