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

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

Как получить идентификатор объекта 1С

Способы получить уникальный идентификатор объекта 1С: через встроенный язык, запрос, СКД и внешние инструменты. Разбор методов, типичных ошибок и проверки результата.

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

Получить GUID можно несколькими способами: программно через метод Ссылка.УникальныйИдентификатор(), через запрос с представлением ссылки, через консоль кода или специализированные обработки. Выбор зависит от того, есть ли у вас доступ к конфигуратору и правам разработчика, сколько объектов нужно обработать и куда дальше пойдёт результат.

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

Что такое GUID объекта и когда он нужен

GUID (глобально уникальный идентификатор) — это 128-битное значение, которое платформа генерирует при записи нового объекта. В текстовом виде он выглядит как 8b3e1a2c-4f5d-4e6a-9b1c-2d3e4f5a6b7c. Два объекта в разных базах теоретически не могут иметь одинаковый GUID, что делает его надёжным ключом для сопоставления данных.

Типичные сценарии, где без идентификатора не обойтись: настройка обмена между конфигурациями (например, «Управление торговлей» ↔ «Бухгалтерия»), интеграция с сайтом или CRM через веб-сервисы, поиск «потерянного» объекта по ссылке из лога, восстановление данных после некорректного обмена. Во всех этих случаях код и наименование ненадёжны — они могут совпадать или меняться.

Получение GUID через встроенный язык

Основной способ — метод УникальныйИдентификатор(), который есть у любой ссылки. Если у вас уже есть ссылка на объект, достаточно одной строки кода:

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

Сообщить(Строка(Идентификатор));

Если известны вид объекта и его код, сначала получают ссылку, а затем GUID. Например, для номенклатуры с известным кодом:

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

Если Не Ссылка.Пустая() Тогда

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

КонецЕсли;

Обратная задача — найти объект по известному GUID — решается методом ПолучитьСсылку():

ГУИД = Новый УникальныйИдентификатор("8b3e1a2c-4f5d-4e6a-9b1c-2d3e4f5a6b7c");

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

Как узнать GUID без конфигуратора: консоль кода и обработки

Если нет доступа к конфигуратору или задача разовая, удобнее использовать консоль кода — внешнюю обработку, позволяющую выполнить произвольный код в режиме «Предприятие». Такие обработки входят в состав типовых инструментов разработчика или распространяются отдельно. Запускаете обработку, вставляете фрагмент кода с методом УникальныйИдентификатор(), выполняете — и получаете результат в окне сообщений.

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

Разовый просмотр GUID через консоль кода
  1. 1
    Откройте консоль кода (обработку) в режиме «Предприятие» под пользователем с достаточными правами
  2. 2
    Напишите код получения ссылки: например, Справочники.Номенклатура.НайтиПоНаименованию("...")
  3. 3
    Вызовите Сообщить(Ссылка.УникальныйИдентификатор()) и выполните код
  4. 4
    Скопируйте GUID из окна сообщений и сверьте с ожидаемым объектом

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

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

Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура");

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

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

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

КонецЦикла;

Для больших выборок результат удобнее собирать в таблицу значений с колонками «Ссылка» и «GUID», а затем выгружать в файл или табличный документ. Это снижает риск потери данных при копировании из окна сообщений.

GUID в файловой и клиент-серверной базе: есть ли разница

С точки зрения прикладного кода разницы нет: метод УникальныйИдентификатор() работает одинаково в файловом и клиент-серверном варианте. Различия проявляются только на уровне хранения: в SQL-базе идентификатор хранится в поле _IDRRef в двоичном виде, и его текстовое представление отличается порядком байтов от того, что показывает платформа.

Это важно при прямых запросах к SQL-базе: GUID из запроса к СУБД нельзя напрямую сопоставлять со строкой, полученной из 1С, без преобразования порядка байтов. Прямая работа с таблицами СУБД в обход платформы — рискованная практика: она не поддерживается вендором и может привести к нарушению целостности данных.

Способы получить GUID

Метод УникальныйИдентификатор() в коде

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

Консоль кода / обработка

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

Запрос с обходом выборки

Оптимален для массового получения GUID; требует программной обработки результата

Прямой запрос к SQL

Быстро для больших объёмов, но не поддерживается вендором и требует преобразования байтов; только для чтения и на свой риск

Типичные ошибки и как их избежать

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

Вторая группа ошибок связана с обратным поиском: ПолучитьСсылку() по несуществующему GUID возвращает «битую» ссылку без ошибки. Перед использованием проверяйте её запросом или попыткой получить объект. Также помните, что при удалении объекта его GUID не переиспользуется, но восстановить объект по сохранённому GUID без резервной копии невозможно.

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

Как проверить, что идентификатор получен верно

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

Формат строки тоже подсказывает о корректности: GUID должен содержать 36 символов — 32 шестнадцатеричные цифры и 4 дефиса в стандартных позициях. Строка другой длины или с посторонними символами (пробелы, фигурные скобки из внешних систем) требует очистки перед использованием.

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

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

Длина и формат строки
Норма

36 символов, 4 дефиса, только hex-цифры

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

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

Обратный поиск по GUID
Норма

ПолучитьСсылку() возвращает существующий объект с теми же реквизитами

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

Ссылка существует, но объект не открывается или реквизиты другие

Стабильность идентификатора
Норма

Повторный вызов даёт ту же строку

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

GUID меняется между вызовами — объект не записан

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

Можно ли увидеть GUID объекта без программирования?

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

Меняется ли GUID при переносе объекта в другую базу?

Зависит от способа переноса. При обмене через правила конвертации или типовую синхронизацию GUID обычно сохраняется — именно по нему системы сопоставляют объекты. При создании объекта заново вручную или загрузкой без сопоставления будет сгенерирован новый идентификатор.

Чем GUID отличается от внутреннего кода или номера документа?

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

Как найти объект, если известен только GUID из лога ошибок?

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

Безопасно ли запрашивать GUID напрямую из SQL-таблиц?

Чтение данных напрямую из СУБД не поддерживается вендором: структура таблиц может меняться между релизами, а двоичное представление GUID требует преобразования порядка байтов. Для разовой аналитики на копии базы это допустимо, но в продуктивных интеграциях используйте штатные механизмы платформы.

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

Платформа и СУБД используют разный порядок байтов при хранении идентификатора. Строка из 1С и строка из поля _IDRRef выглядят как перестановка групп символов. Для сопоставления применяют функцию преобразования, либо получают GUID только средствами платформы.

Итог

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

GUID объекта получают методом Ссылка.УникальныйИдентификатор(); для разовых задач достаточно консоли кода, для массовых — запроса с обходом выборки. Работайте только со ссылками на записанные объекты, проверяйте существование при обратном поиске и не полагайтесь на прямые запросы к СУБД в продуктивных решениях.