Уникальный идентификатор объекта 1С: где он хранится и пять способов его достать

· 10 мин

Содержание

Самый быстрый способ узнать ID в 1С без программирования — открыть элемент и нажать Shift+F11. Платформа выдаст навигационную ссылку вида e1cib/data/Справочник.Номенклатура?ref=b0c6001e670fd4a611e3a4b8e8fcd03f. 32 символа после ref= и есть внутренний идентификатор объекта, только записанный в «перевёрнутом» порядке байтов.

Если нужен классический GUID вида e8fcd03f-a4b8-11e3-b0c6-001e670fd4a6 — для обмена, интеграции или поиска в SQL, — его даёт одна строка кода: Строка(Ссылка.УникальныйИдентификатор()). Способ одинаков для БП 3.0, ЗУП 3.1, УТ 11 и любой другой конфигурации на платформе 8.3: идентификатор — механизм платформы, а не прикладного решения.

Какой ID вам нужен: код, номер, GUID или имя таблицы

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

Что называют IDКак выглядитГде видноУникален?
Код справочника00-00000125Поле «Код» в карточке и в спискеТолько внутри справочника, может меняться
Номер документаБП00-000431Поле «Номер» в шапкеТолько в пределах периода и префикса
УИД (GUID) ссылкиe8fcd03f-a4b8-11e3-b0c6-001e670fd4a6Не выводится на форму, достаётся кодом или по ссылкеГлобально, не меняется никогда
Имя таблицы в СУБД_Reference25, _Document184Только через структуру храненияВнутри одной базы

Ключевые отличия:

  • 🔑 Код и номер — для людей. Их можно перенумеровать, они повторяются после смены префикса или года.
  • 🧬 GUID — для программ. Платформа присваивает его при первой записи объекта, и он живёт, пока жив объект. По нему 1С находит элемент при обмене данными, загрузке из файла, синхронизации с сайтом.
  • 🗄️ Имя таблицы нужно только тем, кто читает базу напрямую через SQL.

Если вам надо найти «тот самый» элемент после загрузки или обмена, ищите по GUID, а не по коду. Код при обмене может перегенерироваться, GUID переносится как есть.

Как узнать ID элемента в режиме 1С:Предприятие без кода

В пользовательском режиме GUID на форме не показывается, но три приёма работают без Конфигуратора.

Навигационная ссылка через Shift+F11

  1. Откройте карточку элемента справочника или форму документа.
  2. Нажмите Shift+F11.
  3. В окне «Ссылка» скопируйте строку целиком.

Часть после ref= — шестнадцатеричная запись внутреннего идентификатора. Передайте эту строку коллеге: он вставит её через команду «Перейти по ссылке» в главном меню (кнопка с тремя полосками в левом верхнем углу) и откроет ровно этот объект.

Перевод ref в обычный GUID

Ссылка хранит те же 16 байт, что и GUID, но группы символов переставлены. Схема перевода:

Позиции в ref (32 символа)Куда идут в GUID
25–32первая группа (8 символов)
21–24вторая группа (4)
17–20третья группа (4)
1–4четвёртая группа (4)
5–16пятая группа (12)

Пример: ref=b0c6001e670fd4a611e3a4b8e8fcd03f превращается в e8fcd03f-a4b8-11e3-b0c6-001e670fd4a6. Разбейте строку на куски b0c6 | 001e670fd4a6 | 11e3 | a4b8 | e8fcd03f и соберите в обратном порядке групп.

«Объект не найден» тоже показывает ID

Если в поле стоит битая ссылка, 1С выводит <Объект не найден> (85:b0c6001e670fd4a611e3a4b8e8fcd03f). Число до двоеточия — номер таблицы в базе, после двоеточия — тот же ref, что в навигационной ссылке. По нему можно выяснить, какой элемент был удалён и в какой резервной копии его искать.

Узнаём ID через Конфигуратор и отладчик

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

Вычислить выражение в отладке

Это самый надёжный приём практика, когда нужно посмотреть GUID «на лету»:

  1. Запустите отладку (F5) из Конфигуратора.
  2. Поставьте точку останова в модуле формы или объекта, где доступна переменная со ссылкой.
  3. Когда выполнение остановится, нажмите Shift+F9 — откроется окно вычисления выражения.
  4. Введите Строка(Объект.Ссылка.УникальныйИдентификатор()) или XMLСтрока(Объект.Ссылка) и нажмите «Рассчитать».

Обе формы выражения возвращают одинаковую строку GUID.

Отладку запускайте на копии базы или в тестовой среде. Точка останова в рабочей базе остановит сеанс пользователя, который откроет эту форму.

GUID объектов метаданных

Если под «ID» имеется в виду идентификатор самого справочника или реквизита (а не записи), откройте Конфигурация → Выгрузить конфигурацию в файлы. В каждом XML-файле у объекта есть атрибут uuid. Такой идентификатор нужен при сравнении конфигураций и разборе расширений, к данным пользователя он отношения не имеет.

Программное получение GUID в коде модуля

Для разработчика всё сводится к методу УникальныйИдентификатор() у ссылки. Он есть у справочников, документов, планов видов характеристик, планов счетов, бизнес-процессов, задач и перечислений.

// Ссылка → GUID строкой
ГУИД = Строка(Ссылка.УникальныйИдентификатор());

// То же через XML-сериализацию
ГУИД = XMLСтрока(Ссылка);

// Ссылка → навигационная ссылка (e1cib/data/...)
НавСсылка = ПолучитьНавигационнуюСсылку(Ссылка);

Обратная операция — получить ссылку по известному GUID:

УИД = Новый УникальныйИдентификатор("e8fcd03f-a4b8-11e3-b0c6-001e670fd4a6");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(УИД);

ПолучитьСсылку() не проверяет, существует ли объект. Она вернёт ссылку даже на несуществующий элемент, и в поле вы увидите <Объект не найден>. Проверяйте существование запросом:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ Справочник.Номенклатура ГДЕ Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Существует = НЕ Запрос.Выполнить().Пустой();

Ещё несколько приёмов, которые пригодятся:

  • 🆕 Задать GUID новому элементу. У объекта есть метод УстановитьСсылкуНового(): перед первой записью передайте ему ссылку, полученную через ПолучитьСсылку(). Так при загрузке из внешней системы элемент получит тот же GUID, что был в источнике.
  • 👤 ID пользователя. У пользователя информационной базы своё свойство: ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор.
  • 🧾 Уникальный ключ для формы. Новый УникальныйИдентификатор() без параметров генерирует свежий GUID — его используют как ключ временного хранилища.

Не храните GUID в строковом реквизите «на всякий случай». Он и так лежит в ссылке, а дубль рано или поздно разойдётся с оригиналом.

Получаем ID через консоль запросов и внешнюю обработку

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

Выгрузка списка GUID

Этот фрагмент выполняется на сервере — во внешней обработке или в консоли, которая умеет выполнять произвольный код:

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

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

Для тысяч строк вместо Сообщить выгрузите результат в таблицу значений, добавьте колонку «ГУИД» и заполните её в цикле. Таблицу потом удобно сохранить в табличный документ или Excel.

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

Обратная задача: прислали GUID из лога обмена, нужно понять, что это. В консоли запросов задайте параметр &Ссылка и в нём получите значение кодом Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор("...")). Запрос ВЫБРАТЬ * ИЗ Справочник.Номенклатура ГДЕ Ссылка = &Ссылка вернёт строку, если элемент жив.

Если вид объекта неизвестен, переберите кандидатов — обычно по контексту обмена ясно, справочник это или документ.

Подключение обработки в разделе «Администрирование»

Пользователю без доступа к Конфигуратору проще всего дать готовую внешнюю обработку . В конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11, КА 2) её подключают так:

  1. Откройте Администрирование → Печатные формы, отчеты и обработки.
  2. Включите флажок «Дополнительные отчеты и обработки», если он снят.
  3. Перейдите по ссылке «Дополнительные отчеты и обработки» и нажмите «Добавить из файла».
  4. Выберите .epf с кодом из предыдущего раздела.

Права на подключение есть у администратора. После этого обработка запускается из того же раздела и выводит таблицу «наименование → код → GUID».

Подключайте только обработки, код которых вы видели. Внешняя обработка выполняется с правами пользователя и может изменить данные.

Что вам нужно сделать с ID?

Прямой доступ к таблице базы данных через SQL

В клиент-серверной базе каждая ссылка лежит в поле _IDRRef типа binary(16) (в PostgreSQL — bytea). Порядок байтов в нём совпадает с ref из навигационной ссылки, а не с GUID.

Шаг 1. Узнать имя таблицы

Имена _Reference25 и подобные зависят от конкретной базы. Получите их кодом:

Структура = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из Структура Цикл
	Если Строка.Метаданные = "Справочник.Номенклатура" И Строка.Назначение = "Основная" Тогда
		Сообщить(Строка.ИмяТаблицыХранения);
	КонецЕсли;
КонецЦикла;

Колонка Поля в той же строке покажет соответствие реквизитов и полей СУБД (_Description, _Code, _Fld1234).

Шаг 2. Перевести _IDRRef в GUID

Для MS SQL Server:

SELECT _Description,
  LOWER(
    SUBSTRING(CONVERT(varchar(34), _IDRRef, 1), 27, 8) + '-' +
    SUBSTRING(CONVERT(varchar(34), _IDRRef, 1), 23, 4) + '-' +
    SUBSTRING(CONVERT(varchar(34), _IDRRef, 1), 19, 4) + '-' +
    SUBSTRING(CONVERT(varchar(34), _IDRRef, 1), 3, 4)  + '-' +
    SUBSTRING(CONVERT(varchar(34), _IDRRef, 1), 7, 12)
  ) AS GUID
FROM _Reference25;

Для PostgreSQL:

SELECT _description,
  substr(h, 25, 8) || '-' || substr(h, 21, 4) || '-' ||
  substr(h, 17, 4) || '-' || substr(h, 1, 4)  || '-' || substr(h, 5, 12) AS guid
FROM (SELECT _description, encode(_idrref, 'hex') AS h FROM _reference25) t;

В MS SQL CONVERT(..., 1) добавляет префикс 0x, поэтому позиции сдвинуты на два символа относительно PostgreSQL.

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

ID у регистров, документов и табличных частей

GUID есть не у всего. Это частая причина путаницы, когда разработчик ищет «ID записи регистра» и не находит.

ОбъектЕсть ли GUIDЧем идентифицируется запись
Справочник, документ, план счетов, ПВХ, задача, бизнес-процессДаСсылка → УникальныйИдентификатор()
Значение перечисленияДаСсылка на значение, GUID стабилен
Строка табличной частиНетСсылка на владельца + НомерСтроки
Регистр сведений (независимый)НетНабор измерений и период — ключ записи
Регистр сведений с регистратором, регистр накопления, бухгалтерииНетРегистратор + НомерСтроки
КонстантаНетИмя константы

Что из этого следует на практике:

  • 📄 Чтобы найти движения документа, ищите в регистре по полю Регистратор — оно хранит ссылку на документ, и её GUID совпадает с GUID документа.
  • 🧩 Ссылку на строку табличной части не получить. Если строке нужен постоянный ключ, добавьте в табличную часть реквизит и заполняйте его через Новый УникальныйИдентификатор(). Так строку можно найти, даже если её номер сменился после сортировки или удаления соседних строк.
  • 📚 Запись независимого регистра сведений в коде адресуется менеджером записи или набором с отбором по всем измерениям. В SQL у такой таблицы нет поля _IDRRef.

Документ после перепроведения сохраняет GUID, а его движения перезаписываются. Поэтому связка «документ → движения» надёжна, а «запись регистра → внешний ключ» — нет.

Частые ошибки при поиске ID

  • ❌ Сравнивают ref из ссылки с GUID напрямую. Строки разные, хотя объект один. Сначала переставьте группы, как описано выше.
  • ❌ Ищут по коду после обмена. Код в приёмнике мог сгенерироваться заново. Правило обмена сопоставляет объекты по GUID — по нему и ищите.
  • ❌ Создают элемент через ПолучитьСсылку() без УстановитьСсылкуНового(). Ссылка получена, но объект записывается с новым случайным GUID, и связь с источником теряется.
  • ❌ Переносят имена таблиц из одной базы в другую. _Reference25 в вашей базе и в базе соседа — разные справочники. Имя проверяйте в каждой базе отдельно.
  • ❌ Путают GUID данных и uuid метаданных. Первый относится к конкретному товару или документу, второй — к описанию справочника в конфигурации.

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

Меняется ли GUID при копировании элемента?
Да. Копия — новый объект с новым GUID. Сохраняется GUID только при переносе базы целиком (выгрузка в .dt, копирование файла базы) и при обмене, где правило переносит ссылку.
Можно ли увидеть GUID в файловой базе через SQL?
Нет. Файловая база хранится в 1Cv8.1CD, а не в СУБД. Используйте навигационную ссылку, отладчик или обработку.
Есть ли GUID у удалённого объекта?
После удаления записи в базе нет, но ссылки на неё в других объектах остаются. Их видно как <Объект не найден> с ref в скобках — по нему объект можно найти в резервной копии.
Одинаковый ли GUID у элемента в основной базе и в базе филиала?
Одинаковый, если элемент пришёл из основной базы обменом. Если его завели в филиале вручную, GUID будет другим, даже при совпадении кода и наименования.
Подходит ли навигационная ссылка для веб-клиента?
Да. Добавьте её после адреса публикации базы через #, и браузер откроет нужный объект после входа.