Разработка и Конфигурация · 11 мин
Как получить новый уникальный идентификатор в 1С
Как получить новый уникальный идентификатор (GUID) в 1С: встроенная функция, методы объектов, внешние инструменты, проверка уникальности и типичные ошибки.
Уникальный идентификатор (GUID, он же УникальныйИдентификатор) в 1С — это 128-битное значение, которое платформа использует для однозначной ссылки на объект базы данных: элемент справочника, документ, запись регистра. Он выглядит как строка вида «5d8f3a2e-1b7c-4e9a-9f2b-3c6d8e1a4b5f» и гарантированно не повторяется в пределах информационной базы, а на практике — и за её пределами.
Получить новый идентификатор можно несколькими способами: штатной функцией встроенного языка, через ссылку на объект, внешними средствами операционной системы или сервисами генерации GUID. Выбор зависит от задачи: нужен ли идентификатор для привязки к объекту базы, для обмена данными между системами или просто как технический ключ.
Важно понимать разницу между «сгенерировать GUID» и «получить GUID объекта». В первом случае вы создаёте произвольное уникальное значение, во втором — читаете идентификатор, который платформа уже назначила конкретной ссылке. Оба сценария разобраны ниже с примерами кода, проверкой результата и типичными ошибками.
Что такое уникальный идентификатор в 1С и когда он нужен
Каждый объект ссылочного типа (справочник, документ, план видов характеристик и т.д.) при записи получает от платформы уникальный идентификатор. Именно GUID, а не код или номер, является внутренним ключом объекта: код может меняться, идентификатор — никогда. Поэтому GUID используется в механизмах обмена, синхронизации с внешними системами, планах обмена и при поиске дублей.
Типичные ситуации, когда разработчику или администратору нужно получить новый GUID:
- создание объекта с заранее известным идентификатором — например, при загрузке данных из другой базы, чтобы ссылки совпали;
- формирование технических ключей для интеграции по API, где требуется уникальный строковый токен;
- пометка пакетов данных при выгрузке, чтобы отследить их на стороне приёмника;
- восстановление ссылки на «битый» объект, когда известен GUID, но объекта в базе нет.
Как сгенерировать новый GUID встроенной функцией
Самый простой и правильный способ — функция встроенного языка Новый УникальныйИдентификатор(). Она не обращается к базе данных, работает мгновенно и доступна в любом контексте: на сервере, на клиенте, во внешнем соединении и в фоновых заданиях.
НовыйИд = Новый УникальныйИдентификатор();
Сообщить(НовыйИд); // например: 5d8f3a2e-1b7c-4e9a-9f2b-3c6d8e1a4b5f
Результат имеет тип УникальныйИдентификатор. Если нужна строка (например, для передачи в JSON или веб-сервис), просто используйте значение в строковом контексте — платформа выполнит преобразование автоматически:
СтрокаИд = Строка(Новый УникальныйИдентификатор());
Функция не гарантирует, что такого GUID ещё нет у какого-либо объекта базы, — но вероятность совпадения настолько мала, что ей пренебрегают. Если идентификатор нужен как ключ объекта, правильнее не генерировать его отдельно, а назначать через УстановитьСсылкуНового(), как показано ниже.
- 1Откройте модуль, где нужен идентификатор (процедура, функция, обработка)
- 2Вызовите Новый УникальныйИдентификатор() и сохраните результат в переменную
- 3При необходимости преобразуйте значение в строку для вывода или передачи
- 4Проверьте результат через Сообщить() или отладчик — должна быть строка из 36 символов с дефисами
Как получить GUID существующего объекта
Если объект уже записан в базу, его идентификатор читается методом УникальныйИдентификатор() у ссылки. Это типовой приём при выгрузке данных и построении отчётов по интеграции:
Элемент = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если Не Элемент.Пустая() Тогда
Ид = Элемент.УникальныйИдентификатор();
Сообщить(Строка(Ид));
КонецЕсли;
Обратная задача — найти объект по известному GUID — решается методом ПолучитьСсылку() менеджера объекта. Сначала строку преобразуют в тип УникальныйИдентификатор через конструктор:
Ид = Новый УникальныйИдентификатор("5d8f3a2e-1b7c-4e9a-9f2b-3c6d8e1a4b5f");
СсылкаНаОбъект = Справочники.Номенклатура.ПолучитьСсылку(Ид);
Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект с таким GUID не найден — это битая ссылка");
КонецЕсли;
Учтите: ПолучитьСсылку() возвращает ссылку даже на несуществующий объект, поэтому проверка через ПолучитьОбъект() обязательна, иначе можно случайно «воскресить» битую ссылку при записи.
Как назначить GUID новому объекту до записи
Когда данные загружаются из другой базы и ссылки должны совпадать один в один, идентификатор назначается заранее методом УстановитьСсылкуНового(). После этого объект записывается обычным способом и получает именно заданный GUID:
НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйЭлемент.УстановитьСсылкуНового(
Справочники.Контрагенты.ПолучитьСсылку(
Новый УникальныйИдентификатор("5d8f3a2e-1b7c-4e9a-9f2b-3c6d8e1a4b5f")));
НовыйЭлемент.Наименование = "ООО Пример";
НовыйЭлемент.Записать();
Ключевое условие: УстановитьСсылкуНового() вызывается до первой записи объекта. Если элемент уже записан, изменить его идентификатор штатными средствами нельзя — придётся создавать новый объект и переносить данные. Поэтому при проектировании обменов GUID фиксируется на этапе создания, а не «дописывается» потом.
Перед назначением убедитесь, что объект с таким GUID ещё не существует в базе, иначе запись завершится ошибкой нарушения уникальности. Проверка выполняется тем же ПолучитьСсылку() с последующим ПолучитьОбъект().
Как получить GUID без конфигуратора и внешними средствами
Если под рукой нет сеанса 1С, GUID можно сгенерировать стандартными средствами операционной системы, а затем использовать его в загрузке. В Windows это команда PowerShell:
[guid]::NewGuid().ToString()
В Linux — утилита uuidgen (обычно входит в пакет uuid-runtime):
uuidgen
Также GUID можно посмотреть прямо в пользовательском режиме 1С без программирования: во многих типовых конфигурациях есть команда «Ещё — Вывести список» или обработка поиска по уникальному идентификатору. Кроме того, в адресной строке веб-клиента при открытии объекта часто виден идентификатор ссылки, хотя его формат отличается от классического GUID и требует преобразования.
Сравнение вариантов
Штатный способ внутри 1С. Подходит всегда, когда доступен встроенный язык. Ограничений нет
Нужен, когда GUID должен совпасть с источником при обмене. Требует вызова до записи и проверки занятости
Для подготовки идентификаторов вне 1С, например при проектировании миграции. Значения затем передаются в базу
Подходит для разового ручного поиска без программирования, но медленно при массовой выборке
Как проверить результат и убедиться в корректности
После генерации или назначения идентификатора проверьте три вещи: формат значения, тип данных и фактическую запись объекта. Формат — 36 символов: 32 шестнадцатеричные цифры и 4 дефиса. Тип проверяется функцией ТипЗнч() — должен вернуться УникальныйИдентификатор, а не Строка.
Для назначенного объекта убедитесь, что после записи Ссылка.УникальныйИдентификатор() возвращает именно тот GUID, который вы передавали. Если возвращается другой — значит, УстановитьСсылкуНового() был вызван поздно или объект уже существовал.
Как проверить результат
36 символов, 4 дефиса, только цифры и буквы a-f
Другая длина, лишние символы, фигурные скобки там, где 1С их не ждёт
ТипЗнч() возвращает УникальныйИдентификатор
Возвращается Строка — ПолучитьСсылку() может не найти объект
После Записать() ссылка возвращает тот же идентификатор
Идентификатор отличается или возникает ошибка уникальности
При массовой загрузке с заранее заданными GUID полезно после завершения сверить количество созданных объектов с количеством строк в источнике — расхождение укажет на пропущенные или дублирующиеся записи.
Ограничения и частые вопросы безопасности данных
Идентификатор объекта неизменяем на протяжении жизни объекта. Удаление объекта и создание нового с тем же наименованием даст другой GUID — внешние системы, ссылавшиеся на старое значение, получат битую ссылку. Поэтому в интеграциях объекты не удаляют физически, а помечают на удаление или используют признак архивности.
При копировании базы (например, создании тестовой копии) GUID всех объектов сохраняются. Это удобно для тестирования обменов, но опасно, если тестовая и рабочая базы обмениваются с одной внешней системой — возможны коллизии и перезапись данных. Перед включением обменов из копии измените настройки узлов обмена.
FAQ
Можно ли изменить GUID уже записанного объекта?
Штатными средствами — нет. Идентификатор назначается при первой записи и неизменен. Обходной путь — создать новый объект с нужным GUID через УстановитьСсылкуНового(), перенести в него данные и заменить ссылки в связанных объектах, после чего удалить старый.
Чем GUID отличается от кода справочника или номера документа?
Код и номер — пользовательские реквизиты, которые могут меняться, дублироваться после обменов и перенумеровываться. GUID — внутренний ключ платформы, он уникален и постоянен. Для интеграций и поиска объектов всегда используйте GUID.
Что такое «битая ссылка» и как GUID помогает её найти?
Битая ссылка — ссылка на удалённый объект; в запросах она отображается как строка с GUID. Зная этот GUID, можно через ПолучитьСсылку() понять, к какому типу и объекту она относилась, и восстановить объект с тем же идентификатором при необходимости.
Может ли Новый УникальныйИдентификатор() выдать дубликат?
Теоретически вероятность совпадения существует, но она настолько мала, что в практике 1С ей пренебрегают. Если идентификатор назначается объекту базы, платформа дополнительно контролирует уникальность при записи и выдаст ошибку при конфликте.
Как передать GUID во внешнюю систему через JSON или веб-сервис?
Преобразуйте значение в строку функцией Строка() и передавайте как обычное строковое поле. На стороне приёмника строка разбирается стандартными средствами — формат GUID универсален и одинаково понимается большинством платформ.
Почему GUID из базы SQL не совпадает с тем, что показывает 1С?
В таблицах СУБД идентификатор хранится в бинарном виде с обратным порядком байт в отдельных частях. Прямое чтение из SQL даёт другую строку. Используйте штатные методы 1С или специальные функции преобразования, а не ручную перестановку символов.
Что важно запомнить
Новый GUID создаётся функцией Новый УникальныйИдентификатор(), идентификатор объекта читается методом Ссылка.УникальныйИдентификатор(), а задать GUID при загрузке позволяет УстановитьСсылкуНового() — строго до первой записи. После любых операций проверяйте формат, тип значения и совпадение идентификатора после записи.