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

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

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

Как изменить GUID объекта в 1С через обработку УникальныйИдентификатор, зачем это нужно при обмене данными, какие риски и как проверить результат.

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

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

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

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

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

Другой легитимный сценарий — восстановление связи с внешней системой (сайт, CRM, складская программа), которая хранит GUID объектов 1С у себя. Если базу 1С развернули из копии, где объект был пересоздан, внешняя система «не видит» его. Присвоение объекту старого GUID восстанавливает интеграцию без переделки внешней стороны.

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

Маршрут решения

Как выбрать действие

В двух базах появились дубли одного элемента с разными GUIDПрисвойте одному объекту GUID другого и удалите дубль с заменой ссылок
Внешняя система потеряла связь с объектом после восстановления базыУзнайте GUID из внешней системы и присвойте его объекту в 1С
Нужно перенести данные между базами без ручной работыИспользуйте обработку выгрузки/загрузки XML — GUID сохранятся сами
В обмене используется типовой план обменаСначала попробуйте штатное сопоставление объектов в регистрации обмена

Подготовка: резервная копия и проверка условий

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

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

Узнать текущий GUID объекта можно несколькими способами: через консоль кода (встроена в конфигурации на БСП или доступна как внешняя обработка), через метод Объект.Ссылка.УникальныйИдентификатор(), либо открыв ссылку вида e1cib/data/Справочник.Номенклатура?ref=... — последние символы после «ref=» содержат идентификатор в служебном представлении.

Способ 1: программная замена GUID через УстановитьСсылкуНового

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

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

bsl
НовыйGUID = Новый УникальныйИдентификатор("a1b2c3d4-e5f6-7890-abcd-ef1234567890");
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(НовыйGUID);
НовыйОбъект = Справочники.Номенклатура.СоздатьЭлемент();
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
ЗаполнитьЗначенияСвойств(НовыйОбъект, СтарыйОбъект);
НовыйОбъект.Записать();

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

Способ 2: готовые обработки и типовые механизмы

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

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

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

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

Ручной код с УстановитьСсылкуНового

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

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

Безопасно и штатно, но работает только для справочников и не даёт задать конкретный GUID

Сопоставление в плане обмена

Самый безопасный путь для обменов, GUID физически не меняется, но не решает задачи вне обмена

Внешние обработки смены GUID

Быстро, но качество переноса связанных данных нужно проверять на копии

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

С документами процедура сложнее, чем со справочниками: у документа есть движения по регистрам. Если создать документ-копию с новым GUID и просто перенести реквизиты, движения не появятся автоматически — их нужно либо перепровести новый документ (что может быть невозможно в закрытом периоде), либо программно скопировать наборы записей со старого документа на новый.

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

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

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

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

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

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

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

GUID объекта после операции
Норма

Совпадает с целевым идентификатором

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

GUID старый или объект не открывается

Поиск ссылок на старый GUID
Норма

Ссылок не найдено, старый объект удалён

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

Есть документы или регистры со ссылкой на удалённый объект

Сеанс обмена данными
Норма

Объект сопоставился, дублей не появилось

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

В узле создался дубль или ошибка уникальности

Тестирование и исправление
Норма

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

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

Сообщения о битых ссылках на удалённые объекты

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

Частые вопросы о смене GUID в 1С

Если дублей много, не меняйте GUID вручную по одному объекту. Сначала выгрузите список пар «объект — нужный GUID» в таблицу и напишите пакетную обработку с транзакциями: так проще контролировать ошибки и откатывать проблемные позиции.
ПЗ
Практическое замечание
Можно ли изменить GUID объекта без программирования?

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

Что будет со ссылками на объект после смены GUID?

Ссылки в документах и регистрах хранят именно GUID, поэтому после создания нового объекта вместо старого все ссылки нужно заменить программно или обработкой поиска и замены. Если этого не сделать, на месте старого объекта появятся битые ссылки.

Можно ли задать GUID при создании объекта сразу?

Да. Создайте ссылку через Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор("...")), затем у нового объекта вызовите УстановитьСсылкуНового с этой ссылкой до записи. Объект запишется сразу с нужным идентификатором.

Опасно ли менять GUID в базе, участвующей в обмене РИБ?

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

Как узнать GUID объекта, если нет доступа к конфигуратору?

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

Можно ли вернуть старый GUID после ошибочной замены?

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

Итог

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

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