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

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

Как заменить GUID объекта в 1С

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

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

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

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

Когда замена GUID действительно нужна

Самая частая ситуация — дубли после обмена между базами. Контрагент «ООО Ромашка» заведён и в ERP, и в Бухгалтерии вручную, поэтому имеет два разных GUID. При синхронизации система считает их разными объектами, и документы расползаются по двум карточкам. Решение — привести один из объектов к GUID «главного» объекта и перенести на него все ссылки.

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

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

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

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

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

Поэтому корректный алгоритм всегда один: новый объект с нужным GUID → копирование данных → замена ссылок → удаление старого объекта.

Способ 1. Замена GUID программным кодом

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

НовыйGUID = Новый УникальныйИдентификатор("b2c7f0e1-1234-5678-9abc-def012345678");

НоваяСсылка = Справочники.Контрагенты.ПолучитьСсылку(НовыйGUID);

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

НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);

НовыйОбъект.Наименование = СтарыйОбъект.Наименование;

НовыйОбъект.ИНН = СтарыйОбъект.ИНН;

// перенос остальных реквизитов и табличных частей

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

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

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

Порядок замены GUID кодом
  1. 1
    Сделать резервную копию базы и проверить её восстановление
  2. 2
    Получить целевой GUID и создать новый объект через УстановитьСсылкуНового()
  3. 3
    Скопировать реквизиты, табличные части и дополнительные сведения со старого объекта
  4. 4
    Через НайтиПоСсылкам() найти все использования старой ссылки и заменить их на новую
  5. 5
    Пометить старый объект на удаление и выполнить удаление помеченных с контролем
  6. 6
    Проверить отсутствие битых ссылок и корректность обменов

Способ 2. Готовые обработки для замены GUID

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

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

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

Сравнение подходов

Собственный код

Полный контроль над переносом данных и транзакциями. Требует навыков программирования и тестирования на копии.

Поиск и удаление дублей (БСП)

Штатный и безопасный, но не позволяет задать конкретный GUID — выбирает «главный» объект по своим правилам.

Сторонние обработки замены GUID

Быстро для разовой задачи, но качество зависит от автора: проверяйте транзакционность и полноту переноса ссылок.

Прямое редактирование таблиц SQL

Не применять: нарушает целостность, лишает поддержки и почти гарантированно создаёт битые ссылки.

Особые случаи: документы, регистры и планы обмена

Документы и их движения

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

Объекты, участвующие в обменах

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

Восстановление удалённого объекта по известному GUID

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

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

После замены обязательна проверка ссылочной целостности. В конфигураторе: Администрирование → Тестирование и исправление → проверка ссылочной целостности. Дополнительно откройте несколько документов и отчётов, где участвовал заменённый объект, и убедитесь, что представления отображаются корректно.

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

Типичные ошибки
01
Замена GUID без переноса ссылок — старый объект удаляется, и база наполняется ошибками «Объект не найден»
02
Забытые регистры сведений и движения документов — НайтиПоСсылкам их находит, но обработчики часто перебирают только справочники и документы
03
Работа без транзакции — сбой посередине оставляет частично заменённые ссылки
04
Игнорирование планов обмена — в узлах РИБ появляются дубли и битые ссылки
05
Попытка назначить GUID, который уже занят другим объектом — ошибка записи или перезапись чужих данных
Контрольные точки

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

Поиск старого GUID в базе
Норма

Объект со старым GUID не найден или помечен на удаление

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

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

Тестирование и исправление (ссылочная целостность)
Норма

Ошибок ссылочной целостности нет

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

Есть записи «Объект не найден» с участием заменённого объекта

Открытие документов со ссылкой на объект
Норма

Ссылка отображается корректно, объект открывается

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

В полях виден текст «Объект не найден»

Сеанс обмена после замены
Норма

Синхронизация проходит без дублей и предупреждений

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

В другой базе появляются дубли или битые ссылки

FAQ

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

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

Что будет, если изменить GUID напрямую в таблицах SQL?

Все существующие ссылки в других таблицах продолжат указывать на старый идентификатор, и база получит массовые нарушения ссылочной целостности. Дополнительно прямое вмешательство в СУБД нарушает условия лицензионной поддержки 1С. Этот способ не применяется на практике.

Как узнать GUID объекта в 1С?

Программно: Строка(Ссылка.УникальныйИдентификатор()). В пользовательском режиме GUID виден в тексте битой ссылки вида «Объект не найден (b2c7f0e1...)», а также через специальные обработки просмотра ссылок.

Можно ли восстановить удалённый элемент справочника, зная его GUID?

Да. Создайте новый элемент, назначьте ему ссылку с известным GUID через УстановитьСсылкуНового(), заполните данные и запишите. Все существующие ссылки на этот GUID снова станут рабочими без дополнительной обработки.

Опасна ли замена GUID для базы с настроенной синхронизацией?

Да, это главный фактор риска. Обмен идентифицирует объекты по GUID, поэтому замена в одной базе без аналогичной замены в других узлах приведёт к дублям или битым ссылкам. Планируйте замену на всех узлах до очередного сеанса обмена.

Чем замена GUID отличается от объединения дублей?

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

Итог

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

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