Администрирование · 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");
Ссылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Ид);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Документ не найден");
Иначе
Сообщить("Найден: " + Ссылка);
КонецЕсли;
Когда тип документа неизвестен — а это самая частая ситуация при разборе ошибок обмена — приходится перебирать все виды документов в цикле по метаданным. Для каждого вида вызывается ПолучитьСсылку(), а существование проверяется через запрос или попытку обращения к реквизиту.
Надёжный способ проверки существования — запрос с условием Ссылка = &Ссылка: он не вызывает исключений и возвращает результат только для реально существующих объектов. Проверка через ПолучитьОбъект() тоже работает, но медленнее при массовом переборе.
Функция НайтиДокументПоGUID(СтрокаGUID)
Ид = Новый УникальныйИдентификатор(СтрокаGUID);
Для Каждого ВидДок Из Метаданные.Документы Цикл
Ссылка = Документы[ВидДок.Имя].ПолучитьСсылку(Ид);
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Документ." + ВидДок.Имя + " ГДЕ Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Если Не Запрос.Выполнить().Пустой() Тогда
Возврат Ссылка;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункцииПоиск через универсальные обработки и консоль кода
Если нет желания писать код, задачу решают готовые инструменты. В составе стандартных библиотек и на диске ИТС есть обработки «Поиск объектов по GUID», «Универсальный подбор и обработка объектов», а также консоли кода, позволяющие выполнить произвольный фрагмент на встроенном языке прямо в режиме предприятия.
Порядок работы с такой обработкой одинаков: вставляете строку GUID, при необходимости выбираете тип объекта (или оставляете поиск по всем типам), запускаете поиск. Результат — ссылка, которую можно открыть в обычной форме документа и проверить реквизиты.
Для файловых баз без возможности запуска внешних обработок остаётся вариант с консолью запросов: запросом по конкретной таблице документа с отбором по ссылке, полученной через ПолучитьСсылку(). Это требует знания вида документа, но не требует прав на изменение конфигурации.
Проверка результата и типичные ошибки
Найденная ссылка сама по себе не гарантирует, что это нужный документ. Обязательно откройте объект и сверьте номер, дату, организацию и сумму с тем, что ожидалось — например, с данными из базы-корреспондента или файла обмена. Совпадение GUID при разных реквизитах говорит о конфликте обмена, который нужно разбирать отдельно.
Частые ошибки при поиске: лишние пробелы или переносы строки в скопированном GUID, фигурные скобки вокруг идентификатора (их нужно убрать), префикс вида «845:» из текста ошибки — конструктор УникальныйИдентификатор принимает только чистые 36 символов. Ещё одна ошибка — поиск GUID из одной базы в другой, не связанной с ней обменом: идентификаторы независимых баз не пересекаются.
Как проверить результат
Запрос по ссылке вернул строку, документ открывается в форме
Запрос пуст, при открытии ссылки сообщение «Объект не найден»
Номер, дата и организация совпадают с данными источника GUID
GUID совпал, но реквизиты другие — конфликт обмена
36 символов, дефисы на местах, без скобок и префиксов
Лишние символы — конструктор выдаёт ошибку формата
Часто задаваемые вопросы
Можно ли найти документ по GUID без доступа к конфигуратору?
Да. Для этого не нужно менять конфигурацию: достаточно внешней обработки поиска по GUID или консоли кода, запускаемой в режиме предприятия. Потребуются права на запуск внешних обработок и чтение соответствующих документов.
Что делать, если по GUID документ не найден?
Сначала проверьте корректность строки идентификатора и расширьте поиск на все ссылочные типы, а не только документы. Если объект всё равно не находится, вероятно, он удалён или GUID относится к другой базе — тогда ищите источник ссылки и восстанавливайте объект через обмен.
Меняется ли GUID документа при перепроведении или перенумерации?
Нет. Идентификатор присваивается один раз при создании объекта и не меняется ни при перепроведении, ни при смене номера, ни при переносе через планы обмена. Удаление и повторное создание документа вручную даст уже другой GUID.
Как найти GUID по номеру и дате документа?
Откройте документ и получите навигационную ссылку через меню «Ещё» — идентификатор будет в её конце. Программно это делается методом УникальныйИдентификатор() у найденной по номеру и дате ссылки.
Почему конструктор УникальныйИдентификатор выдаёт ошибку?
Чаще всего из-за лишних символов: фигурных скобок, префикса из текста ошибки, пробелов или переноса строки. Конструктор принимает строго 36-символьную строку в формате XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.
Что важно запомнить
Поиск документа по GUID в 1С выполняется через ПолучитьСсылку() с проверкой существования запросом, а при неизвестном типе — перебором видов документов или универсальной обработкой. Всегда очищайте строку идентификатора от лишних символов и сверяйте реквизиты найденного объекта с ожидаемыми.