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