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

Администрирование · 10 мин

Как найти документ по идентификатору в 1С

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

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

Стандартного «окна поиска по GUID» в типовых конфигурациях нет, поэтому задача решается несколькими способами: программно через встроенный язык, универсальными обработками или запросом к информационной базе. Выбор зависит от того, есть ли у вас доступ к конфигуратору, работаете ли вы в файловой или клиент-серверной базе и нужен ли разовый поиск или регулярный инструмент.

Ниже разобраны рабочие методы поиска документа по идентификатору, особенности работы с ссылочными типами, типичные ошибки и способы проверить, что найден именно тот объект.

Что такое уникальный идентификатор документа в 1С

Каждый объект ссылочного типа в 1С — документ, элемент справочника, план счетов — получает при создании уникальный идентификатор из 36 символов в формате вида 8a3f2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c. Этот GUID хранится в базе и используется платформой для построения всех ссылок между объектами.

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

GUID чаще всего попадает к администратору из журнала регистрации, текста ошибки обмена, XML-файла выгрузки или сообщения вида «Объект не найден (845:8a3f...)». Во всех этих случаях задача сводится к одному: по строке идентификатора найти конкретный документ в базе.

Как узнать GUID документа, если он неизвестен

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

Самый простой вариант — открыть документ и посмотреть адресную строку веб-клиента или скопировать навигационную ссылку: командой «Получить ссылку» в меню «Ещё» либо сочетанием клавиш в тонком клиенте. Навигационная ссылка содержит идентификатор в конце, например e1cib/data/Документ.РеализацияТоваровУслуг?ref=8a3f....

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

Поиск документа по GUID через встроенный язык

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

Ид = Новый УникальныйИдентификатор("8a3f2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c");

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

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

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

Иначе

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

КонецЕсли;

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

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

bsl
Функция НайтиДокументПоGUID(СтрокаGUID)
    Ид = Новый УникальныйИдентификатор(СтрокаGUID);
    Для Каждого ВидДок Из Метаданные.Документы Цикл
        Ссылка = Документы[ВидДок.Имя].ПолучитьСсылку(Ид);
        Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Документ." + ВидДок.Имя + " ГДЕ Ссылка = &Ссылка");
        Запрос.УстановитьПараметр("Ссылка", Ссылка);
        Если Не Запрос.Выполнить().Пустой() Тогда
            Возврат Ссылка;
        КонецЕсли;
    КонецЦикла;
    Возврат Неопределено;
КонецФункции

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

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

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

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

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

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

Частые ошибки при поиске: лишние пробелы или переносы строки в скопированном GUID, фигурные скобки вокруг идентификатора (их нужно убрать), префикс вида «845:» из текста ошибки — конструктор УникальныйИдентификатор принимает только чистые 36 символов. Ещё одна ошибка — поиск GUID из одной базы в другой, не связанной с ней обменом: идентификаторы независимых баз не пересекаются.

Типичные ошибки
01
Передача в конструктор строки с префиксом из текста ошибки (например, "845:8a3f...") — возникает исключение, и поиск прерывается
02
Поиск только по одному виду документов, хотя тип объекта неизвестен — результат ложно считается отрицательным
03
Использование ПолучитьОбъект() без проверки на Неопределено — падение кода на несуществующей ссылке
04
Поиск GUID из другой информационной базы, не участвующей в обмене — объект заведомо не будет найден
05
Вывод об отсутствии документа без проверки, не является ли это битой ссылкой, на которую где-то ещё ссылаются
Контрольные точки

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

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

Запрос по ссылке вернул строку, документ открывается в форме

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

Запрос пуст, при открытии ссылки сообщение «Объект не найден»

Соответствие реквизитов
Норма

Номер, дата и организация совпадают с данными источника GUID

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

GUID совпал, но реквизиты другие — конфликт обмена

Строка идентификатора
Норма

36 символов, дефисы на местах, без скобок и префиксов

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

Лишние символы — конструктор выдаёт ошибку формата

Часто задаваемые вопросы

Можно ли найти документ по GUID без доступа к конфигуратору?

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

Что делать, если по GUID документ не найден?

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

Меняется ли GUID документа при перепроведении или перенумерации?

Нет. Идентификатор присваивается один раз при создании объекта и не меняется ни при перепроведении, ни при смене номера, ни при переносе через планы обмена. Удаление и повторное создание документа вручную даст уже другой GUID.

Как найти GUID по номеру и дате документа?

Откройте документ и получите навигационную ссылку через меню «Ещё» — идентификатор будет в её конце. Программно это делается методом УникальныйИдентификатор() у найденной по номеру и дате ссылки.

Почему конструктор УникальныйИдентификатор выдаёт ошибку?

Чаще всего из-за лишних символов: фигурных скобок, префикса из текста ошибки, пробелов или переноса строки. Конструктор принимает строго 36-символьную строку в формате XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.

Итог

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

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