Где искать внутренний идентификатор номенклатуры и как превратить его в GUID

· 9 мин

Содержание

Внутренний идентификатор товара (его часто называют GUID или ID) не показывается в карточке номенклатуры как отдельное поле — и это сбивает с толку. В интерфейсе вы видите наименование, артикул и код, а 32-значный идентификатор программа хранит отдельно. Самый быстрый путь к нему — открыть карточку товара и в главном меню выбрать Получить ссылку: часть строки после ref= и есть этот идентификатор.

GUID нужен не каждый день, но в трёх ситуациях без него никак: настройка обмена и интеграции (EnterpriseData, веб-сервисы, OData), обращение в поддержку по конкретному элементу и написание запросов или кода, где товар надо адресовать однозначно. Ниже — четыре рабочих способа получить идентификатор через интерфейс, код, консоль и обмен, плюс разбор, чем код номенклатуры отличается от GUID.

Что вам нужно и каким способом быстрее получить ID?

Что это за идентификатор и почему его нет в карточке

У каждого объекта базы — товара, документа, контрагента — при создании появляется ссылка. Внутри ссылки лежит уникальный идентификатор: 16 байт, которые на экране обычно показывают как строку из 32 шестнадцатеричных символов или как GUID вида a1b2c3d4-5e6f-7890-abcd-ef1234567890.

Этот идентификатор присваивается один раз и не меняется никогда: вы можете переименовать товар, сменить артикул, перенести его в другую группу — GUID останется прежним. Именно поэтому обмены и интеграции опираются на него, а не на наименование.

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

Если вы ищете ID, чтобы сопоставить товары между двумя базами, почти всегда нужен именно GUID, а не код: код в двух базах может совпадать у разных товаров, GUID — нет.

Самый быстрый способ — навигационная ссылка на карточку

Способ работает в любой конфигурации на платформе 8.3 и не требует прав разработчика.

  1. Откройте карточку нужного товара (двойной клик по строке в справочнике Номенклатура).
  2. В интерфейсе «Такси» нажмите кнопку главного меню — она в правом верхнем углу окна, со значком в виде стрелочки рядом с кнопками сворачивания.
  3. Выберите пункт Получить ссылку (в некоторых релизах подпись может отличаться формулировкой).
  4. В открывшемся окне скопируйте строку целиком — она выглядит так:
e1cib/data/Справочник.Номенклатура?ref=8d9f1a2b3c4d5e6f8d9f1a2b3c4d5e6f

Всё, что стоит после ref=, — это внутренний идентификатор товара в шестнадцатеричном виде. Для обращения в поддержку, для команды Перейти по ссылке и для сопоставления этого достаточно.

Навигационная ссылка и канонический GUID — не одна и та же запись одних и тех же байтов. Строка после ref= — это идентификатор в «упакованном» порядке байтов. Если партнёру по обмену нужен именно GUID формата 8-4-4-4-12, получите его кодом (следующий раздел), а не ручной перестановкой символов.

Точный GUID через встроенный язык

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

Для одного товара, который вы уже выбрали в реквизите формы консоли:

Сообщить(Строка(Ссылка.УникальныйИдентификатор()));

Результат в окне сообщений — строка вида a1b2c3d4-5e6f-7890-abcd-ef1234567890. Это и есть GUID.

Если товар надо найти по наименованию и сразу получить его идентификатор, запрос и код умещаются в один фрагмент:

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

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

Оператор ПОДОБНО с шаблоном %молоко% найдёт все товары, в наименовании которых встречается «молоко», и выведет для каждого код, название и GUID одной строкой. Числа и строки здесь не склеиваются неявно — всё приведено к строке через Строка(), поэтому пример отрабатывает целиком.

Обработки «Консоль кода» и «Консоль запросов» — это внешние обработки. Чтобы открыть их в рабочей базе, нужны права на интерактивное открытие внешних отчётов и обработок. Если прав нет — см. раздел про доступ ниже.

Поиск нужного товара в консоли запросов

Консоль запросов удобна не для получения GUID как такового, а для того, чтобы быстро найти конкретный элемент среди тысяч позиций: по части наименования, по коду, по артикулу, по группе или виду номенклатуры.

Типовой сценарий: вы знаете, что товар называется примерно «кабель ВВГ», но в справочнике их два десятка. Запрос отбирает кандидатов:

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

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

💡 Полезные приёмы отбора в консоли:

  • 🔎 ПОДОБНО "%текст%" — поиск по части наименования, когда точное название неизвестно.
  • 🏷️ условие по Код или Артикул — когда ищете по печатной этикетке или прайсу.
  • 📁 условие В ИЕРАРХИИ (&Группа) — выбрать все товары внутри конкретной папки справочника.
  • 🚫 И НЕ ЭтоГруппа — исключить из выдачи сами папки-группы.

Идентификатор через OData и обмены

Если ID нужен для внешней системы — сайта, маркетплейса, CRM, мобильного приложения, — доставать его вручную не придётся: обмен отдаёт GUID сам.

OData (REST-интерфейс.) Когда в базе включена публикация стандартного OData (Администрирование → Печатные формы, отчёты и обработки → Настройка стандартного интерфейса OData, состав указывается в конфигураторе), каталог номенклатуры доступен по HTTP. Запрос вида:

http://сервер/base/odata/standard.odata/Catalog_Номенклатура?$format=json

вернёт по каждому товару поле Ref_Key. Ref_Key в ответе OData — это и есть GUID товара в каноническом формате, готовый к подстановке в адрес: Catalog_Номенклатура(guid'a1b2c3d4-...').

Выгружать весь каталог ради одного товара не нужно. Отбор по наименованию и усечение ответа до нужных полей задаются прямо в адресе:

.../Catalog_Номенклатура?$filter=Description eq 'Молоко 1 л'&$select=Ref_Key,Code,Description&$format=json

Здесь Description — наименование товара, Code — его код, Ref_Key — искомый GUID. Так вы получаете идентификатор конкретной позиции одним запросом, без перебора всего справочника.

EnterpriseData и типовые обмены. В выгрузке по формату EnterpriseData и в сообщениях обмена каждый объект сопровождается своим идентификатором — по нему система-приёмник сопоставляет товары. Если вы разбираете, почему при обмене «задвоился» товар, сравнивайте именно эти идентификаторы, а не наименования.

OData удобен ещё и для разовой проверки: даже если полноценная интеграция не настроена, временной публикации на тестовом сервере хватает, чтобы вытащить Ref_Key нужных позиций.

Через отладчик, если вы в конфигураторе

Способ для разработчика, который и так отлаживает код. Чтобы отладка заработала, в свойствах информационной базы должен быть разрешён режим отладки, а клиент запущен с отладкой.

Поставьте точку останова в месте, где доступна ссылка на товар (например, переменная ТоварСсылка или СтрокаТаблицы.Номенклатура). Когда выполнение остановится:

  • наведите курсор на переменную-ссылку и раскройте её значение, либо
  • нажмите Shift+F9 (вычислить выражение) и введите СтрокаТаблицы.Номенклатура.УникальныйИдентификатор(), либо
  • добавьте то же выражение в Табло.

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

Тот же приём помогает, когда непонятно, какой именно товар подставился в документ: остановитесь на строке табличной части и вычислите УникальныйИдентификатор() у её ссылки. Так вы отличите два внешне одинаковых товара, у которых совпадают наименование и код, но различаются идентификаторы.

Код номенклатуры и GUID — не путайте

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

ПризнакКод номенклатурыGUID (внутренний ID)
Для когодля человекадля программы
Где виденв карточке и спискескрыт, достаётся инструментами
Уникальностьв пределах справочника, можно нарушитьглобальная, гарантирована
Меняется лиможно изменить вручнуюне меняется никогда
Форматнапример 00-0001234a1b2c3d4-5e6f-...
Для чего годитсяпоиск, печать, прайсобмен, интеграция, API

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

Есть и третье понятие — ссылка. Ссылка — это объект внутри 1С, который указывает на товар; GUID — её строковое представление. Когда говорят «передай ID товара», почти всегда имеют в виду именно GUID-строку.

Если кнопки нет: права доступа и ограничения

Чаще всего способ упирается не в незнание, а в права. Разберём типичные случаи.

Диагностика: выберите симптом

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

Прямой запрос к таблицам СУБД (поле _IDRRef в таблице _Reference<N>) теоретически тоже отдаёт идентификатор, но это крайняя мера. Нужен доступ к серверу баз данных, идентификатор лежит в двоичном виде и требует преобразования, а ошибка в SQL-запросе к рабочей базе опасна. Для получения ID этот путь не нужен — хватает способов выше.

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

GUID товара меняется при переименовании или смене артикула?
Нет. Идентификатор присваивается один раз при создании элемента и остаётся неизменным при любом редактировании реквизитов, переносе в другую группу и пометке на удаление.
Можно ли по GUID открыть товар обратно?
Да. Вставьте полную навигационную ссылку e1cib/data/Справочник.Номенклатура?ref=... в команду Перейти по ссылке главного меню — откроется карточка этого товара.
Почему у одинаковых на вид товаров в двух базах разные GUID?
Потому что они созданы независимо в каждой базе. Совпадение наименования и кода не делает GUID одинаковым — именно для их сопоставления и настраивают обмен с таблицей соответствий.
Чем различаются строка после `ref=` и GUID из `УникальныйИдентификатор()`?
Это один и тот же идентификатор, но в разном представлении: в навигационной ссылке байты упакованы в свой порядок, а функция возвращает канонический вид 8-4-4-4-12. Для внешних систем используйте результат функции.
Есть ли идентификатор у группы (папки) номенклатуры?
Да, группа справочника — такой же элемент со своим GUID. Получается теми же способами; в запросе её отбирают условием ЭтоГруппа.