Справочники и Данные · 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 не найден");
КонецЕсли;
- 1Откройте базу через веб-клиент в браузере
- 2Перейдите в справочник «Номенклатура» и откройте карточку нужного товара
- 3Посмотрите адресную строку браузера — в URL после параметра ref будет идентификатор элемента
- 4Скопируйте значение и при необходимости приведите его к стандартному виду с дефисами
Для чего идентификатор используется на практике
Главный сценарий — обмен данными между конфигурациями. При синхронизации «Управления торговлей» и «Бухгалтерии» товары сопоставляются по GUID: если в обеих базах элемент создан независимо, у него будут разные идентификаторы, и типовой обмен создаст дубль, пока сопоставление не выполнено вручную или по правилам поиска (по коду, наименованию, артикулу).
Второй сценарий — интеграция с сайтом и внешними системами. При выгрузке каталога в формате CommerceML идентификатор товара в XML — это именно GUID из 1С. Интернет-магазин запоминает его и при последующих обменах обновляет именно этот товар. Если товар в 1С удалили и создали заново, на сайте появится дубль карточки.
Третий сценарий — отчёты и обработки, где нужно жёстко зафиксировать конкретный объект независимо от переименований. Ссылка по GUID устойчива к любым правкам реквизитов, поэтому внешние обработки и расширения часто хранят настройки именно в виде идентификаторов.
Способы поиска номенклатуры при обмене
Самый надёжный способ: ссылка однозначна. Ограничение — работает, только если объект создан в одной из баз и перенесён обменом, а не заведён вручную в каждой.
Подходит для баз с централизованным присвоением кодов. Ломается, если коды редактируют вручную или в базах разные префиксы.
Резервный вариант для первичного сопоставления. Риск: незначительные различия в написании дают дубли.
Типичные проблемы: дубли, битые ссылки, рассинхронизация
Самая распространённая жалоба — «после обмена товары задвоились». Причина почти всегда одна: один и тот же товар завели вручную в обеих базах, у него два разных GUID, а правила поиска в настройках синхронизации не сработали. Лечение — ручное сопоставление в регистре соответствия объектов (в типовых конфигурациях это доступно в настройках синхронизации данных) и удаление лишнего дубля после переноса ссылок.
Вторая проблема — «битая ссылка»: объект с известным GUID удалён, и внешняя система при обращении получает пустоту. В базе такие ссылки отображаются как «Объект не найден». Проверить наличие элемента до обращения к его реквизитам — обязательное правило при разработке.
Как проверить корректность работы с идентификаторами
После настройки обмена или загрузки данных проверьте результат на контрольном примере. Возьмите 2–3 товара, измените в одной базе их наименование и артикул, выполните синхронизацию и убедитесь, что во второй базе обновились те же элементы, а не появились новые. Это подтверждает, что сопоставление идёт по GUID.
Для интеграции с сайтом контрольная точка — совпадение идентификатора в XML-файле выгрузки с GUID элемента в базе. Откройте файл выгрузки в текстовом редакторе, найдите блок товара и сравните значение поля «Ид» с идентификатором, полученным через консоль кода.
Как проверить результат
После синхронизации количество товаров не выросло, изменения попали в существующие карточки
Появились дубли с похожими наименованиями
Ид в XML совпадает с GUID элемента в базе, повторная выгрузка обновляет товар
На сайте создаётся новая карточка при каждом обмене
ПолучитьСсылку возвращает существующий объект
ПолучитьОбъект возвращает Неопределено — ссылка битая
Ограничения и когда GUID не поможет
GUID идентифицирует объект только в пределах одной информационной базы. Одна и та же номенклатура в двух независимо созданных базах будет иметь разные идентификаторы, и никакая настройка не сделает их одинаковыми постфактум — только сопоставление. Поэтому при запуске новой базы-приёмника правильная стратегия — первичная выгрузка из базы-источника, а не ручное заведение справочника.
Также GUID не заменяет учётную аналитику: штрихкоды, артикулы и коды ТН ВЭД решают свои задачи, и для поиска товара «человеком» удобнее именно они. Идентификатор — инструмент машинной адресации, и работать с ним в повседневном учёте пользователю не нужно.
Что важно запомнить
GUID номенклатуры — неизменный системный ключ элемента, присваиваемый при создании. Он обеспечивает сопоставление товаров при обменах и интеграциях. Узнать его можно через веб-клиент, консоль кода или файл выгрузки. Главные правила: не удалять и не пересоздавать товары, участвующие в обмене, и не заводить один и тот же товар вручную в разных базах.
Частые вопросы
Можно ли изменить GUID существующего элемента номенклатуры?
Штатными средствами — нет, платформа не даёт редактировать уникальный идентификатор. Существуют обходные программные приёмы через установку ссылки новому объекту, но это рискованная операция, нарушающая ссылочную целостность, и применять её стоит только в тестовой копии с чётким пониманием последствий.
Почему после обмена появились дубли товаров?
Почти всегда причина в том, что товар был создан независимо в обеих базах и имеет два разных GUID, а правила поиска по наименованию или коду не сработали из-за различий в написании. Откройте настройки синхронизации, выполните сопоставление вручную, перенесите ссылки на один элемент и удалите лишний дубль.
Как найти товар в базе, если известен только его GUID из XML-файла?
Используйте консоль кода: создайте значение типа УникальныйИдентификатор из строки и вызовите метод ПолучитьСсылку у менеджера справочника «Номенклатура». Обязательно проверьте, что объект существует, прежде чем обращаться к его реквизитам.
Совпадает ли идентификатор в выгрузке CommerceML с GUID в базе?
Да, в типовых механизмах обмена с сайтом в поле «Ид» товара подставляется именно GUID элемента справочника. Поэтому интернет-магазин корректно обновляет существующие карточки, пока товар не был удалён и создан заново.
Что произойдёт с GUID при переносе базы с файлового варианта на сервер?
Ничего: идентификаторы хранятся внутри данных и при корректной загрузке-выгрузке через dt или при переносе средствами СУБД сохраняются полностью. Меняется только способ хранения, сами ссылки остаются прежними.
Можно ли искать номенклатуру по GUID в запросе?
В языке запросов нет функции преобразования строки в уникальный идентификатор, поэтому напрямую передать GUID-строку в условие нельзя. Стандартный подход — сначала получить ссылку методом ПолучитьСсылку во встроенном языке, а уже её передать в запрос параметром.