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

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

Как получить GUID объекта в 1С

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

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

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

Что такое GUID в 1С и где он применяется

В терминах платформы GUID хранится как значение типа «УникальныйИдентификатор». В строковом представлении он выглядит так: 8a3f2b1c-45d6-4e7a-9b0c-1d2e3f4a5b6c. Каждая ссылка на объект базы имеет ровно один GUID, который создаётся при записи объекта и сохраняется на всём его жизненном цикле.

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

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

Основной способ — метод УникальныйИдентификатор(), доступный у любой ссылки. Если у вас есть переменная со ссылкой на элемент справочника или документ, достаточно одной строки кода.

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

СтрокаГУИД = Строка(ГУИД); // "8a3f2b1c-45d6-4e7a-9b0c-1d2e3f4a5b6c"

Альтернатива — функция XMLСтрока(), которая для ссылки возвращает тот же GUID в строковом виде. Этот приём удобен в запросах с построителем и при сериализации: СтрокаГУИД = XMLСтрока(Ссылка);. Обратное преобразование выполняется через XMLЗначение(Тип("СправочникСсылка.Номенклатура"), СтрокаГУИД).

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

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

Как получить GUID через запрос и консоль кода

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

Для разовой задачи удобна консоль кода (обработка «Консоль кода» или аналогичная из инструментов разработчика). Выполняете фрагмент: находите ссылку запросом или по коду, выводите GUID через Сообщить(). Это безопасно — данные не меняются, модифицировать конфигурацию не требуется.

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

Получение GUID из внешних систем

При интеграции через COM-соединение (V83.COMConnector) GUID получают тем же методом, но строковое представление формируют на стороне 1С, поскольку тип УникальныйИдентификатор через COM передаётся не всегда корректно. Надёжный шаблон: СтрокаГУИД = Соединение.XMLСтрока(Ссылка) или вызов Строка(Ссылка.УникальныйИдентификатор()).

Если интеграция построена на HTTP-сервисах, GUID обычно включают в тело ответа JSON в строковом виде. В типовых механизмах обмена (EnterpriseData, планы обмена) идентификатор передаётся автоматически — вручную его извлекать не нужно, достаточно смотреть регистрацию изменений узла.

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

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

Проверка существования обязательна: ПолучитьСсылку() вернёт ссылку даже для несуществующего объекта, и попытка обращения к её реквизитам вызовет ошибку. Признак «битой» ссылки — запрос к ней возвращает пустой результат, а в представлении видна надпись вида «Объект не найден».

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

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

Вторая группа ошибок связана со строковым представлением: GUID в 1С и GUID в формате SQL Server или .NET могут отличаться порядком байтов при прямом чтении из таблиц СУБД. Прямой запрос к таблицам SQL в обход платформы вообще не рекомендуется — это нарушает лицензионные ограничения и может привести к некорректным данным.

Типичные ошибки
01
Вызов метода у объекта вместо ссылки — получение ошибки «Метод не обнаружен»
02
Использование ПолучитьСсылку без проверки существования — работа с битой ссылкой
03
Чтение GUID напрямую из таблиц SQL — несовпадение формата и риск повреждения данных
04
Сравнение GUID строками без приведения регистра — ложные несовпадения при сопоставлении
Контрольные точки

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

Строковый вид GUID
Норма

36 символов с дефисами, формат 8-4-4-4-12

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

Пустая строка или строка без дефисов

Обратное преобразование
Норма

ПолучитьСсылку + ПолучитьОбъект возвращают объект

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

ПолучитьОбъект возвращает Неопределено

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

GUID объекта совпадает в обеих базах

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

GUID разный — объект не сопоставлен

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

Можно ли узнать GUID без программирования?

Штатного интерфейса для просмотра GUID в пользовательском режиме нет. Проще всего использовать внешнюю обработку-консоль кода или попросить разработчика выполнить одну строку кода. В некоторых инструментах администратора GUID отображается в свойствах объекта.

Меняется ли GUID при переносе данных в другую базу?

Зависит от способа переноса. Обмены по правилам конвертации и типовые синхронизации сохраняют GUID, если объект сопоставлен по ссылке. Загрузка «с нуля» без сопоставления создаёт новые ссылки с новыми GUID.

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

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

Как получить GUID записи регистра сведений?

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

Можно ли задать объекту свой GUID при создании?

Да: создаёте ссылку через Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаГУИД)), затем у нового объекта вызываете УстановитьСсылкуНового(Ссылка) и записываете. Так делают при синхронизации, чтобы ссылки совпадали в разных базах.

Почему GUID из SQL-запроса не совпадает с GUID в 1С?

Платформа хранит идентификатор в таблицах СУБД в собственном двоичном формате с перестановкой байтов. Прямое чтение из SQL требует специального преобразования и не поддерживается вендором — используйте методы встроенного языка.

Итог

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

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