Разработка и Конфигурация · 9 мин
Как получить уникальный идентификатор документа в 1С
Способы получить уникальный идентификатор (GUID) документа в 1С: через конфигуратор, встроенный язык, запросы и обработки. Примеры кода и типичные ошибки.
Уникальный идентификатор документа (GUID) в 1С — это строка из 36 символов, которая однозначно определяет объект в базе данных. В отличие от номера документа, GUID не зависит от настроек нумерации, не меняется при перенумерации и одинаков во всех базах при обмене данными.
Идентификатор нужен при интеграции с внешними системами, отладке обменов, поиске «потерянных» документов и разборе дублей. Ниже разобраны основные способы получить GUID: через встроенный язык, запрос, стандартные обработки и SQL.
Что такое GUID документа и чем он отличается от номера
Каждый документ в 1С имеет два разных идентификатора. Номер документа — прикладной реквизит, видимый пользователю: он формируется по правилам нумерации, может содержать префиксы и меняется при перенумерации или переносе данных. Уникальный идентификатор — техническое значение типа «УникальныйИдентификатор», которое платформа присваивает объекту при создании и хранит в поле ссылки.
GUID состоит из 32 шестнадцатеричных цифр, сгруппированных через дефисы, например: a1b2c3d4-e5f6-7890-abcd-ef1234567890. Именно этот идентификатор используется в планах обмена, веб-сервисах, при сопоставлении объектов между базами и в механизмах синхронизации.
Как получить GUID в коде встроенного языка
Самый распространённый способ — метод УникальныйИдентификатор() у ссылки на документ. Метод возвращает значение типа «УникальныйИдентификатор», которое при необходимости преобразуется в строку:
ДокСсылка = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("0000-000123", ТекущаяДатаСеанса());
Если Не ДокСсылка.Пустая() Тогда
ГУИД = ДокСсылка.УникальныйИдентификатор();
СтрокаГУИД = Строка(ГУИД); // "a1b2c3d4-..."
Сообщить(СтрокаГУИД);
КонецЕсли;
Обратный переход — получение ссылки по известному GUID — выполняется через конструктор Новый УникальныйИдентификатор() и метод ПолучитьСсылку() менеджера документа:
ГУИД = Новый УникальныйИдентификатор("a1b2c3d4-e5f6-7890-abcd-ef1234567890");
ДокСсылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(ГУИД);
Если ДокСсылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Документ с таким GUID не найден");
КонецЕсли;
Как получить GUID запросом
В языке запросов нет прямой функции получения GUID как строки, но есть два рабочих подхода. Первый — функция ПредставлениеСсылки(), которая возвращает навигационную ссылку, содержащую идентификатор. Второй — выгрузка результата запроса и получение GUID уже в коде через метод ссылки:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| Реализация.Ссылка КАК Ссылка
|ИЗ Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ Реализация.Номер = &Номер";
Запрос.УстановитьПараметр("Номер", "0000-000123");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ГУИД = Выборка.Ссылка.УникальныйИдентификатор();
КонецЕсли;
В СКД и динамических списках GUID можно вывести через вычисляемое поле или получить в расшифровке. Для отчётов, где идентификатор нужен конечному пользователю, проще добавить колонку, заполняемую в коде после выполнения запроса.
Как узнать GUID без программирования
Если под рукой нет конфигуратора, GUID можно посмотреть штатными средствами. В типовых конфигурациях на БСП откройте «Все функции» (через меню или Shift+Alt+F при включённом режиме технического специалиста), найдите нужный документ и используйте стандартную обработку работы со ссылками. Также идентификатор виден в навигационной ссылке: команда «Получить ссылку» в карточке документа или копирование ссылки из журнала даёт строку вида e1cib/data/Документ.РеализацияТоваровУслуг?ref=..., где часть после ref= — это идентификатор в служебном формате.
Ещё один вариант — универсальные обработки «Поиск и замена значений» или «Консоль запросов», которые часто входят в состав типовых решений. В консоли запросов достаточно выполнить выборку документа и прочитать GUID из свойств ссылки.
- 1Откройте нужный документ в режиме предприятия
- 2Скопируйте навигационную ссылку (команда «Получить ссылку» или контекстное меню)
- 3Найдите в строке параметр ref= — после него идёт идентификатор
- 4При необходимости преобразуйте служебный формат в привычный вид GUID через метод УникальныйИдентификатор() или обработку
GUID в обменах и интеграциях
При обмене через планы обмена, EnterpriseData или веб-сервисы GUID — основной ключ сопоставления объектов. Если внешняя система передаёт документ в 1С, правильный подход — искать существующий документ по GUID через ПолучитьСсылку() и только при отсутствии создавать новый объект с принудительной установкой ссылки:
ГУИД = Новый УникальныйИдентификатор(СтрокаИзВнешнейСистемы);
ДокСсылка = Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(ГУИД);
Запрос = Новый Запрос("ВЫБРАТЬ 1 ИЗ Документ.ПоступлениеТоваровУслуг ГДЕ Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", ДокСсылка);
Если Запрос.Выполнить().Пустой() Тогда
НовыйДок = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
НовыйДок.УстановитьСсылкуНового(ДокСсылка); // фиксируем GUID
КонецЕсли;
Учтите: в строковом представлении GUID, который возвращает 1С, порядок байтов отличается от формата, используемого в SQL Server и некоторых внешних системах. При прямой интеграции на уровне СУБД идентификатор требует перестановки групп байтов — это частая причина «не находится документ, хотя GUID совпадает».
Как проверить результат и найти документ по GUID
Чтобы убедиться, что полученный идентификатор корректен, выполните обратный поиск: создайте ссылку по GUID и проверьте, существует ли объект. Признак корректной работы — запрос по ссылке возвращает строку, а реквизиты документа доступны. Если запрос пуст, а ссылка формально создана, перед вами битая ссылка или ошибка в строке идентификатора.
Как проверить результат
36 символов, дефисы на позициях 9, 14, 19, 24
Другая длина, лишние символы, фигурные скобки
Запрос возвращает документ с ожидаемыми реквизитами
Запрос по ссылке пуст — объект не существует или GUID ошибочный
Один и тот же документ имеет одинаковый GUID в обеих базах
GUID различается — документы были созданы независимо, это дубли
Частые вопросы
Можно ли изменить GUID существующего документа?
Штатными средствами — нет. Идентификатор присваивается при создании объекта и хранится в ссылке. Единственный способ «поменять» GUID — создать новый документ с нужной ссылкой через УстановитьСсылкуНового() и перенести данные, удалив старый объект. Это рискованная операция: все существующие ссылки на документ в других объектах станут битыми.
Почему GUID в 1С и в SQL Server выглядит по-разному?
Платформа 1С хранит идентификатор в поле _IDRRef в двоичном виде с собственным порядком байтов. При чтении напрямую из SQL строка отличается от той, что показывает 1С. Для сопоставления нужно переставлять байты внутри групп GUID по известным правилам либо выполнять интеграцию через механизмы платформы, а не прямые запросы к СУБД.
Как получить GUID всех документов за период?
Выполните запрос по таблице документа с отбором по дате, выгрузите результат и в цикле для каждой строки вызовите Ссылка.УникальныйИдентификатор(). Результат удобно поместить в таблицу значений с колонками «Номер», «Дата», «GUID» и вывести пользователю или сохранить в файл.
Чем GUID отличается от навигационной ссылки?
Навигационная ссылка — это адрес объекта для открытия в клиенте 1С, она содержит тип объекта и его идентификатор в служебном кодировании. GUID — чистый идентификатор без привязки к типу и формату клиента. Из навигационной ссылки GUID можно извлечь, обратное преобразование требует знания типа объекта.
Работает ли УникальныйИдентификатор() на тонком клиенте?
Да, метод доступен на тонком и веб-клиенте, так как это функциональность ссылки, а не серверного объекта. Однако создание нового значения через Новый УникальныйИдентификатор и поиск по ссылке лучше выполнять в серверных процедурах, чтобы не перегружать клиент-серверное взаимодействие.
Что делать, если при обмене появились дубли документов с разными GUID?
Это признак того, что документ был создан независимо в двух базах. Определите «главный» экземпляр, перенесите ссылки на него из связанных объектов, пометьте дубль на удаление и настройте сопоставление по GUID в правилах обмена, чтобы ситуация не повторялась.
Что важно запомнить
GUID документа получают методом Ссылка.УникальныйИдентификатор() в коде или через навигационную ссылку в пользовательском режиме. Обратный поиск выполняется через ПолучитьСсылку() с обязательной проверкой существования объекта. При интеграциях помните о различии порядка байтов GUID в 1С и SQL.