В экосистеме 1С:Предприятие уникальная идентификация объектов данных играет критическую роль при построении сложных интеграционных контуров. Разработчикам и администраторам часто необходимо получить не просто ссылку на объект, а ее уникальную строковую форму — УИД (Уникальный Идентификатор), который часто называют GUID или UUID в контексте базы данных. Этот идентификатор позволяет однозначно ссылаться на конкретную запись в регистре, документе или справочнике, независимо от того, в какой информационной базе она физически находится.

Понимание того, как извлечь этот параметр, необходимо для корректной настройки обмена данными между узлами распределенной информационной базы (РИБ), при миграции данных или организации взаимодействия с внешними веб-сервисами. Стандартные механизмы платформы предоставляют несколько способов доступа к этому значению, от простых методов объекта до низкоуровневых запросов. Однако, выбор конкретного метода зависит от контекста задачи и версии используемой платформы.

В этом руководстве мы детально разберем алгоритмы получения УИД ссылки как на уровне встроенного языка, так и через интерфейс конфигуратора. Вы узнаете, как преобразовать стандартную ссылку в строковый формат, пригодный для передачи по сети, и какие подводные камни могут возникнуть при работе с предопределенными элементами.

⚠️ Внимание: УИД ссылки является внутренним системным идентификатором. Его изменение или ручная подмена в базе данных без использования штатных механизмов платформы может привести к нарушению целостности ссылочной целостности и невозможности открытия объектов.

Что такое УИД ссылки и его структура

УИД ссылки представляет собой 16-байтовый бинарный массив, который платформа генерирует автоматически при создании любой новой записи в базе данных. В отличие от кода или наименования, которые пользователь может изменить, этот идентификатор остается неизменным на протяжении всего жизненного цикла объекта. Именно он используется движком СУБД для физического поиска записи в таблицах хранения.

При работе с веб-сервисами или JSON-интерфейсами бинарный формат неудобочитаем, поэтому его принято представлять в виде строки из 32 шестнадцатеричных символов, часто с разделителями (дефисами). Платформа 1С:Предприятие 8 предоставляет встроенные средства для конвертации между этими форматами. Важно понимать, что для предопределенных элементов (например, роль "Администратор" или валюта "Рубль") УИД фиксируется на этапе создания конфигурации и одинаков во всех базах, где используется эта конфигурация.

Структура идентификатора гарантирует глобальную уникальность. Вероятность коллизии (совпадения двух разных УИД) стремится к нулю. Это свойство активно используется при слиянии баз данных или загрузке данных из внешних источников, где коды объектов могут дублироваться, но их уникальные идентификаторы будут различаться.

💡

При отладке интеграций всегда выводите УИД в лог в строковом формате — это упрощает поиск проблемных записей в таблице справочника базы данных напрямую через SQL-клиент.

Получение УИД через встроенный язык 1С

Самый распространенный сценарий — получение идентификатора в коде обработки или модуле объекта. Для этого используется метод УникальныйИдентификатор(), доступный для объектов типа Ссылка. Результатом выполнения метода является объект типа УникальныйИдентификатор, который затем можно преобразовать в строку.

Рассмотрим пример получения строкового представления для элемента справочника "Номенклатура". Сначала мы получаем саму ссылку, затем вызываем метод и приводим результат к строковому типу. Это стандартная практика при формировании пакетов данных для отправки во внешние системы.

СсылкаНаОбъект = Справочники.Номенклатура.НайтиПоНаименованию("Товар А");

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

Возврат "";

КонецЕсли;

// Получаем объект УникальныйИдентификатор

УИД = СсылкаНаОбъект.УникальныйИдентификатор();

// Преобразуем в строку (формат с дефисами)

СтрокаУИД = Строка(УИД);

Сообщить(СтрокаУИД);

Обратите внимание, что формат строки может варьироваться в зависимости от требований принимающей стороны. Стандартный вывод дает формат с дефисами вида xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Если внешняя система требует формат без разделителей, строку необходимо дополнительно обработать функцией СтрЗаменить.

☑️ Алгоритм получения УИД в коде

Выполнено: 0 / 5

Извлечение УИД через запросы к базе данных

В ситуациях, когда требуется получить идентификаторы большого количества объектов за один проход (например, для массовой выгрузки), использование циклов и методов объектов становится неэффективным. В этом случае оптимальным решением является использование языка запросов 1С, который позволяет выбрать поле Ссылка.УникальныйИдентификатор напрямую из таблицы.

Запрос возвращает значение типа УникальныйИдентификатор, которое в результатах запроса можно сразу использовать или конвертировать. Такой подход значительно снижает нагрузку на сервер приложений, так как обработка происходит на стороне СУБД.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| СправочникНоменклатура.Ссылка.УникальныйИдентификатор КАК УИД,

| СправочникНоменклатура.Наименование

|ИЗ

| Справочник.Номенклатура КАК СправочникНоменклатура

|ГДЕ

| НЕ СправочникНоменклатура.ПометкаУдаления";

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

// Выборка.УИД уже содержит объект типа УникальныйИдентификатор

СтрУИД = Строка(Выборка.УИД);

// Дальнейшая обработка..

КонецЦикла;

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

Тип объекта Доступность в запросе Особенности извлечения
Справочник Прямое поле Ссылка.УникальныйИдентификатор Работает для любых элементов, включая группы
Документ Прямое поле Ссылка.УникальныйИдентификатор Идентификатор присваивается при проведении или записи
План счетов Прямое поле Часто используется для предопределенных счетов
Регистр сведений Косвенное (через измерения) Запись регистра сама по себе не имеет отдельного УИД ссылки в классическом понимании
📊 Какой метод получения УИД вы используете чаще?
Через метод объекта в коде
Через запрос к базе данных
Через консоль запросов
Не использую, работаю только с кодами

Работа с предопределенными элементами

Особый класс объектов в конфигурации 1С — это предопределенные элементы. Их УИД жестко зафиксированы в файле конфигурации (.cf или .cfu). Это означает, что при обновлении типовой конфигурации или переносе обработки на другую базу, вы можете жестко задавать эти идентификаторы в коде, не боясь, что они изменятся.

Чтобы узнать УИД предопределенного элемента, не обязательно запускать код. Это можно сделать в режиме Конфигуратора через окно свойств элемента метаданных. Однако, для использования в коде удобнее всего применять конструкцию Справочники.ИмяСправочника.ИмяПредопределенногоЭлемента.

Пример получения УИД для предопределенной валюты:

СсылкаНаРубль = Справочники.Валюты.Рубль;

УИД_Рубль = СсылкаНаРубль.УникальныйИдентификатор();

// Значение будет константой для всех баз с этой конфигурацией

⚠️ Внимание: Если вы вручную создали элемент в базе данных и присвоили ему имя, совпадающее с предопределенным, но не создавали его в конфигураторе, его УИД будет уникальным для этой базы, а не общесистемным. Метаданные имеют приоритет над именами в базе.

Конвертация строки обратно в ссылку

Часто возникает обратная задача: во внешнюю систему пришел строковый УИД, и нам нужно получить по нему объект 1С для записи движений или изменения реквизитов. Платформа позволяет сконструировать объект УникальныйИдентификатор из строки, а затем найти по нему ссылку.

Для этого используется конструктор типа Новый УникальныйИдентификатор(Строка). После получения объекта идентификатора, необходимо выполнить поиск в соответствующем справочнике или документе. Прямое преобразование "строка в ссылку" одним методом невозможно без указания типа объекта.

Алгоритм действий выглядит следующим образом:

  • 🔹 Создать объект УникальныйИдентификатор из входящей строки.
  • 🔹 Определить тип метаданных, к которому относится этот УИД (если он не известен заранее).
  • 🔹 Использовать метод НайтиПоУникальномуИдентификатору() у менеджера соответствующего справочника.
ВходящаяСтрока = "36c83210-5d44-11e5-8b92-00155d020f23";

ОбъектУИД = Новый УникальныйИдентификатор(ВходящаяСтрока);

// Предполагаем, что мы знаем, что это Номенклатура

Ссылка = Справочники.Номенклатура.НайтиПоУникальномуИдентификатору(ОбъектУИД);

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

Сообщить("Объект с таким УИД не найден");

Иначе

Сообщить("Найден объект: " + Ссылка.Наименование);

КонецЕсли;

Что делать, если тип объекта неизвестен?

Если вы получаете УИД извне и не знаете, к какому справочнику он относится, вам придется перебирать все возможные типы справочников и документов в цикле, вызывая для каждого метод НайтиПоУникальномуИдентификатору, пока не будет найден непустой результат. Это ресурсоемкая операция, поэтому лучше передавать тип объекта вместе с УИД во внешнем интерфейсе.

Типичные ошибки и ограничения

При работе с уникальными идентификаторами разработчики часто сталкиваются с рядом типовых проблем. Одна из самых частых — попытка получить УИД у пустой ссылки. Пустая ссылка не имеет идентификатора, и вызов метода вернет null или вызовет ошибку в зависимости от контекста выполнения. Всегда проверяйте ссылку на пустоту перед обращением к свойствам.

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

Также стоит упомянуть ограничение на использование УИД в распределенных информационных базах (РИБ). При обмене между узлами РИД УИД объектов сохраняется, что и обеспечивает корректную сшивку данных. Однако, если объект был создан в узле, а затем удален и создан заново с тем же кодом, его УИД будет другим, что может привести к рассинхронизации, если внешняя система кэшировала старый идентификатор.

💡

УИД ссылки — это неизменяемый "отпечаток пальца" объекта в базе данных. В отличие от кода, он не зависит от логики нумерации и гарантирует уникальность даже при слиянии разных баз.

Можно ли изменить УИД существующего объекта?

Нет, штатными средствами платформы 1С изменить Уникальный Идентификатор уже созданного объекта невозможно. Это фундаментальное свойство, обеспечивающее целостность ссылок. Единственный способ "изменить" его — удалить объект и создать новый, но тогда это будет уже совершенно другая запись с точки зрения системы, даже если код и наименование останутся прежними.

Почему УИД предопределенных элементов совпадает в разных базах?

Потому что они хранятся в файле конфигурации. Когда вы загружаете конфигурацию в базу данных, платформа считывает эти фиксированные значения. Это позволяет разработчикам писать код, который будет работать идентично на любой копии типовой конфигурации, жестко ссылаясь на конкретные элементы (например, "Основной склад").

Влияет ли удаление и восстановление объекта на его УИД?

Да. Если объект был помечен на удаление и физически удален из базы данных, его УИД освобождается. При создании нового объекта (даже с тем же кодом) ему будет присвоен совершенно новый, уникальный УИД. Ссылки на старый объект в других документах станут битыми (ссылаться на несуществующий УИД).

Как получить УИД через OData или HTTP-сервис?

При публикации OData-сервиса или HTTP-сервиса на основе 1С, уникальный идентификатор часто передается в URL или в теле запроса. В настройках публикации можно указать, чтобы ключом сущности выступало свойство Ref_Key (которое часто мапится на УИД) или стандартный код. Для явного получения УИД в JSON ответе нужно добавить соответствующее поле в выборку запроса сервиса.

Совпадает ли УИД в файловой и SQL версии базы?

Да, логика генерации и хранения УИД едина для всех типов СУБД, поддерживаемых платформой 1С (Firebird, MS SQL, PostgreSQL, Oracle и встроенная файловая база). Значение идентификатора зависит только от момента создания объекта и алгоритма генерации платформы, но не от типа хранилища данных.