Разработка и Конфигурация · 9 мин
Как получить ГУИД объекта в 1С
Как получить ГУИД в 1С: через код, запрос, консоль, внешние обработки и HTTP. Способы для пользователя и разработчика, проверка результата и типичные ошибки.
ГУИД (GUID, глобальный уникальный идентификатор) — внутренний идентификатор, который платформа 1С присваивает каждому объекту базы: элементу справочника, документу, записи регистра. Он нужен при обмене данными между базами, при интеграции с внешними системами, при отладке и поиске конкретного объекта по ссылке. Важно понимать: ГУИД не виден в интерфейсе напрямую, поэтому для его получения нужны специальные приёмы.
Способов получить идентификатор несколько — от простых, доступных обычному пользователю без программирования, до программных через встроенный язык и запросы. Выбор зависит от того, есть ли у вас доступ к конфигуратору, возможность запускать внешние обработки и какие объекты нужно идентифицировать — один или тысячи.
Когда нужен ГУИД и какой способ выбрать
Чаще всего ГУИД требуется в четырёх ситуациях: при настройке обмена данными между конфигурациями (например, между «Управлением торговлей» и «Бухгалтерией»), при интеграции с сайтом или внешней системой, при поиске «потерянного» объекта по ссылке из сообщения об ошибке и при разборе битых ссылок после удаления данных.
Критерии выбора способа простые. Если вы пользователь без прав разработчика — используйте внешнюю обработку или штатные механизмы выгрузки. Если есть доступ к конфигуратору и консоли кода — программный способ быстрее и гибче. Если нужны ГУИДы тысяч объектов — только запрос или пакетная обработка, ручные методы не подойдут.
Как выбрать способ
Получение ГУИДа программно через встроенный язык
Основной метод для разработчика — метод УникальныйИдентификатор(), который есть у любой ссылки. Он возвращает значение типа «УникальныйИдентификатор», а чтобы получить привычную строку с дефисами, результат преобразуют функцией Строка() или оборачивают в XMLСтрока().
Типовой фрагмент кода выглядит так: сначала получаете ссылку на объект (например, через выборку, поиск по коду или из реквизита), затем вызываете метод. Важно: метод есть именно у ссылки, а не у объекта. Если у вас переменная типа «объект» (получена через ПолучитьОбъект()), обращайтесь к её свойству Ссылка.
СсылкаНаТовар = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если Не СсылкаНаТовар.Пустая() Тогда
ГУИД = Строка(СсылкаНаТовар.УникальныйИдентификатор());
Сообщить(ГУИД);
КонецЕсли;Обратное преобразование тоже часто нужно: имея строку ГУИДа, найти объект. Для этого создают значение типа «УникальныйИдентификатор» из строки конструктором Новый УникальныйИдентификатор(СтрокаГУИД), а затем получают ссылку методом ПолучитьСсылку() у менеджера соответствующего справочника или документа.
Получение ГУИДа через запрос
В языке запросов 1С нет прямой функции, возвращающей ГУИД ссылки как строку. Представление ссылки в запросе — это не ГУИД, а другое внутреннее значение, и путать их нельзя. Поэтому массовое получение идентификаторов делают в два этапа: запросом выбирают ссылки, а затем в цикле по выборке вызывают УникальныйИдентификатор() для каждой.
Для очень больших объёмов такой обход может занять заметное время, поэтому результат разумно сразу записывать в таблицу значений и выгружать в файл (например, табличный документ сохранить в Excel). Это типовая схема при подготовке маппинга объектов для интеграции.
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Строка(Выборка.Ссылка.УникальныйИдентификатор()));
КонецЦикла;Как узнать ГУИД без программирования
Если вы не разработчик, самый практичный путь — внешняя обработка, показывающая ГУИД выбранного объекта. Такие обработки широко распространены: вы открываете её через «Файл → Открыть», указываете ссылку на объект, и обработка выводит идентификатор. Перед запуском любой внешней обработки убедитесь, что она получена из надёжного источника — обработка исполняется с вашими правами и теоретически может изменить данные.
Через стандартные механизмы обмена
Ещё один вариант без кода — выгрузка через типовой обмен. При выгрузке объекта в XML (например, через универсальный обмен данными или план обмена) в файл попадает атрибут Ref, содержащий ГУИД ссылки. Открыв файл в текстовом редакторе, можно найти нужный объект и скопировать идентификатор. Способ громоздкий для одного объекта, но полезен, когда обработки запрещены политикой безопасности.
Через консоль кода на «Инструментах разработчика»
Во многих организациях установлены инструменты разработчика (ИР) или аналогичные консоли кода. Там достаточно выполнить одну строку — Сообщить(Строка(Ссылка.УникальныйИдентификатор())), подставив ссылку через выбор. Это быстрее, чем писать обработку, и не требует изменения конфигурации.
Получение ГУИДа для внешних систем
При интеграции с сайтом, мобильным приложением или другой учётной системой ГУИД обычно отдают наружу через HTTP-сервис, веб-сервис или стандартный интерфейс OData. В OData идентификатор ссылки доступен в поле вида Ref_Key — внешняя система получает его автоматически при чтении данных, и отдельная доработка не нужна.
Если публикуете собственный HTTP-сервис, внутри его обработчика используется тот же метод УникальныйИдентификатор(), а строка возвращается в теле ответа. При проектировании такого интерфейса заранее решите, что возвращать для несуществующих объектов — пустую строку или явную ошибку, чтобы внешняя система не трактовала пустой ответ как валидный идентификатор.
Проверка результата и типичные ошибки
Проверить корректность полученного ГУИДа просто: выполните обратное преобразование — создайте из строки идентификатор, получите ссылку и сравните с исходным объектом. Если ссылка получилась, но функция ПолучитьОбъект() возвращает неопределено, значит, объект с таким ГУИДом в базе отсутствует — типичная ситуация при разборе битых ссылок.
Как проверить результат
36 символов с дефисами, шестнадцатеричные цифры
Строка другой длины или с посторонними символами
Ссылка получена и совпадает с исходным объектом
Ссылка пустая или объект не найден
Одинаковый ГУИД у объекта, перенесённого обменом
Разные ГУИДы у «одного» объекта — он создан независимо
Часто задаваемые вопросы
Можно ли увидеть ГУИД объекта прямо в форме 1С?
В стандартных формах ГУИД не отображается — это служебное поле. Увидеть его можно только программно, через внешнюю обработку, консоль кода или выгрузку в файл обмена. Некоторые конфигурации и расширения добавляют отдельную команду «Показать идентификатор», но это уже доработка, а не штатная возможность платформы.
Изменится ли ГУИД при переносе объекта в другую базу?
Если перенос выполнен штатным обменом или конвертацией данных — ГУИД сохраняется, именно по нему базы сопоставляют объекты. Если объект создать в другой базе вручную или загрузить без сохранения ссылки, идентификатор будет новым.
Как найти объект по известному ГУИДу?
Создайте идентификатор из строки конструктором «Новый УникальныйИдентификатор(СтрокаГУИД)», затем вызовите «ПолучитьСсылку» у менеджера нужного типа объекта. Если тип неизвестен, придётся перебирать менеджеры справочников и документов или использовать специализированную обработку поиска по GUID.
Что означает «Объект не найден» с набором символов в сообщении об ошибке?
Это битая ссылка: реквизит ссылается на объект, который был удалён физически. Строка в скобках содержит внутреннее представление ссылки, из которого можно извлечь ГУИД и определить, какой объект был удалён, по архивной копии базы или журналу регистрации.
Одинаковы ли ГУИДы в файловой и клиент-серверной базе?
ГУИД объекта хранится в данных и не зависит от режима работы базы. При выгрузке файловой базы и загрузке её на сервер идентификаторы объектов сохраняются полностью.
Можно ли задать ГУИД объекту вручную?
При создании нового объекта программно можно назначить ссылку заранее через «УстановитьСсылкуНового» с нужным идентификатором. Это применяют при синхронизации, чтобы объект в 1С получил тот же ГУИД, что и во внешней системе. Изменить идентификатор уже существующего объекта нельзя.
Что важно запомнить
ГУИД получают методом УникальныйИдентификатор() у ссылки объекта — в консоли кода, обработке или HTTP-сервисе. Без программирования помогают внешние обработки и выгрузка обмена. Всегда проверяйте результат обратным преобразованием и помните: идентификатор уникален в рамках конкретной базы, если объект не перенесён обменом.