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

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

Как узнать GUID объекта в 1С

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

GUID (глобальный уникальный идентификатор) в 1С — это 36-символьная строка вида 8b3f2a1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c, которую платформа присваивает каждому объекту базы при создании. По GUID однозначно идентифицируются элементы справочников, документы, записи планов обмена и другие ссылочные объекты, что критично при обмене данными между базами, интеграции с внешними системами и поиске «потерянных» объектов.

Задача узнать GUID возникает в нескольких типовых ситуациях: настройка синхронизации между конфигурациями, отладка веб-сервисов и HTTP-API, поиск объекта по идентификатору из внешней системы, восстановление ссылок после некорректной выгрузки. У каждой ситуации — свой оптимальный способ получения идентификатора.

В платформе 1С:Предприятие 8.3 нет штатной кнопки «показать GUID» в пользовательском интерфейсе, поэтому идентификатор получают программно, через запрос, внешние обработки или специальные инструменты. Ниже разобраны все рабочие методы — от однострочного кода до поиска объекта по известному GUID.

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

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

Физически GUID хранится в таблице базы данных в поле _IDRRef в бинарном виде (16 байт). Важно понимать: представление GUID в SQL и в 1С отличается порядком байтов, поэтому копировать значение напрямую из SQL-таблицы и вставлять его в код 1С без преобразования нельзя — получите другой идентификатор.

Как узнать GUID через встроенный язык 1С

Самый универсальный способ — метод УникальныйИдентификатор(), доступный у любой ссылки. Код можно выполнить в консоли кода, внешней обработке или через «Выполнить произвольный код» в инструментах разработчика.

// Получаем ссылку на элемент справочника

СсылкаНаЭлемент = Справочники.Номенклатура.НайтиПоКоду("000000123");

// Получаем GUID

GUID = СсылкаНаЭлемент.УникальныйИдентификатор();

// Выводим строковое представление

Сообщить(Строка(GUID)); // например: 8b3f2a1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c

Для документа логика идентична — сначала получаете ссылку (по номеру, через выборку или из формы объекта), затем вызываете метод. Если нужен GUID объекта, открытого в форме, удобно использовать параметр формы: ЭтаФорма.Объект.Ссылка.УникальныйИдентификатор().

bsl
Ссылка = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");
Если Не Ссылка.Пустая() Тогда
    Сообщить(Ссылка.УникальныйИдентификатор());
КонецЕсли;

GUID из формы объекта без программирования

Если под рукой нет консоли кода, GUID можно увидеть через адресную строку веб-клиента: при открытии объекта в тонком или веб-клиенте в URL присутствует параметр с идентификатором ссылки. В толстом клиенте помогает команда «Вывести список» с добавлением поля «Ссылка», но сам GUID так не отобразится — потребуется обработка.

Как получить GUID запросом

В языке запросов 1С нет прямой функции для GUID, но есть обходной путь — представление ссылки. Функция ПРЕДСТАВЛЕНИЕССЫЛКИ вернёт наименование, а не GUID, поэтому для идентификатора используют либо выгрузку через СКД с вычисляемым полем, либо запрос к полю _IDRRef на уровне СУБД.

Практичный вариант — пакетный запрос с последующей обработкой выборки в коде: выбираете ссылки запросом, затем в цикле для каждой вызываете УникальныйИдентификатор(). Это быстрее, чем обход объектов через НайтиПоКоду, при массовой обработке.

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

Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ НЕ ПометкаУдаления";

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

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

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

КонецЦикла;

Поиск объекта по известному GUID

Обратная задача — найти объект, зная его GUID. Это типичная ситуация при разборе ошибок обмена, когда в сообщении фигурирует фраза «Объект не найден (8b3f2a1c-...)». Используется конструктор Новый УникальныйИдентификатор и метод ПолучитьСсылку:

GUID = Новый УникальныйИдентификатор("8b3f2a1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c");

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

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

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

Иначе

Сообщить(Ссылка);

КонецЕсли;

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

Поиск объекта по GUID перебором
  1. 1
    Создайте объект УникальныйИдентификатор из строки
  2. 2
    В цикле по метаданным справочников вызовите ПолучитьСсылку(GUID)
  3. 3
    Проверьте результат: если ПолучитьОбъект() вернул не Неопределено — объект найден
  4. 4
    Повторите цикл для документов, планов счетов и других ссылочных типов
  5. 5
    Зафиксируйте тип и ссылку найденного объекта

Внешние обработки и стандартные инструменты

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

Ещё один штатный вариант — открыть объект и посмотреть навигационную ссылку: команда «Получить ссылку» (или «Получить навигационную ссылку») покажет строку вида e1cib/data/Справочник.Номенклатура?ref=..., где параметр ref — это GUID в шестнадцатеричном представлении без дефисов, который можно преобразовать в привычный формат.

Способы получения GUID

Код через УникальныйИдентификатор()

Подходит разработчику и для массовой обработки; требует доступа к конфигуратору или консоли кода

Внешняя обработка

Быстро для разовой задачи без программирования; нужен файл обработки и права на её запуск

Навигационная ссылка

Доступно обычному пользователю без прав разработчика; идентификатор требует преобразования формата

Чтение из SQL

Удобно администратору БД для пакетного анализа; байты GUID перевёрнуты, нужна функция конвертации

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

Частая ошибка — попытка сравнивать GUID как строки без учёта регистра или с лишними пробелами после копирования из письма или лога. Перед созданием объекта УникальныйИдентификатор строку стоит очистить функцией СокрЛП, иначе конструктор выдаст ошибку преобразования.

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

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

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

После получения GUID полезно убедиться, что он корректен: строка должна содержать 36 символов, включая 4 дефиса, и состоять из шестнадцатеричных цифр. Нулевой идентификатор 00000000-0000-0000-0000-000000000000 означает, что ссылка пустая или объект ещё не записан.

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

Контрольные точки

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

Формат строки GUID
Норма

36 символов, 4 дефиса, шестнадцатеричные цифры

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

Другая длина, лишние символы, пробелы по краям

Поиск объекта по GUID
Норма

ПолучитьОбъект() возвращает объект с нужным представлением

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

Возвращается Неопределено — объект удалён или тип выбран неверно

Значение идентификатора
Норма

Ненулевой GUID у записанного объекта

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

Одни нули — ссылка пустая или объект не записан

Итог

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

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

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

Можно ли узнать GUID без прав разработчика?

Да, через навигационную ссылку объекта: команда «Получить ссылку» в форме объекта показывает параметр ref, содержащий идентификатор. Его нужно преобразовать в стандартный формат GUID, для чего подойдёт любая простая обработка или онлайн-конвертер представления ссылок 1С.

Меняется ли GUID при изменении реквизитов объекта?

Нет. Идентификатор присваивается один раз при создании и остаётся неизменным при любых правках наименования, кода и прочих данных. GUID теряется только вместе с физическим удалением объекта из базы.

Что означает «Объект не найден» с GUID в ошибке обмена?

Это битая ссылка: в одной базе есть ссылка на объект, который отсутствует в другой. Найдите объект по GUID через ПолучитьСсылку и перебор типов метаданных, затем либо восстановите объект, либо очистите ссылку в зависимости от ситуации.

Одинаковы ли GUID у одинаковых элементов в разных базах?

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

Как получить GUID сразу для списка объектов?

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

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

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