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