Где взять внутренний GUID документа или справочника в 1С 8.3
Содержание
Быстрее всего ID объекта в 1С Бухгалтерия находят без программирования: откройте карточку контрагента или документа и нажмите Shift+F11 («Получить ссылку»). В навигационной ссылке после ?ref= стоят 32 шестнадцатеричных символа — это и есть внутренний идентификатор, только с переставленными группами. Ниже показано, как превратить его в привычный GUID вида xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
Частое заблуждение — считать идентификатором поле «Код» справочника или номер документа. Код и номер можно изменить вручную, они повторяются в разных организациях и периодах. Настоящий ID — уникальный идентификатор ссылки (UUID). Его не видно ни на одной форме, но он не меняется за всю жизнь объекта и одинаков в базе-источнике и в базе-приёмнике обмена.
Что такое ID объекта в базе 1С и зачем его искать
Каждый элемент справочника, документ, план видов характеристик и бизнес-процесс в 1С 8.3 хранится как запись с первичным ключом — 16-байтным UUID. На него ссылаются все остальные таблицы: проводки, табличные части, регистры.
Где он нужен на практике:
- 🔄 Обмены и интеграции. Сайт, банк-клиент или внешняя система передают объект по GUID, и нужно найти, какой контрагент у вас скрывается за строкой
5f1d.... - 🛠 Разбор ошибок. В тексте ошибки, в журнале регистрации или в логе сервера фигурирует ссылка вместо наименования.
- 🧾 Обращение к разработчику или в поддержку. Навигационная ссылка точно указывает объект, даже если у вас 15 контрагентов «ООО Ромашка».
- 🗄 Работа с СУБД. Администратор ищет строку в таблице SQL Server или PostgreSQL по ключу.
Одна и та же величина записывается в трёх видах. Это главный источник путаницы:
| Где встречается | Как выглядит | Пример |
|---|---|---|
| GUID в коде и XML | 36 символов с дефисами | a0b1c2d3-e4f5-1234-5678-9abcdef01234 |
| Навигационная ссылка | 32 символа без дефисов, группы переставлены | 56789abcdef012341234e4f5a0b1c2d3 |
Поле _IDRRef в СУБД | двоичные 16 байт, тот же порядок, что в ссылке | 0x56789ABCDEF012341234E4F5A0B1C2D3 |
Порядок перестановки простой. GUID делится на пять групп: x-y-z-a-b. В навигационной ссылке и в базе данных они идут как a b z y x: сначала четвёртая и пятая группы, потом третья, вторая и первая.
Как узнать ID в режиме «Предприятие» без кода
Способ 1. Навигационная ссылка
- Откройте нужный документ, элемент справочника или строку в списке.
- Нажмите
Shift+F11или значок ссылки (цепочка) в заголовке формы. - В окне «Получить ссылку» скопируйте строку целиком.
Получится примерно так:
e1cib/data/Справочник.Контрагенты?ref=56789abcdef012341234e4f5a0b1c2d3
Часть до ?ref= — тип объекта, после — идентификатор. Чтобы собрать GUID, разрежьте 32 символа по позициям:
| Символы ссылки | Длина | Группа GUID |
|---|---|---|
| 25–32 | 8 | первая |
| 21–24 | 4 | вторая |
| 17–20 | 4 | третья |
| 1–4 | 4 | четвёртая |
| 5–16 | 12 | пятая |
Из примера выше выходит a0b1c2d3-e4f5-1234-5678-9abcdef01234.
Обратная операция тоже работает. Получили GUID от внешней системы — переставьте группы, подставьте в шаблон e1cib/data/Справочник.Контрагенты?ref=... и откройте через команду «Перейти по ссылке» в главном меню. Если объект с таким ID есть, откроется его карточка.
Для документов тип в ссылке выглядит как Документ.РеализацияТоваровУслуг, для номенклатуры — Справочник.Номенклатура. Если не знаете точное имя типа, получите ссылку на любой другой объект того же вида и замените хвост после ?ref=.
Способ 2. Выгрузка в XML универсальной обработкой
Когда ID нужен сразу для сотни объектов, вручную резать ссылки неудобно. Подойдёт внешняя обработка выгрузки и загрузки данных в XML — её версия для управляемого интерфейса распространяется вместе с инструментами разработчика 1С.
- Откройте обработку через
Файл → Открыть(на сервере может понадобиться право на открытие внешних обработок). - На вкладке выгрузки отметьте нужный справочник или вид документов, при желании наложите отбор.
- Выгрузите файл и откройте его в любом текстовом редакторе.
В XML ссылки записаны в виде обычного GUID с дефисами — обычно в элементе Ref. Рядом стоят наименование, код и ИНН, так что сопоставить объекты легко. Выгрузка ничего не меняет в базе: это только чтение.
Способ 3. Обработки и функции технического специалиста
В БП 3.0 часть служебных инструментов скрыта. Их открывают через Администрирование → Обслуживание → Служебные → Функции для технического специалиста или через команду «Все функции» (её включают в Главное меню → Сервис → Параметры, флажок «Отображать команду “Все функции”»).
Там же стоит искать обработки регистрации изменений для планов обмена. Они показывают, какие объекты зарегистрированы к отправке в узел, и помогают связать ссылку из ошибки обмена с конкретным документом. Сам GUID удобнее брать первыми двумя способами.
Получаем уникальный идентификатор через консоль запросов и код
Язык запросов 1С не умеет выводить UUID напрямую: в результате запроса вы увидите представление ссылки, то есть наименование или «Реализация 0000-000123 от…». Поэтому запрос выбирает ссылки, а идентификатор достаёт встроенный язык — метод УникальныйИдентификатор().
Подойдёт любая консоль, которая умеет выполнять произвольный код: консоль запросов с обработкой результата или консоль кода из инструментов разработчика. Пример для поиска контрагентов по ИНН:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ИНН = &ИНН";
Запрос.УстановитьПараметр("ИНН", "7700000000");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование + " — " + Строка(Выборка.Ссылка.УникальныйИдентификатор()));
Сообщить(ПолучитьНавигационнуюСсылку(Выборка.Ссылка));
КонецЦикла;
Код печатает и GUID, и навигационную ссылку — сразу видно, как одно соотносится с другим.
Обратная задача: найти объект по GUID
Внешняя система прислала идентификатор, и нужно понять, что это за объект:
УИД = Новый УникальныйИдентификатор("a0b1c2d3-e4f5-1234-5678-9abcdef01234");
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(УИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объекта с таким ID в справочнике нет");
Иначе
Сообщить("Найден: " + Строка(Ссылка));
КонецЕсли;
Метод ПолучитьСсылку() возвращает ссылку всегда, даже на несуществующий объект. Поэтому проверка через ПолучитьОбъект() обязательна. Без неё в отчётах появится «<Объект не найден> (56789abc…)», и это не значит, что объект где-то спрятан.
Если неизвестно, к какому справочнику относится GUID, придётся перебрать вероятные: контрагенты, договоры, номенклатура, физлица. Для документов используйте Документы.<Имя>.ПолучитьСсылку() так же.
Как перевести GUID в формат навигационной ссылки кодом
Функция ГУИДвФорматСсылки(УИД)
С = СтрЗаменить(Строка(УИД), "-", "");
Возврат Сред(С, 17, 16) + Сред(С, 13, 4) + Сред(С, 9, 4) + Сред(С, 1, 8);
КонецФункции
Без дефисов GUID занимает 32 символа: первая группа — позиции 1–8, вторая — 9–12, третья — 13–16, четвёртая и пятая — 17–32. Функция собирает их в порядке a b z y x.
Как посмотреть идентификатор в Конфигураторе
В Конфигураторе нет окна со списком GUID объектов данных. Идентификатор смотрят в отладчике, пока работает код.
- Откройте базу в Конфигураторе и запустите её в режиме отладки (
F5). - Поставьте точку останова в модуле формы или объекта, например в обработчике
ПриОткрытии. - В «Предприятии» откройте нужный документ — выполнение остановится.
- Откройте окно вычисления выражения (
Shift+F9) и введитеОбъект.Ссылка.УникальныйИдентификатор().
Отладку и изменения модулей делайте на копии базы. В рабочей базе типовой конфигурации на поддержке правка модуля ради точки останова может снять объект с поддержки и усложнить обновления.
Второй полезный инструмент — функция ПолучитьСтруктуруХраненияБазыДанных(). Она возвращает таблицу соответствия объектов метаданных и физических таблиц: например, что Справочник.Контрагенты хранится в _Reference42, а его ссылка — в поле _IDRRef. Номер таблицы в каждой базе свой, поэтому брать его из чужих примеров нельзя.
Структура = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из Структура Цикл
Если Строка.Метаданные = "Справочник.Контрагенты" Тогда
Сообщить(Строка.Метаданные + " → " + Строка.ИмяТаблицыХранения);
КонецЕсли;
КонецЦикла;
Поиск ID в таблицах СУБД
В клиент-серверной базе идентификатор можно найти прямо в SQL Server или PostgreSQL. Это работа администратора, а не бухгалтера.
Только чтение. Любые UPDATE и DELETE в таблицах 1С в обход платформы ломают целостность данных и нарушают условия использования платформы. Запросы лучше выполнять на копии базы.
Пример для SQL Server — найти контрагента и сразу показать GUID в привычном виде:
SELECT
t._Description AS Наименование,
LOWER(SUBSTRING(t.h, 25, 8) + '-' + SUBSTRING(t.h, 21, 4) + '-' +
SUBSTRING(t.h, 17, 4) + '-' + SUBSTRING(t.h, 1, 4) + '-' +
SUBSTRING(t.h, 5, 12)) AS GUID
FROM (
SELECT _Description, CONVERT(varchar(32), _IDRRef, 2) AS h
FROM _Reference42
) t
WHERE t._Description LIKE N'%Ромашка%';
CONVERT(..., 2) превращает двоичное поле в 32 шестнадцатеричных символа без префикса 0x. Дальше — та же перестановка групп, что и для навигационной ссылки. Имя _Reference42 замените на то, что выдала ПолучитьСтруктуруХраненияБазыДанных().
ID в техжурнале, журнале регистрации и логах
Иногда объект известен только по следу в логах: упал обмен, долгий запрос, блокировка.
Журнал регистрации
Откройте Администрирование → Обслуживание → Журнал регистрации. В колонке «Данные» стоит представление объекта, а двойной щелчок по событию открывает его подробности. Если объект существует, из события можно перейти к нему и уже там взять навигационную ссылку через Shift+F11. Отбор по данным помогает найти все изменения конкретного документа.
Технологический журнал
Техжурнал включают файлом logcfg.xml в каталоге conf платформы (например, C:\Program Files\1cv8\conf\). Минимальная настройка для перехвата SQL-запросов:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\techlog" history="2">
<event>
<eq property="name" value="DBMSSQL"/>
</event>
<property name="all"/>
</log>
</config>
В тексте запросов ссылки встречаются как 0x56789ABCDEF012341234E4F5A0B1C2D3 — это _IDRRef в двоичном виде. Уберите 0x и переведите в GUID по таблице позиций из первого способа.
На нагруженном сервере техжурнал с property name="all" за час набирает гигабайты. Включайте его на короткое время, следите за местом на диске и удаляйте logcfg.xml сразу после сбора данных. Перезапускать службу не требуется: платформа перечитывает файл сама примерно за минуту.
Частые ошибки при работе с идентификаторами
- ❌ Путают код и ID. Код «00-000123» в двух базах может принадлежать разным контрагентам. Сопоставлять объекты между базами надёжнее по GUID или по ИНН + КПП.
- ❌ Вставляют навигационный hex в
Новый УникальныйИдентификатор(). Строка из ссылки без перестановки групп даст GUID другого, обычно несуществующего объекта. Ошибки не будет — будет пустой результат. - ❌ Верят, что ссылка «нашлась».
ПолучитьСсылку()не проверяет существование. Проверяйте черезПолучитьОбъект()или запросом с отбором по ссылке. - ❌ Копируют номер таблицы
_Reference42из интернета. Номера таблиц назначаются при создании структуры каждой базы. - ❌ Ищут ID у строки табличной части. У строк товаров в документе собственного GUID нет: они идентифицируются ссылкой документа и номером строки.
- ❌ Ждут, что GUID сохранится при копировании. Команда «Скопировать» (
F9) создаёт новый объект с новым идентификатором. GUID переносится только обменом или загрузкой XML.
Частые вопросы
Меняется ли ID после перепроведения или переименования?
Совпадают ли ID в файловой и серверной версии одной базы?
Можно ли задать свой GUID новому объекту?
УстановитьСсылкуНового() до первой записи объекта. Так поступают интеграции, чтобы GUID совпадал с внешней системой.Есть ли ID у записей регистров?
Что отправлять в поддержку вместо скриншота?
Shift+F11. По ней разработчик откроет тот же объект в копии вашей базы.