Идентификатор объекта в 1С: UUID, ссылка и имя метаданных

· 9 мин

Содержание

Чаще всего под «идентификатором объекта» в 1С понимают UUID ссылки — тот самый GUID вида 550e8400-e29b-41d4-a716-446655440000. Получить его в коде можно одной строкой: Ссылка.УникальныйИдентификатор(). Но узнать идентификатор объекта бывает нужно и без программирования — скопировать навигационную ссылку прямо из формы, а ещё отличить его от имени объекта метаданных и от внутреннего кода справочника.

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

Какие бывают идентификаторы объекта в 1С

Слово «идентификатор» в 1С относится сразу к нескольким разным вещам. Прежде чем искать, определитесь, что именно вам нужно.

  • 🔑 UUID ссылки (GUID) — уникальный идентификатор элемента данных: конкретной номенклатуры, документа, контрагента. Хранится в базе, не меняется при переименовании и остаётся тем же во всех узлах РИБ.
  • 🏷️ Имя объекта метаданных — строковое имя из конфигурации: Номенклатура, РеализацияТоваровУслуг. Полное имя добавляет вид объекта: Справочник.Номенклатура.
  • 🧩 Внутренний UUID метаданных — GUID самого объекта конфигурации (не данных). Виден при выгрузке конфигурации в XML, нужен для сравнения и анализа конфигураций.
  • #️⃣ Код или номер — реквизит Код справочника либо Номер документа. Это бизнес-идентификатор, его видит пользователь, и он может повторяться или меняться.

Чтобы не путать их между собой, держите в голове короткую сводку:

ИдентификаторГде берутМеняется?Для чего
UUID ссылкиСсылка.УникальныйИдентификатор()нетсвязи между базами, внешние системы
Полное имя метаданныхСсылка.Метаданные().ПолноеИмя()при переименовании в конфигуратореуниверсальный код, анализ типа
Внутренний UUID метаданныхвыгрузка конфигурации в XMLнетсравнение конфигураций, расширения
Код / Номерреквизит объектада, вручнуюбизнес-идентификатор для людей

Дальше речь в основном про UUID ссылки и имя метаданных — именно их имеют в виду разработчики, когда спрашивают, как узнать идентификатор объекта.

UUID и код — не одно и то же. Код можно поменять вручную, UUID — нет. Для связей между базами и внешними системами всегда опирайтесь на UUID.

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

Как получить UUID ссылки программно

В режиме «Предприятие» UUID достаётся из любой ссылки методом УникальныйИдентификатор(). Он возвращает значение типа УникальныйИдентификатор, которое легко превратить в строку.

// Получаем UUID ссылки
Идентификатор = Ссылка.УникальныйИдентификатор();
Текст = Строка(Идентификатор); // "550e8400-e29b-41d4-a716-446655440000"

Обратная операция — восстановить ссылку по известному UUID. Для этого у каждого менеджера объекта есть метод ПолучитьСсылку():

Ид = Новый УникальныйИдентификатор("550e8400-e29b-41d4-a716-446655440000");
СсылкаНоменклатуры = Справочники.Номенклатура.ПолучитьСсылку(Ид);

Важная деталь: ПолучитьСсылку() создаёт ссылку даже если объекта с таким UUID в базе нет. Метод не обращается к базе и не проверяет существование. Поэтому результат почти всегда стоит проверить:

Если СсылкаНоменклатуры.Пустая() ИЛИ НЕ ЗначениеЗаполнено(СсылкаНоменклатуры)
   ИЛИ СсылкаНоменклатуры.ПолучитьОбъект() = Неопределено Тогда
   Сообщить("Объект не найден");
КонецЕсли;

Ещё один рабочий способ получить строковое представление ссылки — функция XMLСтрока(). Для ссылочных типов она возвращает тот же UUID в виде строки, что удобно при обмене данными:

СтрокаUUID = XMLСтрока(Ссылка); // UUID строкой, формат XML

Если нужно пройтись по множеству объектов и собрать их идентификаторы, подойдёт простой цикл по выборке из менеджера:

Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    UUID = Выборка.Ссылка.УникальныйИдентификатор();
    Сообщить(Выборка.Наименование + ": " + Строка(UUID));
КонецЦикла;

Для больших объёмов лучше брать данные запросом и получать UUID уже при обходе результата — так платформа не читает каждый объект целиком.

Не путайте UUID ссылки с результатом Строка(Ссылка). Второе возвращает представление объекта (например, наименование номенклатуры), а не идентификатор. Для технических задач берите именно УникальныйИдентификатор().

Имя и полное имя объекта метаданных

Если нужен не UUID данных, а имя самого объекта конфигурации, работайте через Метаданные(). Метод есть у любой ссылки и объекта.

Имя = Ссылка.Метаданные().Имя;             // "Номенклатура"
ПолноеИмя = Ссылка.Метаданные().ПолноеИмя(); // "Справочник.Номенклатура"
Синоним = Ссылка.Метаданные().Синоним;      // "Номенклатура" (как видит пользователь)

Полное имя удобно, когда тип объекта заранее неизвестен — например, в универсальной обработке, которая получает произвольную ссылку. По строке Справочник.Номенклатура или Документ.РеализацияТоваровУслуг вы однозначно понимаете, с чем имеете дело.

Обратный путь — получить менеджер объекта по его полному имени:

Менеджер = МенеджерПоПолномуИмени("Справочник.Номенклатура");
// Если такого метода нет под рукой — используйте типовой общий модуль

В разных конфигурациях вспомогательные функции называются по-разному. Сам метод Метаданные() платформенный и есть всегда, а обёртки вроде «получить менеджер по имени» ищите в общих модулях своей конфигурации.

Ссылка на объект без программирования

Разработчику код не нужен, чтобы быстро вытащить идентификатор конкретного элемента. В «Предприятии» для этого есть стандартная команда.

  1. Откройте элемент справочника или документ.
  2. Нажмите кнопку «Ещё» в правом верхнем углу формы.
  3. Выберите пункт «Получить ссылку» (в тонком клиенте он есть почти у всех форм).
  4. Платформа покажет навигационную ссылку вида e1cib/data/Справочник.Номенклатура?ref=8a7b6c....

В этой строке после ref= — внутреннее представление ссылки, включающее UUID объекта. Такую ссылку можно отправить коллеге: он вставит её в адресную строку клиента и попадёт прямо на нужный объект.

Программный аналог этой команды — функция ПолучитьНавигационнуюСсылку():

Нав = ПолучитьНавигационнуюСсылку(Ссылка);
// "e1cib/data/Справочник.Номенклатура?ref=..."

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

Где найти объект в конфигураторе

В конфигураторе объекты видны по именам — в дереве метаданных слева. Чтобы быстро найти нужный:

  • откройте дерево конфигурации (Конфигурация → Открыть конфигурацию);
  • разверните ветку нужного вида — Справочники, Документы, Регистры сведений и так далее;
  • для поиска по всей конфигурации удобна команда поиска по дереву — начните набирать имя объекта.

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

Внутренний GUID объекта метаданных в палитре свойств не показывается. Увидеть его можно, выгрузив конфигурацию в XML-файлы: Конфигурация → Выгрузить конфигурацию в файлы. В полученных .xml у каждого объекта есть атрибут uuid — это и есть внутренний идентификатор метаданных. Он нужен в основном для сравнения конфигураций и анализа расширений, в прикладном коде им почти не пользуются.

Внутренний UUID метаданных и UUID ссылки на данные — это разные идентификаторы. Первый описывает объект конфигурации (саму «таблицу»), второй — конкретную запись в ней.

Идентификатор в отладчике и табло значений

Когда программа остановлена на точке останова, UUID переменной-ссылки можно посмотреть не выходя из отладчика.

  • 🔍 Вычислить выражение (Отладка → Вычислить выражение, либо горячая клавиша). Введите Ссылка.УникальныйИдентификатор() — платформа покажет GUID.
  • 📊 Табло. Добавьте в табло выражение Строка(Ссылка.УникальныйИдентификатор()) — значение будет пересчитываться на каждом шаге.
  • 🖱️ Всплывающая подсказка. Если навести курсор на переменную-ссылку, платформа показывает её представление (наименование), но не UUID. Чтобы увидеть именно идентификатор, добавьте в табло вызов метода.

Такой приём выручает, когда нужно поймать, какой именно объект пришёл в процедуру — например, при разборе проблемы с проведением одного конкретного документа из сотен похожих.

Отдельно пригодится связка с журналом регистрации. Если в логе записана ошибка по объекту, его навигационную ссылку видно прямо в данных события — по ней вы открываете объект и сверяете UUID с тем, что поймали в отладчике. Так удобно подтверждать, что ошибка касается именно того документа, о котором идёт речь, а не его копии.

Идентификаторы в запросах

В языке запросов 1С отдельной функции «получить UUID» нет. Со ссылкой в запросе работают иначе — отбирают по ней, проверяют тип и приводят к нужному типу.

Отбор по ссылке. Передайте ссылку параметром и сравните поле с ней:

ВЫБРАТЬ
    Товары.Номенклатура,
    Товары.Количество
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
    Товары.Ссылка = &Ссылка

Проверка типа ссылки. Оператор ССЫЛКА отвечает, относится ли значение к нужному типу — полезно для составных полей вроде Регистратор:

ГДЕ
    ДвиженияВзаиморасчётов.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг

Приведение типа. Оператор ВЫРАЗИТЬ превращает составное поле в конкретный тип, после чего доступны его реквизиты:

ВЫБРАТЬ
    ВЫРАЗИТЬ(Движения.Регистратор КАК Документ.РеализацияТоваровУслуг).Контрагент
ИЗ
    РегистрНакопления.Продажи КАК Движения

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

Если на входе есть строка UUID, а объект нужно найти запросом, сначала соберите ссылку в коде через ПолучитьСсылку(), а затем передайте её параметром &Ссылка. Искать по текстовому представлению GUID прямо в запросе нельзя — поля ссылки не хранят UUID как строку, и сравнение с текстом работать не будет.

Особенности распределённых баз (РИБ)

Главное правило РИБ: UUID ссылки одинаков во всех узлах. Один и тот же элемент номенклатуры в центральной базе и в периферийной имеет один и тот же идентификатор — платформа переносит его вместе с данными. Благодаря этому ссылки не «ломаются» при обмене и объекты не задваиваются.

Из этого следуют практические выводы:

  • Код, который ищет объект по UUID, работает в любом узле без изменений.
  • Для связи с внешними системами (сайт, маркетплейс, другая учётная система) опирайтесь на UUID, а не на код — код в узлах может расходиться, UUID нет.
  • У самого узла плана обмена тоже есть идентификатор — реквизит Код узла. Не путайте его с UUID данных: код узла задаёт администратор, он короткий и человекочитаемый.

Если в двух базах, которые изначально создавались отдельно (а не из одной через РИБ), у «одинаковых» справочников разные UUID — это нормально. Совпадение идентификаторов гарантировано только внутри одной распределённой базы.

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

Отдельно соберём ошибки и вопросы, которые возникают чаще всего.

Диагностика: выберите симптом
Чем UUID отличается от кода справочника?
UUID — системный идентификатор, его назначает платформа и изменить нельзя. Код — бизнес-реквизит, его видит пользователь, он может повторяться и меняться. Для технических связей берите UUID.
Как получить ссылку по строке UUID?
Создайте Новый УникальныйИдентификатор("...") и передайте в Справочники.ИмяСправочника.ПолучитьСсылку(). Для документов и других типов — аналогичный менеджер.
Меняется ли UUID при переименовании объекта или смене кода?
Нет. UUID ссылки стабилен на всё время жизни объекта и не зависит ни от наименования, ни от кода, ни от реквизитов.
Как узнать имя объекта метаданных по произвольной ссылке?
Вызовите Ссылка.Метаданные().ПолноеИмя() — получите строку вида Справочник.Номенклатура. Свойство .Имя вернёт только короткое имя.
Можно ли увидеть UUID прямо в интерфейсе?
Напрямую — нет, но команда «Ещё → Получить ссылку» даёт навигационную ссылку, в которой идентификатор зашит после ref=. В отладчике UUID смотрят через «Вычислить выражение».