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

Разработка и Конфигурация · 9 мин

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

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

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

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

Что такое уникальный идентификатор в 1С и откуда он берётся

GUID в 1С — это 128-битное значение вида «8e4f2a1b-3c5d-4e6f-9a0b-1c2d3e4f5a6b», которое платформа присваивает объекту при создании и не меняет в течение всей его жизни. Именно по GUID происходит сопоставление объектов при обмене между базами, поэтому один и тот же контрагент в двух узлах РИБ имеет одинаковый идентификатор.

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

Базовый способ: ПолучитьСсылку по известному типу объекта

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

ИдСтрокой = "8e4f2a1b-3c5d-4e6f-9a0b-1c2d3e4f5a6b";

УИД = Новый УникальныйИдентификатор(ИдСтрокой);

Ссылка = Справочники.Номенклатура.ПолучитьСсылку(УИД);

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

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

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

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

Иначе

Сообщить("Объект с таким GUID отсутствует в базе");

КонецЕсли;

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

Как найти объект по GUID, если тип неизвестен

На практике часто есть только строка GUID из лога обмена или внешней системы, а тип объекта неизвестен. В этом случае перебирают менеджеры всех ссылочных типов: справочники, документы, планы видов характеристик, планы счетов, планы видов расчёта, планы обмена, бизнес-процессы и задачи.

Функция НайтиОбъектПоGUID(ИдСтрокой)

УИД = Новый УникальныйИдентификатор(ИдСтрокой);

Коллекции = Новый Массив;

Коллекции.Добавить(Справочники);

Коллекции.Добавить(Документы);

Коллекции.Добавить(ПланыВидовХарактеристик);

Коллекции.Добавить(ПланыСчетов);

Коллекции.Добавить(ПланыВидовРасчета);

Коллекции.Добавить(БизнесПроцессы);

Коллекции.Добавить(Задачи);

Для Каждого Коллекция Из Коллекции Цикл

Для Каждого Менеджер Из Коллекция Цикл

Ссылка = Менеджер.ПолучитьСсылку(УИД);

Таблица = Менеджер.ПустаяСсылка().Метаданные().ПолноеИмя();

Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ " + Таблица + " ГДЕ Ссылка = &Ссылка");

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

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

Возврат Ссылка;

КонецЕсли;

КонецЦикла;

КонецЦикла;

Возврат Неопределено;

КонецФункции

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

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

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

В типовых конфигурациях на БСП (Библиотека стандартных подсистем) есть похожий механизм через функциональность «Все функции» → «Стандартные» или через обработку «Поиск и удаление дублей», если задача связана с дублями. Также GUID можно посмотреть и найти через консоль запросов, выполнив запрос к конкретной таблице с условием по ссылке.

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

Восстановление объекта по GUID после удаления

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

НовыйОбъект = Справочники.Номенклатура.СоздатьЭлемент();

УИД = Новый УникальныйИдентификатор("8e4f2a1b-3c5d-4e6f-9a0b-1c2d3e4f5a6b");

НовыйОбъект.УстановитьСсылкуНового(Справочники.Номенклатура.ПолучитьСсылку(УИД));

НовыйОбъект.Наименование = "Восстановленный элемент";

НовыйОбъект.Записать();

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

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

Проверка результата и ограничения методов

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

Ограничения, о которых стоит помнить: в разделённых базах (SaaS) поиск выполняется только в текущей области данных; у пользователя должны быть права на чтение соответствующих объектов, иначе запрос вернёт пустой результат даже при существующем объекте. В файловых базах большого объёма перебор типов может занимать заметное время.

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

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

Запрос по ссылке
Норма

Возвращает одну строку с ссылкой

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

Пустой результат — объект отсутствует или нет прав

Обращение к реквизиту (Код, Наименование)
Норма

Возвращается значение

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

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

Пометка удаления
Норма

Объект активен или пометка соответствует ожиданию

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

Объект помечен на удаление — обмены могут работать некорректно

FAQ

Можно ли найти объект по GUID в режиме «Предприятие» без обработок?

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

Почему ПолучитьСсылку возвращает ссылку, но объекта нет?

Метод не обращается к базе — он только формирует ссылку из идентификатора. Существование объекта нужно проверять отдельно запросом или чтением реквизита.

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

Программно — через Ссылка.УникальныйИдентификатор(). Без кода GUID не отображается в стандартных формах; используют обработки или вывод идентификатора через консоль кода (Shift+F9 в отладчике).

Одинаковые ли GUID у объекта в разных базах?

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

Что делать, если GUID из ошибки обмена не находится ни в одном типе?

Скорее всего, объект физически удалён. Варианты: восстановить его с тем же GUID через УстановитьСсылкуНового, поднять резервную копию или выполнить повторную регистрацию и выгрузку объекта из базы-источника.

Итог

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

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