Где искать внутренний идентификатор номенклатуры и как превратить его в GUID
Содержание
Внутренний идентификатор товара (его часто называют GUID или ID) не показывается в карточке номенклатуры как отдельное поле — и это сбивает с толку. В интерфейсе вы видите наименование, артикул и код, а 32-значный идентификатор программа хранит отдельно. Самый быстрый путь к нему — открыть карточку товара и в главном меню выбрать Получить ссылку: часть строки после ref= и есть этот идентификатор.
GUID нужен не каждый день, но в трёх ситуациях без него никак: настройка обмена и интеграции (EnterpriseData, веб-сервисы, OData), обращение в поддержку по конкретному элементу и написание запросов или кода, где товар надо адресовать однозначно. Ниже — четыре рабочих способа получить идентификатор через интерфейс, код, консоль и обмен, плюс разбор, чем код номенклатуры отличается от GUID.
Получить ссылку. Идентификатор — в строке после ref=.Строка(Ссылка.УникальныйИдентификатор()) — вернёт чистый GUID.УникальныйИдентификатор() в цикле.Ref_Key в ответе и есть GUID товара.Что это за идентификатор и почему его нет в карточке
У каждого объекта базы — товара, документа, контрагента — при создании появляется ссылка. Внутри ссылки лежит уникальный идентификатор: 16 байт, которые на экране обычно показывают как строку из 32 шестнадцатеричных символов или как GUID вида a1b2c3d4-5e6f-7890-abcd-ef1234567890.
Этот идентификатор присваивается один раз и не меняется никогда: вы можете переименовать товар, сменить артикул, перенести его в другую группу — GUID останется прежним. Именно поэтому обмены и интеграции опираются на него, а не на наименование.
В карточке номенклатуры идентификатор не выводят сознательно: пользователю он не нужен, а место на форме ограничено. Поэтому его достают отдельными инструментами — их и разберём.
Если вы ищете ID, чтобы сопоставить товары между двумя базами, почти всегда нужен именно GUID, а не код: код в двух базах может совпадать у разных товаров, GUID — нет.
Самый быстрый способ — навигационная ссылка на карточку
Способ работает в любой конфигурации на платформе 8.3 и не требует прав разработчика.
- Откройте карточку нужного товара (двойной клик по строке в справочнике
Номенклатура). - В интерфейсе «Такси» нажмите кнопку главного меню — она в правом верхнем углу окна, со значком в виде стрелочки рядом с кнопками сворачивания.
- Выберите пункт
Получить ссылку(в некоторых релизах подпись может отличаться формулировкой). - В открывшемся окне скопируйте строку целиком — она выглядит так:
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-0001234 | a1b2c3d4-5e6f-... |
| Для чего годится | поиск, печать, прайс | обмен, интеграция, API |
Простое правило: для обмена и интеграции используйте GUID, код для этого не предназначен. Код может совпасть у двух товаров в разных базах или даже оказаться пустым, GUID уникален всегда. Наоборот, показывать GUID пользователю или печатать его на этикетке бессмысленно — там работает код.
Есть и третье понятие — ссылка. Ссылка — это объект внутри 1С, который указывает на товар; GUID — её строковое представление. Когда говорят «передай ID товара», почти всегда имеют в виду именно GUID-строку.
Если кнопки нет: права доступа и ограничения
Чаще всего способ упирается не в незнание, а в права. Разберём типичные случаи.
Общий принцип: получить GUID — операция чтения, она ничего не меняет в базе. Поэтому безопаснее всего дать пользователю отдельную роль «только чтение» нужного справочника, чем выдавать полный административный доступ ради одного идентификатора.
Прямой запрос к таблицам СУБД (поле _IDRRef в таблице _Reference<N>) теоретически тоже отдаёт идентификатор, но это крайняя мера. Нужен доступ к серверу баз данных, идентификатор лежит в двоичном виде и требует преобразования, а ошибка в SQL-запросе к рабочей базе опасна. Для получения ID этот путь не нужен — хватает способов выше.
Частые вопросы
GUID товара меняется при переименовании или смене артикула?
Можно ли по GUID открыть товар обратно?
e1cib/data/Справочник.Номенклатура?ref=... в команду Перейти по ссылке главного меню — откроется карточка этого товара.Почему у одинаковых на вид товаров в двух базах разные GUID?
Чем различаются строка после `ref=` и GUID из `УникальныйИдентификатор()`?
Есть ли идентификатор у группы (папки) номенклатуры?
ЭтоГруппа.