Администрирование · 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Определите, есть ли тип документа: из текста ошибки, навигационной ссылки или контекста обмена
- 2Скопируйте GUID без лишних пробелов и фигурных скобок
- 3Получите ссылку: Документы.<Имя>.ПолучитьСсылку(Новый УникальныйИдентификатор(GUID))
- 4Проверьте существование объекта через ПолучитьОбъект() или запрос
- 5Если тип неизвестен — выполните перебор по всем видам документов через метаданные
- 6Откройте найденный документ и сверьте номер, дату и организацию с ожиданиями
После нахождения документа зафиксируйте его номер и дату — дальнейшую работу (корректировку, перепроведение, сопоставление в обмене) удобнее вести по ним. Если документ найден в копии базы, а нужен в рабочей — убедитесь, что GUID совпадает и там: при загрузке из файла обмена идентификаторы обычно сохраняются, но при ручном создании документа GUID будет другим.
Типичные ошибки и их последствия
Большинство проблем при поиске по GUID связано не с платформой, а с неточностями во входных данных и в логике проверки.
Отдельно стоит ситуация «документ не найден, но ссылка есть». Это классическая «битая ссылка»: объект был удалён физически, а ссылки на него в других объектах остались. В этом случае поиск по GUID корректно показывает отсутствие объекта — и это тоже полезный результат диагностики.
Как проверить результат поиска
Как проверить результат
ПолучитьОбъект() вернул объект, запрос по ссылке вернул строку
ПолучитьОбъект() вернул Неопределено — объекта нет или это битая ссылка
Тип соответствует ожидаемому виду документа
Тип другой — возможно, GUID скопирован из другого контекста
Номер, дата, организация совпадают с данными из сообщения об ошибке или внешней системы
Реквизиты не совпадают — найден не тот объект, проверьте GUID
Финальная проверка — открыть найденный документ в пользовательском режиме и убедиться, что это именно тот объект, который фигурировал в задаче. Совпадение GUID гарантирует идентичность объекта, но сверка реквизитов исключает ошибку копирования идентификатора.
Что важно запомнить
Поиск по GUID выполняется через ПолучитьСсылку() с обязательной проверкой существования объекта. При неизвестном типе — перебор по метаданным. Идентификатор из навигационной ссылки требует преобразования, а отсутствие объекта по GUID означает битую ссылку или удаление.
Частые вопросы
Можно ли найти документ по GUID без программирования?
Напрямую в пользовательском интерфейсе такого поиска нет. Без написания кода можно использовать готовые универсальные обработки поиска по GUID или консоль запросов, где ссылку подставляет тот, кто умеет выполнить одну строку кода. Полностью «кнопочного» штатного средства в типовых конфигурациях обычно не предусмотрено.
Чем GUID отличается от ссылки на документ?
Ссылка — это объект встроенного языка, который содержит и тип документа, и его идентификатор. GUID — только идентификатор без типа. Поэтому по одному GUID нельзя сразу сказать, какой это объект: сначала нужно знать или определить его тип.
Документ по GUID не найден, но обмен сообщает об ошибке именно с этим идентификатором. Что делать?
Сначала проверьте, не ищете ли вы не в той базе: GUID актуален для базы-источника, а искать нужно в базе-приёмнике. Затем выполните перебор по всем видам документов и справочников — объект может быть другого типа. Если нигде не находится, вероятно, объект удалён, и в обмене нужно либо удалить регистрацию изменений, либо повторить выгрузку из источника.
Сохраняется ли GUID при переносе документа в другую базу?
При обмене через типовые механизмы (конвертация данных, планы обмена, универсальный формат) GUID обычно сохраняется — именно по нему объекты сопоставляются. При ручном создании документа в другой базе или загрузке без сопоставления по идентификатору GUID будет новым.
Как получить GUID документа для передачи во внешнюю систему?
Программно: Строка(ДокументСсылка.УникальныйИдентификатор()). В типовых интеграциях GUID обычно уже включён в выгрузку автоматически. Вручную из интерфейса GUID можно скопировать из навигационной ссылки, но потребуется преобразование формата.
Опасен ли поиск по GUID для данных базы?
Сам поиск — операция только чтения и безопасна. Риск появляется, если в том же коде выполняется запись, пометка удаления или изменение найденного объекта. Перед любыми модифицирующими действиями в рабочей базе сделайте резервную копию.