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

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

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

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

Уникальный идентификатор (GUID) — это внутренняя метка каждой ссылки в базе 1С: элемента справочника, документа, плана счетов и других ссылочных объектов. Он выглядит как строка вида «8a3f2c1e-…» и не меняется при переименовании объекта, изменении кода или номера. Именно поэтому поиск по GUID — самый надёжный способ найти конкретный объект, когда известна только ссылка из обмена, лога, внешней системы или сообщения об ошибке.

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

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

Что такое GUID в 1С и где его взять

GUID (глобально уникальный идентификатор) присваивается ссылке в момент создания объекта и хранится в базе вместе с ним. В интерфейсе он не показывается, но его можно получить несколькими путями: из текста ошибки обмена, из журнала регистрации, из XML-файла выгрузки (атрибуты вида Ref="…"), из внешней системы, с которой настроена интеграция, или программно через метод ЗначениеВСтрокуВнутр либо свойство УникальныйИдентификатор() ссылки.

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

Способ 1. Универсальная обработка поиска по GUID

Самый быстрый путь без программирования — внешняя обработка «Поиск объекта по уникальному идентификатору». Подобные обработки входят в состав «Инструментов разработчика» (ИР), есть на диске ИТС и в открытом доступе. Они работают в любой конфигурации, потому что не зависят от прикладного кода.

Порядок работы простой: откройте обработку через «Файл → Открыть», вставьте GUID в поле ввода и запустите поиск. Обработка переберёт все ссылочные типы метаданных и покажет найденный объект: его тип, представление и возможность открыть форму. Если объект не найден, некоторые обработки дополнительно сообщают, встречается ли этот GUID в виде битой ссылки в других объектах.

Порядок действий с обработкой
  1. 1
    Откройте базу под пользователем с правами на запуск внешних обработок
  2. 2
    Откройте обработку через Файл → Открыть
  3. 3
    Вставьте GUID без лишних пробелов и кавычек
  4. 4
    Запустите поиск и дождитесь перебора всех типов
  5. 5
    Откройте найденный объект двойным щелчком и проверьте, тот ли это объект

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

Способ 2. Поиск программно через ПолучитьСсылку

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

bsl
Ид = Новый УникальныйИдентификатор("8a3f2c1e-4b5d-11ec-9f2a-00155d0a1b2c");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(Ид);
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Если Не Запрос.Выполнить().Пустой() Тогда
    Сообщить("Объект найден: " + Ссылка);
Иначе
    Сообщить("Объект с таким GUID отсутствует (битая ссылка)");
КонецЕсли;

Ключевой момент: простое сравнение Ссылка.ПолучитьОбъект() на непроверенной ссылке вызовет исключение, а обращение к реквизитам «через точку» вернёт ошибку обращения к полю. Поэтому проверка запросом или функцией ОбщегоНазначения.СсылкаСуществует (в конфигурациях на БСП) обязательна.

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

Способ 3. Поиск через НайтиПоСсылкам и битые ссылки

Если объект с нужным GUID удалён, вы столкнётесь с «битой ссылкой»: в базе остались записи, указывающие на несуществующий объект. Типовая проверка «Удаление помеченных объектов» такие ссылки обычно чистит, но при монопольном удалении без контроля или сбоях они остаются.

Метод НайтиПоСсылкам показывает, где упоминается ссылка с заданным GUID: в реквизитах документов, регистрах, табличных частях. Это помогает понять масштаб проблемы перед восстановлением или зачисткой. Во внешних обработках есть и специализированные отчёты «Поиск битых ссылок», которые выводят список объектов вида «<Объект не найден> (8a3f…)».

Особый случай: GUID из файла обмена в «перевёрнутом» виде

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

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

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

Сравнение вариантов

Внешняя обработка поиска по GUID

Подходит разовым задачам и администраторам без кода. Ограничение — нужны права на запуск внешних обработок.

ПолучитьСсылку + запрос

Быстрый вариант, когда тип объекта известен. Требует доступа к консоли кода или конфигуратору.

Перебор всех типов метаданных

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

НайтиПоСсылкам

Нужен не для поиска объекта, а для анализа битых ссылок и мест использования GUID.

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

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

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

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

Объект открывается в форме
Норма

Форма открывается, реквизиты заполнены

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

Ошибка «Объект не найден» — ссылка битая

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

Совпадает с ожидаемым из контекста задачи

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

Найден объект другого типа — GUID скопирован с ошибкой

GUID в сообщении об ошибке
Норма

Совпадает с искомым посимвольно

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

Лишние пробелы, фигурные скобки или перевёрнутый формат

Типичные ошибки
01
Поиск по GUID с фигурными скобками или кавычками из текста ошибки — конструктор УникальныйИдентификатор выдаёт ошибку формата; очищайте строку
02
Использование ПолучитьСсылку без проверки существования — при обращении к объекту получаете исключение на битой ссылке
03
Поиск по перевёрнутому GUID из XML без конвертации — объект не находится, хотя существует
04
Перебор типов только по справочникам и документам — GUID может принадлежать плану счетов, виду расчёта, узлу плана обмена или задаче

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

Итог

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

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

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

Можно ли найти объект по GUID в пользовательском режиме без обработок?

Штатного поиска по GUID в интерфейсе типовых конфигураций нет. Максимум — полнотекстовый поиск, но он не индексирует идентификаторы. Понадобится внешняя обработка, консоль кода или помощь разработчика.

Что делать, если поиск по GUID ничего не нашёл?

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

Можно ли восстановить удалённый объект, зная его GUID?

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

Меняется ли GUID при обмене между базами?

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

Как узнать GUID объекта, который я вижу в форме?

Программно — метод Ссылка.УникальныйИдентификатор(). Без кода — через обработки ИР или через «Вывести список» с добавлением поля ссылки в консоли запросов. В стандартной форме объекта GUID не отображается.