Уникальные идентификаторы GUID (Globally Unique Identifier) активно используются в 1С:Предприятие для маркировки объектов, синхронизации данных между базами, интеграции с внешними системами и обеспечения уникальности записей. Без них невозможно корректно организовать обмен данными между узлами распределённой информационной базы, работать с REST API или настраивать сложные механизмы идентификации.

В этой статье вы найдёте все актуальные способы генерации GUID в 1С 8.3 и 8.2 — от стандартных функций платформы до программных решений с использованием внешних компонент. Мы разберём нюансы работы с уникальными идентификаторами в типовых конфигурациях (УТ 11, БП 3.0, ЗУП 3.1, ERP 2), покажем примеры кода для разных сценариев и предупредим о типичных ошибках, которые приводят к дублированию или потере идентификаторов.

Что такое GUID и зачем он нужен в 1С

GUID (или UUID) — это 128-битный идентификатор, который гарантированно уникален в пространстве и времени. В 1С:Предприятие он представлен в формате строки из 36 символов, например: {550E8400-E29B-41D4-A716-446655440000}. Основные области применения:

  • 🔄 Обмен данными между распределёнными базами (РИБ, УРИБ, обмен через XML/JSON)
  • 🔗 Интеграция с внешними системами (сайты, CRM, ERP, банковские сервисы)
  • 📌 Идентификация объектов в механизмах версиирования и истории изменений
  • 🔐 Безопасность: генерация токенов, ключей доступа, маркеров сессий

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

📊 Для чего вы чаще всего используете GUID в 1С?
Для обмена данными между базами
Для интеграции с внешними системами
Для версиирования объектов
Для генерации уникальных ключей
Другой вариант

Способ 1: Стандартная функция НовыйУникальныйИдентификатор()

Самый простой и надёжный способ — использовать встроенную функцию платформы НовыйУникальныйИдентификатор(). Она доступна во всех версиях 1С:Предприятие 8.2/8.3 и генерирует GUID в формате, совместимом с большинством внешних систем.

Пример кода:

Перем мНовыйGUID;

// Генерация нового GUID

мНовыйGUID = Новый УникальныйИдентификатор();

// Вывод результата в сообщение

Сообщить("Сгенерированный GUID: " + мНовыйGUID.УникальныйИдентификатор());

Особенности метода:

  • ✅ Работает без подключения внешних компонент
  • ✅ Совместим с РИБ, УРИБ и другими механизмами обмена
  • ⚠️ В некоторых старых версиях платформы (до 8.3.6) может требовать явного приведения типа
💡

Если вам нужно получить GUID в виде строки без фигурных скобок, используйте конструкцию Строка(мНовыйGUID.УникальныйИдентификатор()) или Формат(мНовыйGUID, "UUID") (в новых версиях платформы).

Способ 2: Генерация через COM-объект (для Windows)

В операционных системах Windows можно использовать COM-объект Scriptlet.TypeLib для генерации GUID. Этот метод полезен, если требуется совместимость с внешними Windows-приложениями или когда нужна альтернатива стандартной функции.

Пример кода:

Перем мGUIDCOM, мРезультатGUID;

Попытка

мGUIDCOM = Новый COMОбъект("Scriptlet.TypeLib");

мРезультатGUID = мGUIDCOM.Guid;

Сообщить("GUID через COM: " + мРезультатGUID);

Исключение

Сообщить("Ошибка создания COM-объекта: " + ОписаниеОшибки());

КонецПопытки;

⚠️ Внимание: Этот метод работает только на Windows и требует прав на создание COM-объектов. В Linux-версиях 1С:Предприятие или при работе через веб-клиент он вызовет ошибку.

Сравнение с стандартной функцией:

Критерий НовыйУникальныйИдентификатор() COM-объект Scriptlet.TypeLib
Кросс-платформенность ✅ Да ❌ Только Windows
Требуются дополнительные права ❌ Нет ✅ Да
Совместимость с РИБ ✅ Полная ✅ Полная
Производительность ⚡ Быстрее ⏳ Медленнее

Способ 3: Использование внешних компонент (для сложных сценариев)

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

  • 📦 AddIn на C++/C# (например, NativeAPI или OneScript.Native)
  • 🌐 HTTP-сервисы (запрос к API, возвращающему GUID)
  • 📄 1С:Интеграция (для работы с Microsoft SQL Server и его функцией NEWID())

Пример подключения внешней компоненты на C#:

// Предварительно компонента должна быть зарегистрирована в системе

Перем мВнешняяКомпонента, мGUIDизКомпоненты;

мВнешняяКомпонента = Новый COMОбъект("MyGuidGenerator.AddIn");

мGUIDизКомпоненты = мВнешняяКомпонента.GenerateGuid();

Сообщить("GUID из внешней компоненты: " + мGUIDизКомпоненты);

⚠️ Внимание: Использование внешних компонент требует их предварительной регистрации на клиентских машинах и может вызвать проблемы при обновлении или смене операционной системы. Всегда тестируйте решение на всех рабочих местах пользователей.
Как зарегистрировать внешнюю компоненту в 1С?

1. Скопируйте файл компоненты (например, MyAddIn.dll) в папку с установленной 1С или в системный каталог (например, C:\Windows\System32).

2. Зарегистрируйте компоненту через командную строку: regsvr32 MyAddIn.dll.

3. В конфигураторе 1С добавьте ссылку на компоненту в разделе Внешние компоненты.

4. Перезапустите 1С и проверьте работоспособность через код: Новый COMОбъект("MyAddIn.ClassName").

Способ 4: Генерация GUID в запросах 1С

В некоторых случаях удобно генерировать GUID непосредственно в тексте запроса — например, при массовом создании записей в регистрах или временных таблицах. Для этого используется функция UUID() (доступна в 1С:Предприятие 8.3.10+).

Пример запроса:

ВЫБРАТЬ

UUID() КАК НовыйИдентификатор,

"Тестовое значение" КАК Описание

ПОМЕСТИТЬ втТаблицаСGUID

Особенности метода:

  • 🔹 Работает только в управляемых формах и тонком клиенте
  • 🔹 Не поддерживается в старых версиях платформы (до 8.3.10)
  • 🔹 Может использоваться для заполнения реквизитов типа УникальныйИдентификатор прямо в запросе

Если функция UUID() недоступна, альтернативный вариант — генерация GUID в коде с последующей передачей в запрос через параметр:

мGUID = Новый УникальныйИдентификатор();

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| &мGUID КАК НовыйИдентификатор,

| ""Тест"" КАК Описание";

Запрос.УстановитьПараметр("мGUID", мGUID);

Результат = Запрос.Выполнить();

💡

Функция UUID() в запросах 1С появилась только в версии 8.3.10. В более старых версиях используйте генерацию GUID в коде с передачей через параметры запроса.

Способ 5: Получение GUID из существующих объектов 1С

Часто требуется не сгенерировать новый GUID, а получить идентификатор уже существующего объекта (справочника, документа, регистра). Для этого у всех прикладных объектов есть свойство УникальныйИдентификатор().

Примеры:

// Получение GUID справочника "Номенклатура"

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

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

Сообщить("GUID номенклатуры: " + мGUID);

// Получение GUID документа "РеализацияТоваровУслуг"

мДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

мGUIDДок = мДокумент.УникальныйИдентификатор();

Сообщить("GUID нового документа: " + мGUIDДок);

Важные нюансы:

  • 🔍 GUID присваивается объекту при первом сохранении в базу. У несозданного объекта (например, СправочникОбъект.Новый()) идентификатора нет.
  • 🔄 При копировании объекта (метод Скопировать()) GUID не копируется — создаётся новый.
  • 🗑️ При удалении объекта его GUID не освобождается и не может быть повторно использован для других объектов.

Используйте УникальныйИдентификатор() только для сохранённых объектов|Не сравнивайте GUID как строки — используйте метод СравнитьУникальныеИдентификаторы()|При обмене данными проверяйте GUID на пустое значение (ЗначениеЗаполнено())|Не модифицируйте GUID вручную — это приведёт к ошибкам синхронизации-->

Типичные ошибки при работе с GUID в 1С и как их избежать

Ошибки с уникальными идентификаторами часто ведут к потере данных, дублированию записей или сбоям обмена. Рассмотрим наиболее распространённые проблемы и способы их решения.

Ошибка 1: Сравнение GUID как строк

Некорректное сравнение:

мGUID1 = Новый УникальныйИдентификатор();

мGUID2 = Новый УникальныйИдентификатор();

Если мGUID1.УникальныйИдентификатор() = мGUID2.УникальныйИдентификатор() Тогда

// Этот код никогда не выполнится, даже если GUID одинаковые!

КонецЕсли;

Правильное сравнение:

Если мGUID1.СравнитьУникальныеИдентификаторы(мGUID2) Тогда

Сообщить("GUID совпадают!");

КонецЕсли;

Ошибка 2: Пустые GUID при обмене данными

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

Если НЕ ЗначениеЗаполнено(мОбъект.УникальныйИдентификатор()) Тогда

мОбъект.УникальныйИдентификатор = Новый УникальныйИдентификатор();

КонецЕсли;

Ошибка 3: Конфликты GUID в распределённых базах

В РИБ или УРИБ конфликты GUID возникают, если:

  • 🔄 Один и тот же объект был изменён в двух узлах одновременно
  • 📥 При обмене не проверяется уникальность идентификаторов
  • 🔧 Вручную изменялись GUID в базе данных
⚠️ Внимание: Если в распределённой базе возник конфликт GUID, не пытайтесь исправить его вручную через SQL или конфигуратор. Используйте штатные механизмы синхронизации или обратитесь к специалисту по . Неправильные действия могут привести к невосстановимой потере данных.

FAQ: Частые вопросы о GUID в 1С

Можно ли в 1С создать GUID без фигурных скобок { }?

Да, для этого используйте функцию Формат() (в новых версиях платформы) или преобразуйте в строку с заменой:

мGUID = Новый УникальныйИдентификатор();

мGUIDБезСкобок = СтрЗаменить(мGUID.УникальныйИдентификатор(), "{", "");

мGUIDБезСкобок = СтрЗаменить(мGUIDБезСкобок, "}", "");

Как сгенерировать GUID в 1С на мобильной платформе?

На мобильной платформе 1С:Предприятие доступна стандартная функция НовыйУникальныйИдентификатор(). Альтернативные методы (например, COM-объекты) не работают. Пример:

мGUID = Новый УникальныйИдентификатор();

Сообщить("GUID на мобильном клиенте: " + мGUID.УникальныйИдентификатор());

Что делать, если при обмене данными GUID дублируются?

Дублирование GUID при обмене указывает на ошибку в логике синхронизации. Проверьте:

  1. Настройки правил обмена (возможно, отключена проверка уникальности)
  2. Код обработчиков ПередЗаписью или ПриЗаписи — там может принудительно присваиваться новый GUID
  3. Логи обмена на наличие ошибок

Если проблема сохраняется, воспользуйтесь обработкой "Поиск и замена дублей по GUID" из 1С:ИТС.

Можно ли использовать GUID как первичный ключ в регистрах сведений?

Технически можно, но это не рекомендуется. GUID занимает 16 байт (против 4 байт у Число или Строка(9)), что увеличивает размер базы и замедляет выборки. Оптимальный вариант — использовать GUID как дополнительный реквизит для синхронизации, а в качестве ключа оставить стандартный тип (например, Строка или Число).

Как проверить, что GUID в 1С соответствует стандарту RFC 4122?

Сгенерированный в 1С GUID соответствует стандарту RFC 4122 (версия 4 — случайные идентификаторы). Проверить его можно:

  1. По длине строки (36 символов с учётом дефисов)
  2. По формату: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx, где 4 — версия, а y — вариант (8, 9, A или B)
  3. С помощью регулярного выражения:
мШаблон = "^\{?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\}?$";

мПроверка = РегВыражение(мШаблон, "i");

Если мПроверка.Найти(мGUID.УникальныйИдентификатор()) Тогда

Сообщить("GUID соответствует стандарту!");

Иначе

Сообщить("Ошибка формата GUID!");

КонецЕсли;