Где взять внутренний GUID документа или справочника в 1С 8.3

· 9 мин

Содержание

Быстрее всего 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 в коде и XML36 символов с дефисамиa0b1c2d3-e4f5-1234-5678-9abcdef01234
Навигационная ссылка32 символа без дефисов, группы переставлены56789abcdef012341234e4f5a0b1c2d3
Поле _IDRRef в СУБДдвоичные 16 байт, тот же порядок, что в ссылке0x56789ABCDEF012341234E4F5A0B1C2D3

Порядок перестановки простой. GUID делится на пять групп: x-y-z-a-b. В навигационной ссылке и в базе данных они идут как a b z y x: сначала четвёртая и пятая группы, потом третья, вторая и первая.

Как узнать ID в режиме «Предприятие» без кода

Способ 1. Навигационная ссылка

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

Получится примерно так:

e1cib/data/Справочник.Контрагенты?ref=56789abcdef012341234e4f5a0b1c2d3

Часть до ?ref= — тип объекта, после — идентификатор. Чтобы собрать GUID, разрежьте 32 символа по позициям:

Символы ссылкиДлинаГруппа GUID
25–328первая
21–244вторая
17–204третья
1–44четвёртая
5–1612пятая

Из примера выше выходит a0b1c2d3-e4f5-1234-5678-9abcdef01234.

Обратная операция тоже работает. Получили GUID от внешней системы — переставьте группы, подставьте в шаблон e1cib/data/Справочник.Контрагенты?ref=... и откройте через команду «Перейти по ссылке» в главном меню. Если объект с таким ID есть, откроется его карточка.

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

Способ 2. Выгрузка в XML универсальной обработкой

Когда ID нужен сразу для сотни объектов, вручную резать ссылки неудобно. Подойдёт внешняя обработка выгрузки и загрузки данных в XML — её версия для управляемого интерфейса распространяется вместе с инструментами разработчика 1С.

  1. Откройте обработку через Файл → Открыть (на сервере может понадобиться право на открытие внешних обработок).
  2. На вкладке выгрузки отметьте нужный справочник или вид документов, при желании наложите отбор.
  3. Выгрузите файл и откройте его в любом текстовом редакторе.

В 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 объектов данных. Идентификатор смотрят в отладчике, пока работает код.

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