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

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

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

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

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

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

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

Что такое GUID документа и где его взять

GUID в 1С — это строка из 32 шестнадцатеричных символов, разделённых дефисами, например: a1b2c3d4-e5f6-7890-abcd-ef1234567890. Каждому объекту базы (документу, элементу справочника, записи регистра) платформа присваивает такой идентификатор при создании, и он остаётся неизменным в течение всей жизни объекта.

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

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

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

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

Ид = Новый УникальныйИдентификатор("a1b2c3d4-e5f6-7890-abcd-ef1234567890");

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

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

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

Иначе

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

КонецЕсли;

Ключевой момент — проверка существования. Метод ПолучитьСсылку() возвращает ссылку всегда, даже если объекта с таким GUID в базе нет. Поэтому обязательно проверяйте результат через ПолучитьОбъект() (вернёт Неопределено для несуществующего) или через запрос к реквизиту ссылки — для «битой» ссылки запрос вернёт пустой результат.

Если код выполняется на сервере, а у пользователя нет прав на документ данного вида, поиск вернёт пустой результат или вызовет ошибку доступа. Убедитесь, что выполняете поиск под учётной записью с достаточными правами — обычно это администратор или разработчик.

Поиск, когда тип документа неизвестен

Частая ситуация: есть GUID из сообщения об ошибке обмена или из внешней системы, но неизвестно, какой это документ. Здесь есть два рабочих подхода.

Первый — перебор по всем видам документов через метаданные:

Ид = Новый УникальныйИдентификатор("a1b2c3d4-e5f6-7890-abcd-ef1234567890");

Для Каждого ВидДокумента Из Метаданные.Документы Цикл

Ссылка = Документы[ВидДокумента.Имя].ПолучитьСсылку(Ид);

Запрос = Новый Запрос("ВЫБРАТЬ Т.Ссылка ИЗ Документ." + ВидДокумента.Имя + " КАК Т ГДЕ Т.Ссылка = &Ссылка");

Запрос.УстановитьПараметр("Ссылка", Ссылка);

Если Не Запрос.Выполнить().Пустой() Тогда

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

Прервать;

КонецЕсли;

КонецЦикла;

Второй — разбор строки ссылки, если она есть в формате навигационной ссылки e1cib/data/Документ.ИмяДокумента?ref=.... Из такой строки тип объекта виден сразу, а часть после ref= преобразуется в GUID функцией перестановки байтов: идентификатор в ссылке хранится в перевёрнутом виде по группам. Готовые функции преобразования есть в типовых обработках «Поиск и замена значений» и в ряде универсальных консолей.

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

Если нет возможности писать код, подойдут готовые инструменты. Консоль запросов (есть на диске ИТС и в составе многих типовых инструментов разработчика) позволяет выполнить запрос с параметром-ссылкой:

ВЫБРАТЬ

Т.Ссылка,

Т.Номер,

Т.Дата

ИЗ

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

ГДЕ

Т.Ссылка = &Ссылка

В параметр &Ссылка нужно подставить результат Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Новый УникальныйИдентификатор("...")). Сам запрос не принимает GUID напрямую — ссылку нужно получить заранее в коде или в консоли кода.

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

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

Код через ПолучитьСсылку

Самый быстрый и точный, но требует права на выполнение кода и знания типа документа

Перебор по метаданным

Подходит, когда тип неизвестен; медленнее на базах с большим числом видов документов

Консоль запросов

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

Универсальные обработки

Готовое решение для администратора; требуют скачивания и запуска внешней обработки, что не всегда разрешено политикой безопасности

Пошаговый порядок действий

Общий алгоритм поиска документа по GUID сводится к нескольким шагам независимо от выбранного инструмента.

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

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

Типичные ошибки и их последствия

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

Типичные ошибки
01
Подстановка навигационной ссылки (после ref=) напрямую в конструктор GUID — получается другой идентификатор, объект не находится
02
Отсутствие проверки существования после ПолучитьСсылку — код молча работает с несуществующей ссылкой, дальше возникают ошибки при обращении к реквизитам
03
Поиск только в одном виде документов, когда объект на самом деле другого типа — делается ошибочный вывод, что документ удалён
04
Лишние пробелы, фигурные скобки или кавычки в строке GUID — конструктор выдаёт ошибку преобразования
05
Вывод об отсутствии документа по результатам поиска в копии базы, снятой до загрузки обмена

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

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

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

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

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

ПолучитьОбъект() вернул объект, запрос по ссылке вернул строку

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

ПолучитьОбъект() вернул Неопределено — объекта нет или это битая ссылка

Тип найденной ссылки
Норма

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

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

Тип другой — возможно, GUID скопирован из другого контекста

Реквизиты документа
Норма

Номер, дата, организация совпадают с данными из сообщения об ошибке или внешней системы

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

Реквизиты не совпадают — найден не тот объект, проверьте GUID

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

Итог

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

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

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

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

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

Чем GUID отличается от ссылки на документ?

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

Документ по GUID не найден, но обмен сообщает об ошибке именно с этим идентификатором. Что делать?

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

Сохраняется ли GUID при переносе документа в другую базу?

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

Как получить GUID документа для передачи во внешнюю систему?

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

Опасен ли поиск по GUID для данных базы?

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