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

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

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

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

GUID (глобальный уникальный идентификатор) документа в 1С — это 36-символьная строка вида «8a3f5c2e-…», которая однозначно определяет объект в базе. Он нужен при обмене данными между базами, интеграции с внешними системами, поиске «потерянных» объектов и отладке синхронизаций. В отличие от номера документа, GUID никогда не меняется и не повторяется даже между разными базами.

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

Что такое GUID в 1С и когда он нужен

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

На практике GUID чаще всего требуется в четырёх ситуациях: при настройке обмена между базами (например, УТ и БП), при интеграции с сайтом или внешним ПО через HTTP-сервисы и OData, при поиске объекта по ссылке из лога обмена, а также при восстановлении «битых» ссылок вида «Объект не найден».

Получение GUID через встроенный язык

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

ДокСсылка = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("000000001", ТекущаяДата());

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

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

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

КонецЕсли;

Метод возвращает значение типа УникальныйИдентификатор, а не строку. Чтобы получить строку для передачи во внешнюю систему, используйте функцию Строка() или XML-представление. Важно: метод работает только со ссылкой — у объекта (ДокументОбъект) сначала нужно взять свойство Ссылка.

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

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

Получение GUID через запрос

В языке запросов нет функции, напрямую возвращающей GUID, но ссылку можно выбрать и затем получить идентификатор в обходке результата:

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

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

|ГДЕ Номер = &Номер";

Запрос.УстановитьПараметр("Номер", "000000001");

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

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

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

КонецЦикла;

Для массового получения GUID (например, выгрузка списка документов во внешнюю систему) этот подход оптимален: один запрос выбирает ссылки, а преобразование в строку выполняется в цикле без обращений к объектам.

Быстрые способы без написания обработок

Консоль кода и внешние обработки

Если под рукой есть консоль кода (входит во многие инструменты разработчика, например в «Инструменты разработчика»), достаточно выполнить одну строку с поиском документа и выводом идентификатора. Это самый быстрый путь для разовой задачи.

Стандартная функция «Получить GUID ссылки»

В типовых конфигурациях на БСП (Библиотека стандартных подсистем) есть общий модуль ОбщегоНазначения с функциями работы со ссылками. Кроме того, в некоторых типовых решениях GUID виден в форме объекта через «Ещё → Техническая информация» — доступность зависит от конфигурации и прав пользователя.

Через OData и веб-интерфейс

Если публикация OData включена, ссылка на документ в ответе сервиса содержит идентификатор в виде guid'8a3f5c2e-...'. Это удобный способ получить GUID извне без доступа к конфигуратору.

Сравнение способов

Код через УникальныйИдентификатор()

Универсально и точно, но требует права на выполнение кода и знания встроенного языка.

Консоль кода / ИР

Быстро для разовых задач, нужна установленная внешняя обработка и права.

OData / HTTP-сервис

Подходит для внешних систем, но требует публикации и настройки аутентификации.

Техническая информация в форме

Без кода, но доступно не во всех конфигурациях и не всем ролям.

Обратная задача: найти документ по GUID

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

СтрокаГУИД = "8a3f5c2e-1234-5678-9abc-def012345678";

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

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

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

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

Иначе

Сообщить("Документ с таким GUID отсутствует");

КонецЕсли;

Если тип документа неизвестен, придётся перебрать все виды документов через метаданные или использовать поиск по ссылке в типовой обработке «Поиск и удаление дублей» и универсальных подборах. Учтите: ПолучитьСсылку() вернёт ссылку даже на несуществующий объект — проверка через ПолучитьОбъект() обязательна.

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

Первая частая ошибка — попытка вызвать УникальныйИдентификатор() у объекта, а не у ссылки. У ДокументОбъект этого метода нет, берите Объект.Ссылка.УникальныйИдентификатор(). Вторая — передача GUID в запрос строкой: запрос не сравнит ссылку со строкой, сначала преобразуйте строку в тип УникальныйИдентификатор и получите ссылку.

Третья ошибка связана с представлением GUID в SQL. В таблицах MS SQL идентификатор хранится в перевёрнутом (переставленном по байтам) виде, поэтому строка из запроса к СУБД не совпадёт со строкой в 1С. Для сопоставления нужны специальные функции преобразования — прямое сравнение строк даст ложный результат.

Типичные ошибки
01
Вызов УникальныйИдентификатор() у ДокументОбъект вместо его ссылки — ошибка выполнения.
02
Сравнение ссылки со строкой GUID в запросе — выборка всегда пустая.
03
Использование GUID из таблицы SQL без перестановки байт — объект не находится.
04
Отсутствие проверки существования после ПолучитьСсылку() — битые ссылки в данных.

Проверка результата

Убедиться, что GUID получен корректно, просто: строка должна иметь формат 8-4-4-4-12 шестнадцатеричных символов через дефисы. Для обратной проверки выполните поиск документа по этому GUID — если объект найден и его представление совпадает с исходным документом, идентификатор корректен.

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

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

Формат строки GUID
Норма

36 символов, группы через дефисы

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

Другая длина или перевёрнутый порядок символов

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

ПолучитьОбъект() возвращает объект с тем же номером и датой

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

Возвращается Неопределено или другой документ

Передача во внешнюю систему
Норма

Внешняя система находит объект по идентификатору

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

Ошибка формата или объект не найден

FAQ

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

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

Как получить GUID документа, если есть только его номер?

Найдите ссылку методом НайтиПоНомеру() с указанием даты (номер уникален только в пределах периода нумерации), затем вызовите УникальныйИдентификатор() у найденной ссылки.

Одинаковы ли GUID документа в разных базах после обмена?

Да, если обмен выполнялся штатными механизмами (Конвертация данных, универсальный формат), объект переносится с сохранением GUID. Если документ создавался в каждой базе вручную — идентификаторы будут разными.

Что означает ссылка вида «Объект не найден (123:abc...)»?

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

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

Да, если в конфигурации доступна техническая информация о ссылке (через меню «Ещё» в форме объекта) или настроен доступ по OData — тогда GUID виден в адресе объекта. Иначе потребуется помощь пользователя с правами на выполнение внешних обработок.

Итог

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

GUID документа получается методом УникальныйИдентификатор() от ссылки; обратный поиск — через ПолучитьСсылку() с обязательной проверкой существования объекта. Помните про отличие GUID в SQL-представлении и не выполняйте рискованные операции со ссылками в рабочей базе.