Разработка и Конфигурация · 10 мин
Как установить уникальный идентификатор в 1С
Как работает уникальный идентификатор (GUID) в 1С, как получить, задать и проверить его при обмене данными, интеграции и разработке. Примеры кода и типичные ошибки.
Уникальный идентификатор в 1С — это 36-символьное значение формата GUID (например, 8a3f2c1e-5b7d-4e9a-b2c3-1d4e5f6a7b8c), которое платформа присваивает каждому объекту базы: элементу справочника, документу, записи регистра. Именно по нему, а не по коду или наименованию, система однозначно различает объекты.
В обычной работе идентификатор создаётся автоматически и менять его не нужно. Но есть задачи, где требуется установить GUID принудительно: синхронизация двух баз, загрузка данных из внешней системы, восстановление объекта с сохранением ссылок на него. В этих случаях идентификатор задают программно.
Важно понимать ограничение: установить уникальный идентификатор можно только новому объекту до его первой записи в базу. Изменить GUID уже существующего объекта штатными средствами нельзя — это нарушило бы ссылочную целостность, ведь на объект могут ссылаться документы и регистры.
Как посмотреть уникальный идентификатор существующего объекта
Прежде чем устанавливать идентификатор, часто нужно узнать GUID уже существующего объекта — например, чтобы передать его во внешнюю систему. Самый простой способ без программирования — открыть объект и посмотреть адресную строку браузера при работе через веб-клиент: ссылка содержит идентификатор в виде ref=...
В тонком клиенте GUID виден при копировании ссылки на объект: меню «Ещё» → «Вывести список» не подходит, а вот команда «Получить ссылку» (в типовых конфигурациях на БСП) покажет навигационную ссылку вида e1cib/data/Справочник.Номенклатура?ref=8a3f2c1e5b7d4e9ab2c31d4e5f6a7b8c. Последняя часть — это идентификатор без дефисов.
Программно идентификатор получают через свойство ссылки:
Идентификатор = СсылкаНаОбъект.УникальныйИдентификатор();
СтрокаGUID = Строка(Идентификатор); // "8a3f2c1e-5b7d-..."
Обратный вариант — получить ссылку по известному GUID:
Ид = Новый УникальныйИдентификатор("8a3f2c1e-5b7d-4e9a-b2c3-1d4e5f6a7b8c");
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(Ид);
Как установить GUID новому объекту программно
Основной сценарий установки идентификатора — создание объекта с заранее заданным GUID. Для этого используется метод УстановитьСсылкуНового(), который вызывается у объекта до записи.
- 1Сформируйте или получите нужный GUID в виде строки
- 2Создайте объект УникальныйИдентификатор из строки
- 3Получите ссылку нужного типа через ПолучитьСсылку(Ид)
- 4Создайте новый объект (СоздатьЭлемент / СоздатьДокумент)
- 5Вызовите УстановитьСсылкуНового(Ссылка)
- 6Заполните реквизиты и запишите объект
- 7Проверьте, что объект записался с нужным идентификатором
// GUID пришёл из внешней системы
СтрокаGUID = "8a3f2c1e-5b7d-4e9a-b2c3-1d4e5f6a7b8c";
Ид = Новый УникальныйИдентификатор(СтрокаGUID);
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(Ид);
НовыйОбъект = Справочники.Номенклатура.СоздатьЭлемент();
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
НовыйОбъект.Наименование = "Тестовая позиция";
НовыйОбъект.Записать();
// Проверка
Сообщить(Строка(НовыйОбъект.Ссылка.УникальныйИдентификатор()));
Тот же подход работает для документов (Документы.РеализацияТоваровУслуг.СоздатьДокумент()) и планов видов характеристик. Для записей регистров сведений понятие ссылки отсутствует — там GUID не устанавливается.
Защита от дублирования
Перед установкой GUID стоит проверить, не существует ли уже объект с таким идентификатором. Если существует — платформа при записи выдаст ошибку нарушения уникальности. Проверка выполняется через метод ПолучитьОбъект() у ссылки: если он возвращает Неопределено, объект отсутствует.
Если НоваяСсылка.ПолучитьОбъект() = Неопределено Тогда
// Объекта нет — можно создавать с этим GUID
Иначе
// Объект уже существует — обновляем его, а не создаём новый
КонецЕсли;
Установка идентификатора при обмене и синхронизации
Наиболее частая практическая задача — синхронизация двух баз 1С или базы 1С с внешней системой (сайт, CRM, мобильное приложение). Чтобы один и тот же товар или контрагент имел одинаковый GUID во всех системах, при первичной загрузке идентификатор передаётся вместе с данными и устанавливается через УстановитьСсылкуНового().
При загрузке из файлов (XML, JSON, CSV) типовая схема такая: внешняя система выгружает объект вместе с его GUID, загрузка в 1С ищет объект по этому GUID, а если не находит — создаёт новый и принудительно назначает переданный идентификатор. Так обеспечивается идемпотентность: повторная загрузка того же файла не создаст дублей.
Если синхронизация строится между двумя базами 1С, рекомендуется выгружать GUID в строковом виде через Строка(Ссылка.УникальныйИдентификатор()) — в этом формате он однозначно восстанавливается конструктором Новый УникальныйИдентификатор(Строка).
Генерация нового GUID в коде
Если нужно просто получить новый уникальный идентификатор (например, для передачи во внешнюю систему как ключ будущего объекта), используется конструктор без параметров:
НовыйИд = Новый УникальныйИдентификатор(); // случайный GUID
СтрокаДляВнешнейСистемы = Строка(НовыйИд);
Сгенерированный таким образом GUID можно сохранить в реквизите объекта (например, строковом поле «ИдентификаторВнешнейСистемы») и позже использовать для установки ссылки при создании связанных объектов.
Способы работы с GUID
Платформа сама генерирует GUID при создании объекта. Подходит для всей обычной работы, ничего настраивать не нужно.
Программная установка заданного GUID новому объекту. Нужна при интеграциях и загрузках; работает только до первой записи.
Идентификатор внешней системы хранится строкой в отдельном реквизите. Проще и безопаснее, но требует поиска по реквизиту вместо прямого доступа по ссылке.
Типичные ошибки и ограничения
Отдельно стоит предупреждение о прямом редактировании базы данных на уровне СУБД (SQL). Попытка поменять идентификатор записи запросом UPDATE почти гарантированно приведёт к битым ссылкам: все объекты, ссылавшиеся на старый GUID, потеряют связь, а найти все такие места вручную практически невозможно.
Как проверить результат
Как проверить результат
Строка(Ссылка.УникальныйИдентификатор()) совпадает с заданным значением
Идентификатор отличается — значит, УстановитьСсылкуНового не была вызвана до записи
Поиск по GUID возвращает ровно один объект
Найдено несколько объектов или объект не находится по ссылке
Документы и регистры корректно открывают связанный объект
В полях ссылок отображается «Объект не найден»
Дополнительная проверка при синхронизации: выгрузите объект из базы-получателя обратно и сравните его GUID с исходным. Совпадение строк означает, что идентификатор установлен корректно и дальнейшие обмены будут сопоставлять объекты правильно.
Если объект создавался через обработку загрузки, полезно записать в журнал регистрации или в служебный реквизит исходный GUID — это упростит разбор расхождений при повторных загрузках.
При массовой загрузке с установкой GUID выполняйте запись в транзакции пакетами и обязательно делайте резервную копию базы перед первым запуском обработки. Ошибка в логике сопоставления на большом объёме данных откатывается в разы дольше, чем создаётся копия.
Частые вопросы
Можно ли изменить уникальный идентификатор уже записанного объекта?
Штатными средствами — нет. Идентификатор фиксируется при первой записи и используется всеми ссылками на объект. Обходной путь — создать новый объект с нужным GUID, перенести в него данные и заменить ссылки через поиск и замену значений, после чего удалить старый объект.
Как получить GUID из навигационной ссылки вида e1cib/data/...?ref=...
Значение после ref= — это идентификатор в специальном внутреннем формате (без дефисов, с перестановкой байтов). Напрямую в конструктор УникальныйИдентификатор его передавать нельзя. Проще получить ссылку через значение в базе и вызвать УникальныйИдентификатор(), либо использовать функцию преобразования формата, которую легко найти в типовых механизмах интеграции.
Совпадут ли GUID одинаковых объектов в разных базах автоматически?
Нет. При независимом создании объекта в каждой базе платформа генерирует разные идентификаторы, даже если код и наименование совпадают. Совпадение GUID обеспечивается только обменом с переносом идентификаторов или начальным выравниванием баз из одной копии.
Что произойдёт, если установить GUID, который уже занят другим объектом?
При записи платформа выдаст ошибку нарушения уникальности индекса, и объект не запишется. Поэтому перед УстановитьСсылкуНового() всегда проверяйте существование объекта через ПолучитьОбъект() у ссылки с этим идентификатором.
Можно ли задать GUID без программирования, через интерфейс?
Нет, в пользовательском режиме идентификатор не отображается как редактируемое поле и недоступен для изменения. Установка GUID возможна только программно — через встроенный язык, внешние обработки или механизмы загрузки данных.
Что важно запомнить
GUID в 1С присваивается автоматически; вручную его задают только новому объекту до записи через УстановитьСсылкуНового(). Изменить идентификатор существующего объекта нельзя. Перед установкой проверяйте уникальность, а при интеграциях передавайте GUID в строковом виде. Прямая правка идентификаторов в СУБД недопустима.