Разработка и Конфигурация · 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 всех объектов выборки, обход выполняется запросом: выбираете ссылки, затем в цикле вызываете метод для каждой. Для больших объёмов это допустимо, но помните, что метод работает только со ссылками, а не с объектами данных напрямую из записи регистра без ссылки.
// Получить GUID ссылки
ГУИДСтрокой = Строка(НоменклатураСсылка.УникальныйИдентификатор());
// Обратно: GUID -> ссылка
НовыйГУИД = Новый УникальныйИдентификатор(ГУИДСтрокой);
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(НовыйГУИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект не найден — битая ссылка или объект удалён");
КонецЕсли;Как получить GUID через запрос и консоль кода
В языке запросов нет прямой функции для вывода GUID — запрос возвращает ссылки, а не их идентификаторы. Поэтому в консоли запросов GUID получают постобработкой: выгружают результат в таблицу значений и добавляют колонку, заполненную через Строка(СтрокаТЗ.Ссылка.УникальныйИдентификатор()).
Для разовой задачи удобна консоль кода (обработка «Консоль кода» или аналогичная из инструментов разработчика). Выполняете фрагмент: находите ссылку запросом или по коду, выводите GUID через Сообщить(). Это безопасно — данные не меняются, модифицировать конфигурацию не требуется.
- 1Откройте консоль кода в режиме Предприятие под пользователем с полными правами
- 2Найдите нужную ссылку запросом или через НайтиПоКоду / НайтиПоНаименованию
- 3Выполните Сообщить(Строка(Ссылка.УникальныйИдентификатор()))
- 4Скопируйте GUID из окна сообщений
- 5Проверьте результат обратным преобразованием через ПолучитьСсылку
Получение GUID из внешних систем
При интеграции через COM-соединение (V83.COMConnector) GUID получают тем же методом, но строковое представление формируют на стороне 1С, поскольку тип УникальныйИдентификатор через COM передаётся не всегда корректно. Надёжный шаблон: СтрокаГУИД = Соединение.XMLСтрока(Ссылка) или вызов Строка(Ссылка.УникальныйИдентификатор()).
Если интеграция построена на HTTP-сервисах, GUID обычно включают в тело ответа JSON в строковом виде. В типовых механизмах обмена (EnterpriseData, планы обмена) идентификатор передаётся автоматически — вручную его извлекать не нужно, достаточно смотреть регистрацию изменений узла.
Обратная задача: найти объект по GUID
Частая ситуация — из лога обмена или ошибки известен только GUID, а нужно найти сам объект. Порядок такой: создаёте значение Новый УникальныйИдентификатор(СтрокаГУИД), затем вызываете МенеджерТипа.ПолучитьСсылку(ГУИД) для предполагаемого типа. Если тип неизвестен, перебирают менеджеры нужных видов объектов (справочники, документы) и проверяют Ссылка.ПолучитьОбъект() на Неопределено.
Проверка существования обязательна: ПолучитьСсылку() вернёт ссылку даже для несуществующего объекта, и попытка обращения к её реквизитам вызовет ошибку. Признак «битой» ссылки — запрос к ней возвращает пустой результат, а в представлении видна надпись вида «Объект не найден».
Типичные ошибки и ограничения
Самая распространённая ошибка — попытка вызвать УникальныйИдентификатор() у объекта, а не у ссылки: у СправочникОбъект этого метода нет, нужно обращаться к Объект.Ссылка.УникальныйИдентификатор(). Для нового незаписанного объекта ссылка ещё не существует — сначала используют ПолучитьСсылкуНового() или записывают объект.
Вторая группа ошибок связана со строковым представлением: GUID в 1С и GUID в формате SQL Server или .NET могут отличаться порядком байтов при прямом чтении из таблиц СУБД. Прямой запрос к таблицам SQL в обход платформы вообще не рекомендуется — это нарушает лицензионные ограничения и может привести к некорректным данным.
Как проверить результат
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 напрямую из СУБД небезопасно.