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