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

Разработка и Конфигурация · 10 мин

Как получить UID документа в 1С

Как получить UID (GUID) документа в 1С через код, запрос, консоль и внешние инструменты. Примеры на встроенном языке, проверка результата и типичные ошибки.

UID (он же GUID, уникальный идентификатор) документа в 1С — это строка вида «8a3f2c1e-4b5d-4e6f-9a0b-1c2d3e4f5a6b», которую платформа присваивает каждому объекту при создании. Именно по UID, а не по номеру документа, строятся ссылки между базами, работает обмен данными, REST-интерфейс и механизмы синхронизации. Номер документа может совпадать в разных базах и меняться при перенумерации, а UID остаётся неизменным на всём жизненном цикле объекта.

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

Ниже разобраны все рабочие варианты с примерами кода, способами проверки результата и типичными ошибками, из-за которых UID получается «не тот» или не находится в другой базе.

Что такое UID документа и где он хранится

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

Важно различать UID как тип данных и его строковое представление. В коде UID — это значение типа «УникальныйИдентификатор», а в обменах, URL и JSON он передаётся строкой из 36 символов с дефисами. Преобразование между этими формами выполняется функциями Строка() и конструктором Новый УникальныйИдентификатор(СтрокаUID).

Получение UID программно на встроенном языке

Основной способ — метод УникальныйИдентификатор() у ссылки на документ. Если у вас есть переменная со ссылкой, достаточно одной строки:

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

Сообщить(UIDСтрокой);

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

Обратная задача — найти документ по известному UID — решается через метод ПолучитьСсылку менеджера документа:

UID = Новый УникальныйИдентификатор("8a3f2c1e-4b5d-4e6f-9a0b-1c2d3e4f5a6b");

Ссылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(UID);

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

Сообщить("Документ с таким UID не найден");

КонецЕсли;

UID в запросе

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

bsl
UIDСтрокой = Строка(ДокументСсылка.УникальныйИдентификатор());

Как узнать UID без программирования

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

Второй вариант — стандартная обработка «Групповое изменение реквизитов» или специализированные обработки с ИТС, которые показывают служебные свойства ссылки. Третий — посмотреть UID в регистрации обмена: при выгрузке документа через план обмена в файл XML в атрибуте ссылки фигурирует именно уникальный идентификатор.

Наконец, если база опубликована на веб-сервере и включён стандартный OData-интерфейс, UID документа виден прямо в URL при обращении к ресурсу документа, а также в поле Ref_Key при выборке. Это удобно, когда UID нужен для интеграции с внешней системой.

Порядок действий в пользовательском режиме
  1. 1
    Откройте консоль кода или внешнюю обработку с правами на выполнение кода
  2. 2
    Найдите ссылку на документ по номеру и дате через запрос или НайтиПоНомеру
  3. 3
    Выполните Строка(Ссылка.УникальныйИдентификатор()) и выведите результат
  4. 4
    Скопируйте строку из 36 символов и проверьте её обратным поиском через ПолучитьСсылку

Получение UID через запрос и консоль запросов

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

Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг

|ГДЕ Дата МЕЖДУ &Начало И &Конец");

Выборка = Запрос.Выполнить().Выбрать();

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

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

КонецЦикла;

Для массовой выгрузки UID в таблицу значений или CSV добавляйте идентификатор отдельной колонкой — так файл можно напрямую отдать в смежную систему для сопоставления записей.

UID при обмене и интеграциях

В механизмах обмена (планы обмена, EnterpriseData, REST) UID является ключом сопоставления объектов. Когда документ впервые выгружается в другую базу, приёмник ищет объект именно по UID; если находит — обновляет, если нет — создаёт новый с сохранением переданного идентификатора. Поэтому при настройке интеграции важно получать и передавать именно UID, а не номер или представление.

В HTTP-сервисах и OData идентификатор фигурирует как Ref_Key. При формировании ссылки на объект в OData URL UID подставляется в формате guid'8a3f2c1e-...'. Ошибка в регистре символов или лишние пробелы в строке приводят к тому, что объект не находится, хотя визуально идентификатор выглядит верным.

Проверка результата и типичные ошибки

Надёжный способ убедиться, что UID получен правильно, — выполнить обратный поиск: сконструировать УникальныйИдентификатор из строки и через ПолучитьСсылку убедиться, что вернулась та же ссылка с тем же номером и датой. Если объект не найден, либо UID скопирован с ошибкой, либо документ отсутствует в этой базе.

Частая ошибка — путать UID ссылки с «битой ссылкой». Если в другой базе по UID находится объект с представлением «Объект не найден», это значит, что документ был удалён или никогда не переносился. Ещё одна типичная ситуация — попытка получить UID у пустой ссылки: метод вернёт идентификатор из нулей, который бесполезен для поиска.

Типичные ошибки
01
Вызов УникальныйИдентификатор() у пустой ссылки — результат будет состоять из нулей и не найдёт ни один документ
02
Копирование UID из сообщения с потерей символов или пробелами — обратный поиск не сработает, копируйте строку целиком
03
Сравнение строк UID в запросе вместо сравнения ссылок — запрос работает медленнее и чувствителен к регистру
04
Ожидание совпадения UID в базах, между которыми не было обмена — идентификаторы совпадают только после переноса данных
Контрольные точки

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

Длина строки UID
Норма

36 символов с дефисами в формате 8-4-4-4-12

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

Другая длина или отсутствие дефисов — строка скопирована неполностью

Обратный поиск по UID
Норма

ПолучитьСсылку вернула ссылку с тем же номером и датой

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

Объект не найден или вернулась битая ссылка

UID в другой базе
Норма

Документ находится и данные совпадают

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

Объект не найден — обмен не выполнялся или документ удалён

Ограничения и безопасные приёмы работы

Получение UID — безопасная операция чтения, она не изменяет данные. Риск появляется на этапе обратного действия: метод ПолучитьСсылку с параметром UID при последующей записи созданного объекта зафиксирует в базе объект с чужим идентификатором. Это допустимо только при осознанном переносе данных; случайная запись такого объекта может нарушить сопоставление в обменах.

Также учитывайте права доступа: выполнение произвольного кода в консоли требует прав администратора или специально выданных полномочий. В клиент-серверном режиме тяжёлые выборки UID по всем документам выполняйте на сервере и с отбором по периоду, чтобы не нагружать СУБД сканированием всей таблицы.

Итог

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

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

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

Можно ли изменить UID существующего документа?

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

Чем UID отличается от номера документа?

Номер — это пользовательский реквизит, видимый в интерфейсе; он может повторяться в разных базах, обнуляться в новом периоде и меняться при перенумерации. UID — служебный ключ платформы, уникальный и неизменный, именно он используется в ссылках и обменах.

Как получить UID документа, если база файловая и нет конфигуратора?

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

Почему по корректному UID документ не находится в другой базе?

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

Как получить UID сразу для списка документов?

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

Совпадает ли UID в толстом и тонком клиенте, на сервере и в веб-клиенте?

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