Уникальный идентификатор объекта 1С: где он хранится и пять способов его достать
Содержание
Самый быстрый способ узнать 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
- Откройте карточку элемента справочника или форму документа.
- Нажмите
Shift+F11. - В окне «Ссылка» скопируйте строку целиком.
Часть после 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 «на лету»:
- Запустите отладку (
F5) из Конфигуратора. - Поставьте точку останова в модуле формы или объекта, где доступна переменная со ссылкой.
- Когда выполнение остановится, нажмите
Shift+F9— откроется окно вычисления выражения. - Введите
Строка(Объект.Ссылка.УникальныйИдентификатор())или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) её подключают так:
- Откройте
Администрирование → Печатные формы, отчеты и обработки. - Включите флажок «Дополнительные отчеты и обработки», если он снят.
- Перейдите по ссылке «Дополнительные отчеты и обработки» и нажмите «Добавить из файла».
- Выберите
.epfс кодом из предыдущего раздела.
Права на подключение есть у администратора. После этого обработка запускается из того же раздела и выводит таблицу «наименование → код → GUID».
Подключайте только обработки, код которых вы видели. Внешняя обработка выполняется с правами пользователя и может изменить данные.
Прямой доступ к таблице базы данных через 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 в файловой базе через SQL?
Есть ли GUID у удалённого объекта?
<Объект не найден> с ref в скобках — по нему объект можно найти в резервной копии.Одинаковый ли GUID у элемента в основной базе и в базе филиала?
Подходит ли навигационная ссылка для веб-клиента?
#, и браузер откроет нужный объект после входа.