Разработка и Конфигурация · 11 мин
Как узнать уникальный идентификатор объекта в 1С
Как узнать уникальный идентификатор объекта в 1С: через запрос, встроенный язык, обработку и SQL. Способы получить GUID справочника, документа и найти объект по GUID.
Уникальный идентификатор (GUID) в 1С — это внутренний 36-символьный код, который платформа присваивает каждому объекту базы данных: элементу справочника, документу, записи регистра. В отличие от кода или номера, которые видит пользователь и которые могут повторяться или меняться, GUID неизменен в течение всей жизни объекта и уникален в пределах всей информационной базы.
Знать GUID требуется при обмене данными между базами, при интеграции с внешними системами (сайтом, CRM, веб-сервисами), при поиске «битых» ссылок вида «Объект не найден», а также при отладке, когда нужно однозначно указать, о каком именно элементе идёт речь. Ниже разобраны все рабочие способы получить идентификатор: через встроенный язык, запрос, универсальную обработку и прямой просмотр таблиц СУБД.
Что такое GUID в 1С и где он хранится
GUID (глобально уникальный идентификатор) — это значение типа «УникальныйИдентификатор», которое платформа генерирует автоматически при создании объекта. Визуально он выглядит как строка вида 8a3f5c2e-1b7d-4e9a-a2c1-9f3e5d7b1a04. Пользователь в формах его не видит: в интерфейсе отображаются код, номер и наименование, а GUID остаётся служебным реквизитом.
Физически идентификатор хранится в таблицах базы данных вместе с остальными реквизитами объекта. В файловой базе он лежит внутри файла 1Cv8.1CD, в клиент-серверном варианте — в поле ссылки таблицы SQL Server, PostgreSQL или другой СУБД. Важно понимать: в SQL-таблицах GUID хранится в «перевёрнутом» (binary) формате, поэтому строка из запроса к СУБД не совпадёт посимвольно с тем, что показывает 1С.
Как узнать GUID через встроенный язык
Самый точный способ — получить идентификатор средствами встроенного языка 1С. Для этого достаточно иметь ссылку на объект и вызвать метод УникальныйИдентификатор(). Сделать это можно в консоли кода, внешней обработке или через «Выполнить произвольный код» в инструментах разработчика.
Пример для элемента справочника:
Ссылка = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если ЗначениеЗаполнено(Ссылка) Тогда
Сообщить(Ссылка.УникальныйИдентификатор());
КонецЕсли;
Для документа логика та же, только поиск выполняется по номеру и дате:
Ссылка = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("0000-000045", ТекущаяДатаСеанса());
Сообщить(Строка(Ссылка.УникальныйИдентификатор()));
Обратный приём — получить ссылку по известному GUID — выполняется методом ПолучитьСсылку():
ГУИД = Новый УникальныйИдентификатор("8a3f5c2e-1b7d-4e9a-a2c1-9f3e5d7b1a04");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);
Сообщить(Ссылка);
Ссылка = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");
Сообщить(Ссылка.УникальныйИдентификатор());Как получить GUID запросом
Язык запросов 1С не имеет прямой функции для вывода GUID, но есть обходной путь — представление ссылки. Функция ПРЕДСТАВЛЕНИЕССЫЛКИ возвращает навигационную ссылку, внутри которой содержится идентификатор объекта. Это удобно, когда нужно массово выгрузить GUID для списка элементов без написания цикла.
ВЫБРАТЬ
Номенклатура.Код,
Номенклатура.Наименование,
ПРЕДСТАВЛЕНИЕССЫЛКИ(Номенклатура.Ссылка) КАК НавигационнаяСсылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
Результат будет содержать строки вида e1cib/data/Справочник.Номенклатура?ref=..., где заключительная часть — идентификатор в специальном кодировании. Для массовой выгрузки в чистом виде GUID проще использовать консоль кода с циклом или готовую обработку выгрузки, потому что формат ref в навигационной ссылке отличается от привычного вида GUID.
Как узнать GUID без конфигуратора и программирования
Если нет доступа к конфигуратору или навыков написания кода, есть несколько практических вариантов. Первый — универсальные внешние обработки, которые открываются через «Файл → Открыть» в режиме предприятия (при наличии прав). Такие обработки показывают GUID выбранного объекта и умеют находить объект по введённому GUID.
Второй способ — навигационная ссылка. В типовых конфигурациях на управляемых формах команда «Получить ссылку» (обычно в меню «Ещё» формы объекта) копирует в буфер обмена строку вида e1cib/data/Справочник.Номенклатура?ref=.... Эта строка не является GUID в классическом виде, но однозначно идентифицирует объект и подходит для передачи коллеге или поиска в другой базе через специальные инструменты.
Третий вариант — типовые механизмы обмена. В планах обмена и регистрации изменений идентификаторы объектов часто доступны для просмотра, а при выгрузке в XML по правилам конвертации GUID выгружается в файл в явном виде. Открыв файл обмена в текстовом редакторе, можно увидеть идентификаторы всех выгруженных объектов.
Способы получить GUID
Самый точный и быстрый способ. Требует прав и минимального знания встроенного языка.
Подходит без навыков программирования, но нужен файл обработки и право открывать внешние файлы.
Доступна любому пользователю формы, но даёт идентификатор в формате e1cib, а не классический GUID.
Работает без запуска 1С, но GUID хранится в перевёрнутом виде и требует конвертации.
Как найти GUID в базе SQL Server
В клиент-серверных базах идентификатор можно прочитать напрямую из таблиц СУБД. Каждый справочник и документ хранится в своей таблице, а ссылка — в поле _IDRRef типа binary(16). Чтобы получить читаемый GUID, значение нужно преобразовать, потому что байты в нём идут в порядке, отличном от строкового представления 1С.
Пример запроса с преобразованием для SQL Server:
SELECT
_Code,
_Description,
sys.fn_varbintohexstr(_IDRRef) AS RefHex
FROM _Reference29 -- таблица конкретного справочника
WHERE _Description LIKE N'%Ромашка%'
Шестнадцатеричную строку затем конвертируют в привычный GUID: байты переставляются по определённому правилу (известному как «перевёрнутый GUID 1С»). Для разового поиска проще воспользоваться готовыми скриптами конвертации, которые публикуются в профильных сообществах, чем переставлять байты вручную — ошибка в одном байте даст несуществующий идентификатор.
Как найти объект по известному GUID и «битые» ссылки
Обратная задача возникает при разборе ошибок «Объект не найден» или при анализе логов обмена, где фигурирует только GUID. Если известен тип объекта, ссылку получают через ПолучитьСсылку(), как показано выше. Если тип неизвестен, GUID придётся перебирать по всем видам справочников и документов — для этого используют специальные обработки поиска по GUID.
«Битая» ссылка — это ссылка на объект, который был удалён физически. В запросе она отображается как строка с GUID в угловых скобках, например <Объект не найден> (123:8a3f...). Из этой строки можно извлечь идентификатор и проверить, существует ли объект в другой базе (например, в источнике обмена), чтобы восстановить его.
- 1Определите предполагаемый тип объекта (справочник, документ).
- 2Создайте значение: Новый УникальныйИдентификатор("строка-guid").
- 3Получите ссылку: Менеджер.ПолучитьСсылку(ГУИД).
- 4Проверьте существование: запросом по ссылке или проверкой НЕ Ссылка.Пустая() и получением реквизита.
- 5Если объект не найден — повторите для других типов или используйте обработку полного перебора.
Типичные ошибки и ограничения при работе с GUID
Частая ошибка — путать GUID с кодом или номером объекта. Код может совпадать у разных элементов (при отключённом контроле уникальности) и меняется при перенумерации, поэтому для интеграций и сопоставления объектов между базами использовать нужно только GUID, а не код.
Вторая ошибка — ожидать, что один и тот же объект будет иметь одинаковый GUID в разных базах. При обычном копировании (например, через создание нового элемента и перенос реквизитов) GUID будет новым. Совпадение идентификаторов гарантируют только механизмы обмена, конвертация данных и создание объекта методом ПолучитьСсылку() с заданным GUID.
Наконец, при сравнении GUID из разных источников учитывайте формат: строка из 1С, ref из навигационной ссылки и hex из SQL — три разных представления одного идентификатора. Прямое посимвольное сравнение между ними бессмысленно без конвертации.
Когда GUID недостаточно и что проверить в результате
Для интеграций GUID — необходимое, но не всегда достаточное условие. Если базы обмениваются через промежуточный формат, убедитесь, что правила конвертации настроены на поиск по GUID, а не по коду или наименованию. При первичной синхронизации часто сначала сопоставляют объекты по ключевым полям, а уже потом фиксируют соответствие по GUID.
Проверить корректность полученного идентификатора просто: подставьте GUID в обратный вызов ПолучитьСсылку() и убедитесь, что вернулся именно тот объект — совпадают наименование, код и ключевые реквизиты. Если возвращается пустая ссылка или другой объект, идентификатор получен из другого источника или сконвертирован с ошибкой.
Что важно запомнить
GUID объекта 1С получают методом Ссылка.УникальныйИдентификатор(), обратный поиск — через ПолучитьСсылку(). Без программирования помогают внешние обработки и навигационные ссылки, а в SQL идентификатор хранится в перевёрнутом виде. Для интеграций используйте только GUID, а не код или номер.
Частые вопросы
Можно ли увидеть GUID в стандартной форме объекта?
В типовых формах GUID не отображается — это служебное поле. Максимум, что доступно пользователю без дополнительных инструментов, — навигационная ссылка через команду «Получить ссылку» в меню формы. Для прямого просмотра GUID нужны консоль кода, внешняя обработка или запрос к СУБД.
Изменится ли GUID, если изменить код, наименование или перенести объект в другую группу?
Нет. GUID присваивается один раз при создании объекта и не меняется ни при редактировании реквизитов, ни при перемещении по иерархии, ни при пометке на удаление и её снятии. Идентификатор исчезает только вместе с физическим удалением объекта из базы.
Почему GUID из SQL-таблицы не совпадает с тем, что показывает 1С?
Платформа хранит идентификатор в поле _IDRRef в виде 16 байт с изменённым порядком следования байтов. Это тот же самый GUID, но в «перевёрнутом» представлении. Чтобы получить привычную строку, шестнадцатеричное значение нужно сконвертировать по правилу перестановки байтов.
Как восстановить удалённый объект, зная его GUID?
Если объект удалён физически, восстановить его в той же базе нельзя — можно только создать новый объект с тем же GUID через УстановитьСсылкуНового() с предварительно полученной ссылкой ПолучитьСсылку(ГУИД) и заполнить реквизиты вручную или из копии базы. Проще всего взять объект из резервной копии или базы-источника обмена.
Одинаков ли GUID у объекта в рабочей базе и в её копии?
Да. При полном копировании информационной базы (выгрузка/загрузка dt, копирование файла 1Cv8.1CD, бэкап SQL) все GUID сохраняются без изменений. Поэтому поиск объекта по GUID в копии даст тот же элемент, что и в рабочей базе.
Можно ли задать объекту свой GUID вручную?
Да, при программном создании объекта: сначала формируется ссылка через Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(...)), затем она назначается новому объекту методом УстановитьСсылкуНового(). Так делают при синхронизации баз, чтобы идентификаторы совпадали. В интерактивном режиме задать GUID нельзя.