Администрирование · 11 мин
Как изменить уникальный идентификатор объекта в 1С
Как изменить уникальный идентификатор объекта 1С: способы через код, обработку и обмен данными. Риски, проверка результата и частые ошибки при смене GUID.
Уникальный идентификатор (GUID) — это 36-символьная ссылка вида «8b3d5c1e-...», которую платформа 1С присваивает каждому объекту при создании: элементу справочника, документу, узлу плана обмена. Именно по GUID, а не по коду или наименованию, информационные базы узнают друг друга при обмене данными, а внешние системы — при интеграции через веб-сервисы и HTTP-запросы.
В типовой работе менять идентификатор не требуется: он создаётся один раз и живёт вместе с объектом до удаления. Необходимость возникает в нестандартных ситуациях: восстановление объекта после случайного удаления, когда на старую ссылку ссылаются документы; устранение дублей после обмена, когда один и тот же контрагент существует в базе дважды с разными GUID; синхронизация ссылок между двумя базами, где объекты создавались независимо.
Важно понимать сразу: прямого редактирования GUID у существующего объекта платформа не предоставляет. Все рабочие способы сводятся к созданию объекта с нужной ссылкой или к переносу данных между объектами. Ниже разобраны условия выбора метода, готовые фрагменты кода, проверка результата и типичные ошибки, которые приводят к битым ссылкам.
Что такое GUID в 1С и почему его нельзя править напрямую
Ссылка объекта в 1С состоит из типа объекта и уникального идентификатора. Идентификатор хранится в таблицах базы данных и используется во всех реквизитах ссылочного типа: когда документ указывает на контрагента, в поле записывается именно GUID этого контрагента. Поэтому изменение идентификатора «в лоб» на уровне СУБД мгновенно превращает все ссылки на объект в битые — вместо значения вы увидите «Объект не найден».
Платформа намеренно не даёт инструмента редактирования GUID у существующей записи: это защита целостности данных. Зато она предоставляет легальный механизм — создание нового объекта с заранее заданной ссылкой. Именно этот механизм используют обмены данными: когда объект приходит из другой базы, он создаётся с тем же GUID, что и в источнике.
Когда смена идентификатора оправдана, а когда нет
Прежде чем менять GUID, убедитесь, что задача не решается проще. Частая ситуация: после обмена в базе появился дубль контрагента. Менять GUID здесь не нужно — достаточно штатной обработки «Поиск и замена дублей», которая перенесёт все ссылки на один объект и пометит второй на удаление. Идентификатор при этом останется прежним, но с точки зрения учёта проблема исчезнет.
Смена GUID действительно нужна, когда требуется, чтобы объект имел конкретную ссылку: восстановление удалённого элемента, на который ссылаются записи с «битыми» ссылками; выравнивание ссылок между двумя базами, синхронизируемыми по GUID; исправление последствий нештатного обмена, где один объект был создан с двумя разными идентификаторами в разных узлах.
Как выбрать действие
Подготовка: резервная копия и анализ ссылок
Любая операция со ссылками — потенциально деструктивная. Перед началом сделайте выгрузку информационной базы через конфигуратор («Администрирование» → «Выгрузить информационную базу») или средствами СУБД, если база клиент-серверная. Проверьте, что копия восстанавливается: загрузите её в тестовую базу и убедитесь, что она открывается.
Второй шаг — выяснить, где используется объект. В режиме 1С:Предприятие выделите объект и выполните команду «Ещё» → «Найти ссылки на объект» (в типовых конфигурациях доступна также обработка поиска ссылок). Сохраните список: после смены GUID именно по нему вы будете проверять целостность данных. Заодно запишите старый GUID объекта — его можно получить через команду «Получить ссылку» в форме объекта или запросом.
Способ 1: создание объекта с заданным GUID через УстановитьСсылкуНового
Основной легальный метод — создать новый объект и назначить ему нужную ссылку до записи. Для этого используется метод УстановитьСсылкуНового(), которому передаётся заранее сформированная ссылка с требуемым GUID. После записи объект существует в базе именно с этим идентификатором.
Типовой сценарий выглядит так: получаете старый GUID в виде строки, создаёте новую ссылку через конструктор Новый УникальныйИдентификатор(СтрокаGUID), формируете ссылку нужного типа и присваиваете её новому объекту. Затем переносите реквизиты из исходного объекта и записываете.
// Создание элемента справочника с заданным GUID
СтрокаGUID = "8b3d5c1e-1234-5678-9abc-def012345678";
НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID);
НоваяСсылка = Справочники.Контрагенты.ПолучитьСсылку(НовыйGUID);
НовыйОбъект = Справочники.Контрагенты.СоздатьЭлемент();
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
НовыйОбъект.Наименование = "ООО «Пример»";
// перенос остальных реквизитов из старого объекта
НовыйОбъект.Записать();
Важный нюанс: если ссылка с таким GUID уже существует в базе (занята другим объектом или «битой» ссылкой не считается — битая ссылка означает, что объекта нет), запись пройдёт только при отсутствии реального объекта с этим идентификатором. Проверить занятость можно запросом по ссылке или функцией поиска объекта по ссылке.
Способ 2: обработка замены ссылок и перенос данных
Если объект с нужным GUID уже существует как дубль, задача обратная: оставить один объект и перевести на него все ссылки со второго. Для этого служит обработка «Поиск и замена значений» из состава стандартных подсистем БСП или аналогичные универсальные обработки. Она находит все вхождения заменяемой ссылки в реквизитах, табличных частях и регистрах и подменяет их целевой.
Порядок безопасной замены: выберите пару объектов (что заменяем и на что), запустите поиск вхождений, просмотрите список — в нём не должно быть неожиданных объектов вроде закрытых периодов или документов, которые нельзя трогать. Выполните замену в транзакции, затем пометьте дубль на удаление. После этого запустите удаление помеченных объектов, чтобы база не копила мусор.
- 1Сделайте выгрузку базы и проверьте её восстановление
- 2Откройте обработку поиска и замены дублей
- 3Укажите заменяемый объект и целевой объект
- 4Запустите поиск вхождений и проверьте список ссылок
- 5Выполните замену, пометьте дубль на удаление
- 6Запустите удаление помеченных и проверьте связанные документы
Способ 3: выравнивание GUID между базами через обмен
Когда одна и та же сущность создана независимо в двух базах (например, в УТ и в БП), у неё разные GUID, и обмен воспринимает объекты как разные. Чтобы сшить их, объект в базе-приёмнике создают с GUID из базы-источника: выгружают ссылку источника, в приёмнике создают объект через УстановитьСсылкуНового() с этим идентификатором и переносят реквизиты, а старый объект заменяют по ссылкам и удаляют.
Альтернатива — использовать регистрацию соответствий в типовых планах обмена: в механизмах сопоставления объектов при настройке синхронизации можно вручную указать, какому объекту приёмника соответствует объект источника, без физической смены GUID. Это безопаснее, если обмен уже настроен и работает.
Сравнение подходов
Подходит для восстановления удалённых объектов и выравнивания ссылок между базами. Требует кода и монопольного доступа
Подходит, когда оба объекта уже существуют. Не меняет GUID, но решает проблему дублей без программирования
Подходит для работающих обменов. GUID остаются разными, соответствие хранится в регистре — минимальный риск
Проверка результата и типичные ошибки
После операции откройте объект и сравните его ссылку с требуемой: GUID в строке ссылки должен совпадать с заданным. Затем пройдите по сохранённому списку ссылающихся объектов: документы должны открываться без сообщений «Объект не найден», реквизиты — показывать наименование вместо строки с идентификатором. Если настроен обмен, выполните тестовую выгрузку и убедитесь, что объект корректно сопоставляется на той стороне.
Как проверить результат
GUID в ссылке совпадает с заданным
GUID отличается — объект создан без установки ссылки
Открываются, реквизит заполнен наименованием
В реквизите «Объект не найден» или строка GUID
Объект сопоставляется, дублей не создаётся
В приёмнике появляется новый дубль объекта
Ошибки при смене GUID повторяются из проекта в проект. Самая частая — попытка записать объект с GUID, который уже занят: платформа либо выдаст ошибку нарушения уникальности, либо вы фактически перезапишете чужой объект. Вторая — забыть перенести табличные части, движения по регистрам и прикреплённые файлы: ссылка правильная, а содержимое потеряно. Третья — выполнить замену без анализа вхождений: ссылки подменяются в том числе в закрытых периодах, и прошлые отчёты «поплывут».
Перед массовой операцией удобно выгрузить список всех ссылок на объект в табличный документ. После смены GUID повторный поиск по старому идентификатору должен дать пустой результат — это самый быстрый признак того, что битых ссылок не осталось.
Ограничения и частые вопросы
У метода есть жёсткие границы. Нельзя изменить GUID предопределённых элементов без снятия конфигурации с поддержки и риска для обновлений. Нельзя сменить идентификатор у записей независимых регистров сведений — у них нет ссылки как таковой, только набор измерений. Для документов дополнительно нужно переносить движения: простая запись нового объекта не восстановит проведение по регистрам.
Что важно запомнить
GUID объекта нельзя отредактировать напрямую — его задают при создании через УстановитьСсылкуНового() либо обходят проблему заменой дублей и сопоставлением при обмене. Работайте на копии, фиксируйте список ссылающихся объектов и проверяйте результат поиском по старому идентификатору.
Можно ли изменить GUID объекта без программирования?
Напрямую — нет, штатного интерфейса для этого нет. Но большинство практических задач (дубли после обмена, лишние объекты) решается типовой обработкой поиска и замены дублей, которая не требует написания кода и не трогает сам идентификатор.
Что будет, если создать объект с GUID, который уже занят?
Платформа выдаст ошибку нарушения уникальности индекса либо при определённых условиях запишет данные поверх существующего объекта. Поэтому перед записью всегда проверяйте, свободен ли идентификатор, выполняя поиск объекта по ссылке.
Как узнать GUID существующего объекта?
В форме объекта многих типовых конфигураций есть команда «Получить ссылку», показывающая строку с GUID. Программно идентификатор получают через Ссылка.УникальныйИдентификатор(), а из строки навигационной ссылки GUID можно извлечь обработкой.
Нужно ли менять GUID при переносе данных в новую базу?
Если перенос выполняется типовой обработкой или правилами обмена, GUID переносятся автоматически — объекты создаются с исходными ссылками. Вручную задавать идентификаторы требуется только при нештатных сценариях, например при выгрузке через произвольные файлы.
Опасно ли менять GUID предопределённых элементов?
Да. Предопределённые элементы связаны с кодом конфигурации по имени и ссылке, а их идентификаторы могут использоваться механизмами обновления. Смена GUID таких элементов способна нарушить работу типовой логики и последующие обновления конфигурации.
Как проверить, что после смены GUID не осталось битых ссылок?
Выполните поиск ссылок по старому идентификатору — результат должен быть пустым. Дополнительно откройте несколько документов, ранее ссылавшихся на объект: реквизит должен показывать наименование, а не надпись «Объект не найден».