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

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

Как поменять GUID объекта в 1С

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

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

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

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

Что такое GUID в 1С и почему его нельзя редактировать напрямую

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

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

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

Как узнать текущий GUID объекта

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

Через встроенный язык GUID получают одной строкой. В консоли кода или во внешней обработке выполните:

Ссылки = Справочники.Номенклатура.НайтиПоКоду("000001234");

Сообщить(Строка(Ссылки.УникальныйИдентификатор()));

Для обратной задачи — найти объект по известному GUID — используется метод ПолучитьСсылку с конструктором уникального идентификатора:

Ид = Новый УникальныйИдентификатор("55d1e2a4-3f6b-4c2a-9e1d-7b8c0a1f2e3d");

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

Если Ссылка.ПолучитьОбъект() = Неопределено Тогда

Сообщить("Объект с таким GUID не найден");

КонецЕсли;

Эта пара приёмов — «ссылка в GUID» и «GUID в ссылку» — базовый инструментарий для любой работы с идентификаторами, включая сценарий смены.

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

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

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

Ключевой фрагмент кода выглядит так:

НужныйИд = Новый УникальныйИдентификатор("55d1e2a4-3f6b-4c2a-9e1d-7b8c0a1f2e3d");

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

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

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

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

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

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

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

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

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

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

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

Способ 3. Прямая правка GUID в базе данных

Технически GUID хранится в поле _IDRRef таблицы объекта в СУБД (MS SQL, PostgreSQL). Теоретически его можно обновить прямым SQL-запросом UPDATE. На практике это крайне опасный приём: помимо таблицы самого объекта, тот же GUID физически хранится в десятках других таблиц — в полях ссылочного типа документов, регистров, планов обмена. Обновить все вхождения вручную почти нереально.

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

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

Резюме по способу: прямую правку в СУБД можно рассматривать только как аварийное восстановление на копии базы опытным специалистом, который заранее построил полную карту таблиц, содержащих искомый GUID. Для штатной задачи «поменять GUID» этот путь не нужен.

Сравнение способов смены GUID

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

УстановитьСсылкуНового + перенос ссылок

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

Универсальная обработка замены GUID

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

Прямая правка в СУБД

Самый быстрый по исполнению, но самый рискованный. Применим только на копии базы и при полном понимании структуры хранения.

КритерийУстановитьСсылкуНовогоОбработкаПравка в СУБД
БезопасностьВысокаяСредняяНизкая
Требуемые навыкиПрограммирование 1СМинимальныеАдминистрирование СУБД + структура 1С
Перенос регистровВручную в кодеЗависит от обработкиТолько при полном анализе таблиц
Откат при ошибкеИз резервной копииИз резервной копииЗатруднён

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

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

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

Проверка результата после смены GUID

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

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

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

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

Поиск объекта по новому GUID
Норма

Объект находится и открывается с корректными данными

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

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

НайтиПоСсылкам по старому GUID
Норма

Список ссылок пуст

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

Найдены объекты, ссылающиеся на старый GUID

Отчёты и движения по регистрам
Норма

Данные отображаются с новым объектом

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

В отчётах пустые поля или строки с битыми ссылками

Синхронизация с другими базами
Норма

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

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

На другой стороне появился дубль или объект-заглушка

Итог

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

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

Частые вопросы

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

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

Что будет, если назначить GUID, который уже занят?

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

Сохранятся ли движения документа при смене GUID справочника?

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

Как смена GUID влияет на обмен данными?

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

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

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

Опасно ли менять GUID в файловой базе?

Сама операция через УстановитьСсылкуНового одинаково безопасна для файлового и клиент-серверного вариантов. Опасна только прямая правка файла 1Cv8.1CD сторонними редакторами — она почти гарантированно повреждает базу. Работайте только штатными средствами платформы и с копией.