К статье
Практический материал

Справочники и Данные · 10 мин

Уникальный идентификатор номенклатуры в 1С 8.3: что это и как с ним работать

Что такое уникальный идентификатор (GUID) номенклатуры в 1С 8.3, где он хранится, как получить его через запрос и для чего используется при обмене данными.

Уникальный идентификатор номенклатуры в 1С 8.3 — это внутренний технический ключ, который платформа автоматически присваивает каждому элементу справочника «Номенклатура» при его создании. Он не виден в стандартном интерфейсе списка товаров, не совпадает с кодом или артикулом и нужен в первую очередь для однозначной идентификации объекта при обмене данными между базами, интеграции с сайтом и программной разработке.

Идентификатор имеет формат GUID — строку из 32 шестнадцатеричных символов, обычно записываемую через дефисы, например 8a3f2c1d-4e5b-11ec-9d03-0242ac120003. В отличие от кода элемента, который пользователь может изменить, GUID остаётся неизменным на протяжении всей жизни объекта: переименование товара, смена группы, правка артикула на него не влияют.

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

Что такое уникальный идентификатор и чем он отличается от кода и артикула

В справочнике «Номенклатура» одновременно существует несколько способов адресации одного и того же товара, и их часто путают. Код — это порядковый номер элемента, который платформа присваивает автоматически, но пользователь с правами может его изменить. Артикул — произвольный реквизит, заполняемый вручную. Уникальный идентификатор — системное значение, которое генерируется один раз при записи нового объекта и недоступно для редактирования штатными средствами.

Именно GUID используется платформой как «истинное имя» объекта. Когда две базы обмениваются данными, сопоставление товаров идёт по идентификатору, а не по наименованию: два товара с одинаковым названием «Кабель ВВГ 3х2,5» останутся разными объектами, потому что их GUID различаются. На этом принципе построены планы обмена, COM-соединения и механизмы ссылочной целостности.

Где и как платформа хранит идентификатор

GUID хранится внутри ссылки на объект и не является отдельным реквизитом справочника. Поэтому в карточке товара и в форме списка вы его не увидите — для просмотра нужны специальные инструменты. В файловой базе идентификатор физически присутствует в служебных полях таблиц, в клиент-серверном варианте — в поле ссылки соответствующей таблицы SQL или PostgreSQL.

Важно понимать: при удалении элемента и создании нового с тем же наименованием GUID будет другим. Восстановить прежний идентификатор штатно нельзя. Это одна из причин, почему помечать объекты на удаление и затем удалять их следует осознанно, особенно если база участвует в обменах.

Как узнать GUID элемента номенклатуры

Самый простой способ для пользователя без прав разработчика — открыть карточку товара и посмотреть на адресную строку при работе через веб-клиент: в URL присутствует параметр с идентификатором. В тонком клиенте этот приём не работает, поэтому чаще используют программные методы.

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

ТоварСсылка = Справочники.Номенклатура.НайтиПоКоду("000000123");

Если Не ТоварСсылка.Пустая() Тогда

ГУИД = ТоварСсылка.УникальныйИдентификатор();

Сообщить(ГУИД);

КонецЕсли;

Обратная задача — найти элемент по известному GUID — решается методом ПолучитьСсылку. Это стандартный приём при загрузке данных из внешних систем, где товар идентифицируется именно идентификатором:

ГУИД = Новый УникальныйИдентификатор("8a3f2c1d-4e5b-11ec-9d03-0242ac120003");

ТоварСсылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);

Если ТоварСсылка.ПолучитьОбъект() = Неопределено Тогда

Сообщить("Элемент с таким GUID не найден");

КонецЕсли;

Как узнать GUID без программирования
  1. 1
    Откройте базу через веб-клиент в браузере
  2. 2
    Перейдите в справочник «Номенклатура» и откройте карточку нужного товара
  3. 3
    Посмотрите адресную строку браузера — в URL после параметра ref будет идентификатор элемента
  4. 4
    Скопируйте значение и при необходимости приведите его к стандартному виду с дефисами

Для чего идентификатор используется на практике

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

Второй сценарий — интеграция с сайтом и внешними системами. При выгрузке каталога в формате CommerceML идентификатор товара в XML — это именно GUID из 1С. Интернет-магазин запоминает его и при последующих обменах обновляет именно этот товар. Если товар в 1С удалили и создали заново, на сайте появится дубль карточки.

Третий сценарий — отчёты и обработки, где нужно жёстко зафиксировать конкретный объект независимо от переименований. Ссылка по GUID устойчива к любым правкам реквизитов, поэтому внешние обработки и расширения часто хранят настройки именно в виде идентификаторов.

Способы поиска номенклатуры при обмене

По GUID

Самый надёжный способ: ссылка однозначна. Ограничение — работает, только если объект создан в одной из баз и перенесён обменом, а не заведён вручную в каждой.

По коду

Подходит для баз с централизованным присвоением кодов. Ломается, если коды редактируют вручную или в базах разные префиксы.

По наименованию и артикулу

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

Типичные проблемы: дубли, битые ссылки, рассинхронизация

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

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

Типичные ошибки
01
Заводить один и тот же товар вручную в обеих базах — получаете два разных GUID и дубль при первом же обмене
02
Удалять и пересоздавать товар «для чистоты» — GUID меняется, сайт или вторая база теряют связь с объектом
03
Использовать код или наименование как ключ интеграции — редактирование реквизита ломает связь
04
Искать элемент по GUID без проверки существования объекта — обращение к удалённой ссылке вызывает ошибки в обработках

Как проверить корректность работы с идентификаторами

После настройки обмена или загрузки данных проверьте результат на контрольном примере. Возьмите 2–3 товара, измените в одной базе их наименование и артикул, выполните синхронизацию и убедитесь, что во второй базе обновились те же элементы, а не появились новые. Это подтверждает, что сопоставление идёт по GUID.

Для интеграции с сайтом контрольная точка — совпадение идентификатора в XML-файле выгрузки с GUID элемента в базе. Откройте файл выгрузки в текстовом редакторе, найдите блок товара и сравните значение поля «Ид» с идентификатором, полученным через консоль кода.

Контрольные точки

Как проверить результат

Сопоставление при обмене
Норма

После синхронизации количество товаров не выросло, изменения попали в существующие карточки

Тревожный признак

Появились дубли с похожими наименованиями

Выгрузка на сайт
Норма

Ид в XML совпадает с GUID элемента в базе, повторная выгрузка обновляет товар

Тревожный признак

На сайте создаётся новая карточка при каждом обмене

Поиск по GUID в коде
Норма

ПолучитьСсылку возвращает существующий объект

Тревожный признак

ПолучитьОбъект возвращает Неопределено — ссылка битая

Ограничения и когда GUID не поможет

GUID идентифицирует объект только в пределах одной информационной базы. Одна и та же номенклатура в двух независимо созданных базах будет иметь разные идентификаторы, и никакая настройка не сделает их одинаковыми постфактум — только сопоставление. Поэтому при запуске новой базы-приёмника правильная стратегия — первичная выгрузка из базы-источника, а не ручное заведение справочника.

Также GUID не заменяет учётную аналитику: штрихкоды, артикулы и коды ТН ВЭД решают свои задачи, и для поиска товара «человеком» удобнее именно они. Идентификатор — инструмент машинной адресации, и работать с ним в повседневном учёте пользователю не нужно.

Итог

Что важно запомнить

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

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

Можно ли изменить GUID существующего элемента номенклатуры?

Штатными средствами — нет, платформа не даёт редактировать уникальный идентификатор. Существуют обходные программные приёмы через установку ссылки новому объекту, но это рискованная операция, нарушающая ссылочную целостность, и применять её стоит только в тестовой копии с чётким пониманием последствий.

Почему после обмена появились дубли товаров?

Почти всегда причина в том, что товар был создан независимо в обеих базах и имеет два разных GUID, а правила поиска по наименованию или коду не сработали из-за различий в написании. Откройте настройки синхронизации, выполните сопоставление вручную, перенесите ссылки на один элемент и удалите лишний дубль.

Как найти товар в базе, если известен только его GUID из XML-файла?

Используйте консоль кода: создайте значение типа УникальныйИдентификатор из строки и вызовите метод ПолучитьСсылку у менеджера справочника «Номенклатура». Обязательно проверьте, что объект существует, прежде чем обращаться к его реквизитам.

Совпадает ли идентификатор в выгрузке CommerceML с GUID в базе?

Да, в типовых механизмах обмена с сайтом в поле «Ид» товара подставляется именно GUID элемента справочника. Поэтому интернет-магазин корректно обновляет существующие карточки, пока товар не был удалён и создан заново.

Что произойдёт с GUID при переносе базы с файлового варианта на сервер?

Ничего: идентификаторы хранятся внутри данных и при корректной загрузке-выгрузке через dt или при переносе средствами СУБД сохраняются полностью. Меняется только способ хранения, сами ссылки остаются прежними.

Можно ли искать номенклатуру по GUID в запросе?

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