Разработка и Конфигурация · 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 объекта, открытого в форме, удобно использовать параметр формы: ЭтаФорма.Объект.Ссылка.УникальныйИдентификатор().
Ссылка = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");
Если Не Ссылка.Пустая() Тогда
Сообщить(Ссылка.УникальныйИдентификатор());
КонецЕсли;GUID из формы объекта без программирования
Если под рукой нет консоли кода, GUID можно увидеть через адресную строку веб-клиента: при открытии объекта в тонком или веб-клиенте в URL присутствует параметр с идентификатором ссылки. В толстом клиенте помогает команда «Вывести список» с добавлением поля «Ссылка», но сам GUID так не отобразится — потребуется обработка.
Как получить GUID запросом
В языке запросов 1С нет прямой функции для GUID, но есть обходной путь — представление ссылки. Функция ПРЕДСТАВЛЕНИЕССЫЛКИ вернёт наименование, а не GUID, поэтому для идентификатора используют либо выгрузку через СКД с вычисляемым полем, либо запрос к полю _IDRRef на уровне СУБД.
Практичный вариант — пакетный запрос с последующей обработкой выборки в коде: выбираете ссылки запросом, затем в цикле для каждой вызываете УникальныйИдентификатор(). Это быстрее, чем обход объектов через НайтиПоКоду, при массовой обработке.
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ НЕ ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Строка(Выборка.Ссылка.УникальныйИдентификатор()));
КонецЦикла;
Поиск объекта по известному GUID
Обратная задача — найти объект, зная его GUID. Это типичная ситуация при разборе ошибок обмена, когда в сообщении фигурирует фраза «Объект не найден (8b3f2a1c-...)». Используется конструктор Новый УникальныйИдентификатор и метод ПолучитьСсылку:
GUID = Новый УникальныйИдентификатор("8b3f2a1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(GUID);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект с таким GUID не найден (битая ссылка)");
Иначе
Сообщить(Ссылка);
КонецЕсли;
Сложность в том, что заранее неизвестно, к какому типу относится GUID. Если тип неизвестен, приходится перебирать все виды справочников, документов и других ссылочных объектов через метаданные. Для этого удобны готовые обработки «Поиск объекта по GUID», которые делают перебор автоматически.
- 1Создайте объект УникальныйИдентификатор из строки
- 2В цикле по метаданным справочников вызовите ПолучитьСсылку(GUID)
- 3Проверьте результат: если ПолучитьОбъект() вернул не Неопределено — объект найден
- 4Повторите цикл для документов, планов счетов и других ссылочных типов
- 5Зафиксируйте тип и ссылку найденного объекта
Внешние обработки и стандартные инструменты
Для разовых задач не обязательно писать код — существуют распространённые внешние обработки, показывающие GUID выделенного объекта и выполняющие обратный поиск. В типовых конфигурациях на БСП часть функций доступна через подсистему «Инструменты разработчика» или обработку «Все функции» в сочетании с консолью кода.
Ещё один штатный вариант — открыть объект и посмотреть навигационную ссылку: команда «Получить ссылку» (или «Получить навигационную ссылку») покажет строку вида e1cib/data/Справочник.Номенклатура?ref=..., где параметр ref — это GUID в шестнадцатеричном представлении без дефисов, который можно преобразовать в привычный формат.
Способы получения GUID
Подходит разработчику и для массовой обработки; требует доступа к конфигуратору или консоли кода
Быстро для разовой задачи без программирования; нужен файл обработки и права на её запуск
Доступно обычному пользователю без прав разработчика; идентификатор требует преобразования формата
Удобно администратору БД для пакетного анализа; байты GUID перевёрнуты, нужна функция конвертации
Типичные ошибки и ограничения
Частая ошибка — попытка сравнивать GUID как строки без учёта регистра или с лишними пробелами после копирования из письма или лога. Перед созданием объекта УникальныйИдентификатор строку стоит очистить функцией СокрЛП, иначе конструктор выдаст ошибку преобразования.
Вторая ловушка — ожидание, что одинаковые по наименованию объекты в разных базах имеют одинаковый GUID. Это не так: GUID формируется независимо в каждой базе, и совпадение возможно только если объект был создан обменом или выгрузкой с сохранением ссылки.
Как проверить результат
После получения GUID полезно убедиться, что он корректен: строка должна содержать 36 символов, включая 4 дефиса, и состоять из шестнадцатеричных цифр. Нулевой идентификатор 00000000-0000-0000-0000-000000000000 означает, что ссылка пустая или объект ещё не записан.
Для обратной проверки выполните поиск полученного GUID в исходной базе: если объект находится и его представление совпадает с ожидаемым — идентификатор получен верно. При работе с обменами сверьте GUID в обеих базах: совпадение подтверждает, что объекты связаны корректно.
Как проверить результат
36 символов, 4 дефиса, шестнадцатеричные цифры
Другая длина, лишние символы, пробелы по краям
ПолучитьОбъект() возвращает объект с нужным представлением
Возвращается Неопределено — объект удалён или тип выбран неверно
Ненулевой GUID у записанного объекта
Одни нули — ссылка пустая или объект не записан
Что важно запомнить
GUID получают методом УникальныйИдентификатор() у ссылки, обратный поиск — через ПолучитьСсылку с конструктором УникальныйИдентификатор. Идентификатор не меняется всю жизнь объекта, а из SQL его нельзя копировать без преобразования байтов.
Частые вопросы
Можно ли узнать GUID без прав разработчика?
Да, через навигационную ссылку объекта: команда «Получить ссылку» в форме объекта показывает параметр ref, содержащий идентификатор. Его нужно преобразовать в стандартный формат GUID, для чего подойдёт любая простая обработка или онлайн-конвертер представления ссылок 1С.
Меняется ли GUID при изменении реквизитов объекта?
Нет. Идентификатор присваивается один раз при создании и остаётся неизменным при любых правках наименования, кода и прочих данных. GUID теряется только вместе с физическим удалением объекта из базы.
Что означает «Объект не найден» с GUID в ошибке обмена?
Это битая ссылка: в одной базе есть ссылка на объект, который отсутствует в другой. Найдите объект по GUID через ПолучитьСсылку и перебор типов метаданных, затем либо восстановите объект, либо очистите ссылку в зависимости от ситуации.
Одинаковы ли GUID у одинаковых элементов в разных базах?
Только если объекты создавались обменом данными или выгрузкой с сохранением ссылок. При независимом ручном создании в каждой базе GUID будут разными, даже если наименования и коды совпадают полностью.
Как получить GUID сразу для списка объектов?
Выполните запрос, выбирающий ссылки, и в цикле обхода выборки вызовите УникальныйИдентификатор() для каждой ссылки. Результат удобно выгрузить в таблицу значений и сохранить в файл для дальнейшего сопоставления с внешней системой.
Почему GUID из SQL не совпадает с GUID в 1С?
В таблицах СУБД идентификатор хранится в бинарном виде с перевёрнутым порядком байтов относительно строкового представления платформы. Для сопоставления нужна функция преобразования на стороне SQL или выгрузка GUID средствами самой 1С.