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

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

Как узнать ГУИД документа в 1С

Как узнать ГУИД документа в 1С: через запрос, код на встроенном языке, обработку, SQL и адресную строку. Пошаговые способы с примерами и частыми ошибками.

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

Задача узнать ГУИД документа возникает в нескольких типовых ситуациях: нужно сопоставить документ в 1С с записью во внешней системе, разобраться с ошибкой обмена, где фигурирует длинный идентификатор вида «8a3f2c1d-…», найти объект по ссылке из журнала регистрации или передать идентификатор разработчику. Способ получения ГУИДа зависит от того, кто вы — обычный пользователь без доступа к конфигуратору или разработчик с правами на запуск кода.

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

Что такое ГУИД документа и где он хранится

ГУИД в 1С — это 128-битное значение, которое платформа генерирует автоматически при создании нового объекта (документа, элемента справочника и т.д.). В текстовом виде он выглядит как строка из 36 символов: восемь шестнадцатеричных цифр, затем три группы по четыре и завершающая группа из двенадцати, разделённые дефисами. Пример формата: 8a3f2c1d-5e6b-4a7f-9c8d-1e2f3a4b5c6d.

В файловой базе идентификатор хранится внутри файла 1Cv8.1CD, в клиент-серверном варианте — в поле ссылки таблицы документа на стороне СУБД (MS SQL, PostgreSQL и др.). Важно понимать: ГУИД и ссылка — не одно и то же. Ссылка — это составное значение, включающее тип объекта и его идентификатор; ГУИД — только сама уникальная часть. Поэтому один и тот же ГУИД в разных таблицах теоретически может встретиться, хотя на практике совпадения практически исключены.

ГУИД не меняется при перенумерации документов, изменении даты, перепроведении или редактировании любых реквизитов. Он «умирает» только вместе с объектом: если документ удалить и создать заново с теми же данными, у нового объекта будет уже другой идентификатор.

Как узнать ГУИД через встроенный язык 1С

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

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

Сообщить(ГУИД); // выведет например: 8a3f2c1d-5e6b-4a7f-9c8d-1e2f3a4b5c6d

Обратная задача — получить ссылку по известному ГУИДу — решается конструктором Новый УникальныйИдентификатор() и методом ПолучитьСсылку() менеджера документа:

ГУИД = Новый УникальныйИдентификатор("8a3f2c1d-5e6b-4a7f-9c8d-1e2f3a4b5c6d");

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

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

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

КонецЕсли;

Такой код можно выполнить в консоли кода (внешняя обработка из публикаций на профильных ресурсах), во временной внешней обработке или в модуле при отладке. Для выполнения нужны права на запуск внешних обработок и, как правило, режим толстого или тонкого клиента с разрешённым выполнением кода.

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

Как получить ГУИД запросом

Если нужно получить идентификаторы сразу для списка документов — например, выгрузить их для интеграции — удобнее использовать запрос. В языке запросов 1С есть функция УникальныйИдентификатор(), которая принимает ссылку и возвращает её ГУИД:

ВЫБРАТЬ

Реализация.Номер,

Реализация.Дата,

УникальныйИдентификатор(Реализация.Ссылка) КАК ГУИД

ИЗ

Документ.РеализацияТоваровУслуг КАК Реализация

ГДЕ

Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода

Запрос удобно выполнить в консоли запросов — типовой инструмент входит в состав многих конфигураций на БСП (Библиотека стандартных подсистем) или доступен как отдельная внешняя обработка. Результат можно скопировать или выгрузить в табличный документ.

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

Как узнать ГУИД без конфигуратора: способы для пользователя

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

Адресная строка веб-клиента

Если база работает через веб-клиент, откройте документ и посмотрите на адресную строку браузера. В URL после открытия формы присутствует параметр с идентификатором ссылки — это и есть ГУИД объекта. Способ не требует никаких дополнительных прав, но работает только в веб-клиенте.

Журнал регистрации и ошибки обмена

При ошибках обмена данными в сообщениях часто фигурирует идентификатор объекта. Откройте журнал регистрации (в типовых конфигурациях: «Администрирование» → «Обслуживание» → «Журнал регистрации»), найдите событие с ошибкой — в комментарии обычно указан и тип объекта, и его ГУИД. Это помогает понять, о каком документе идёт речь, даже если он уже удалён.

Типовые обработки поиска

В конфигурациях на базе БСП есть инструменты вроде «Поиск и удаление дублей» и универсальных подборов, а также обработка «Групповое изменение реквизитов», через которую можно вывести служебные поля. Если у вас есть доступ к разделу «Администрирование», проверьте наличие инструментов разработчика — во многих поставках туда включена консоль запросов или редактор объекта, где ГУИД виден напрямую.

Маршрут решения

Как выбрать способ

Есть права разработчика и консоль кодаИспользуйте Ссылка.УникальныйИдентификатор() — самый быстрый путь
Нужны ГУИДы множества документовВыполните запрос с функцией УникальныйИдентификатор(Ссылка) в консоли запросов
Работаете только в веб-клиенте без дополнительных правОткройте документ и скопируйте идентификатор из адресной строки браузера
ГУИД известен из ошибки обмена, объект нужно найтиИспользуйте ПолучитьСсылку() и проверьте существование объекта
База недоступна, есть только прямой доступ к СУБДЧитайте таблицу документа на SQL только в режиме чтения

Как найти документ по известному ГУИДу

Обратная задача встречается даже чаще: в логах обмена или во внешней системе есть идентификатор, и нужно понять, какой это документ. Порядок действий такой:

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

Поиск документа по ГУИДу
  1. 1
    Скопируйте идентификатор из сообщения об ошибке или внешней системы
  2. 2
    Определите тип документа по контексту (текст ошибки, план обмена)
  3. 3
    Выполните код: Ссылка = Документы.ВидДокумента.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаГУИД))
  4. 4
    Проверьте существование: запросом к ссылке или попыткой получить объект
  5. 5
    Если объект не найден — проверьте, не удалён ли он, и поищите в других видах документов

Важный нюанс: метод ПолучитьСсылку() возвращает ссылку даже если объекта с таким ГУИДом не существует — создаётся так называемая «битая ссылка». Поэтому после получения ссылки всегда проверяйте существование объекта, например запросом ВЫБРАТЬ Ссылка ИЗ Документ.Вид ГДЕ Ссылка = &Ссылка или через проверку реквизита: у несуществующего объекта обращение к реквизитам вернёт признак отсутствия.

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

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

Существование объекта по ссылке
Норма

Запрос по ссылке возвращает строку, реквизиты доступны

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

Запрос пуст, реквизиты содержат текст про отсутствие объекта — это битая ссылка

Совпадение ГУИДа
Норма

УникальныйИдентификатор(Ссылка) совпадает с искомой строкой посимвольно

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

Различия в регистре или дефисах — проверьте копирование

Тип объекта
Норма

Тип ссылки соответствует ожидаемому виду документа

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

ГУИД найден, но это другой вид объекта — уточните источник идентификатора

Получение ГУИДа напрямую из базы данных

В клиент-серверном варианте ссылка хранится в таблице документа на стороне СУБД. В MS SQL поле ссылки обычно имеет тип binary(16), и его можно преобразовать в привычный текстовый вид. Однако есть тонкость: порядок байтов в представлении 1С отличается от стандартного строкового формата UUID, поэтому «наивное» преобразование даст неправильную строку — группы байтов нужно переставлять.

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

В файловом варианте базы прямой доступ к внутреннему формату 1Cv8.1CD сторонними средствами не документирован и не рекомендуется: используйте только штатные механизмы платформы.

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

Первая частая ошибка — путать ГУИД с навигационной ссылкой или с представлением ссылки. Функция Строка(Ссылка) вернёт представление вида «Реализация товаров 0000-000123 от 12.03…», а не идентификатор. Для получения именно ГУИДа нужен метод УникальныйИдентификатор().

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

Третья ошибка — использовать ГУИД как ключ в запросах соединений между базами без учёта типа. Идентификатор сам по себе не содержит информации о виде документа: храните рядом с ГУИДом и тип объекта, иначе поиск превратится в перебор всех таблиц.

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

Когда ГУИД не поможет: альтернативы

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

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

Итог

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

ГУИД документа получают методом УникальныйИдентификатор() в коде или одноимённой функцией в запросе; пользователю без прав помогут веб-клиент и журнал регистрации. ПолучитьСсылку() не гарантирует существование объекта — всегда проверяйте. В SQL-базу — только читать. ГУИД не меняется при редактировании, но может измениться при переносе данных без планов обмена.

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

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

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

Совпадут ли ГУИДы документа в разных базах при обмене?

Если обмен настроен через планы обмена или правила конвертации с сохранением ссылок — да, объект будет создан в базе-приёмнике с тем же идентификатором. При простой выгрузке в табличный документ или «ручном» переносе идентификаторы, как правило, разойдутся.

Что делать, если по известному ГУИДу объект не находится?

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

Одинаковы ли ГУИД в 1С и GUID в SQL Server?

По сути это один и тот же 128-битный идентификатор, но порядок байтов при хранении в СУБД отличается от строкового представления. При прямом чтении из SQL нужна перестановка байтов внутри групп, иначе строка не совпадёт с тем, что показывает 1С.

Можно ли узнать ГУИД документа, не открывая базу 1С?

Только при прямом доступе к СУБД в клиент-серверном варианте и только для чтения — с учётом особенностей хранения ссылок. Для файловой базы внешних безопасных инструментов нет: потребуется запустить платформу и использовать запрос или обработку.

Зачем вообще нужен ГУИД, если есть номер документа?

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