Уникальные идентификаторы (UUID) в 1С:Предприятие — это не просто случайный набор символов, а ключевой элемент, который обеспечивает однозначную идентификацию объектов в базе данных. Без них невозможно корректно организовать обмен данными между системами, синхронизацию с внешними сервисами или даже просто отследить историю изменений документа. Но где именно хранится этот идентификатор? Как его найти, если он не отображается в интерфейсе типовой конфигурации? И почему иногда UUID в 1С может дублироваться при некорректном переносе данных между базами?

Эта статья поможет разобраться во всех нюансах: от базовых понятий до практических примеров получения UUID через встроенный язык, конфигуратор и прямые запросы к СУБД. Мы рассмотрим не только стандартные способы, но и малоизвестные приемы для работы с уникальными идентификаторами в разных версиях платформы — от 1С:Предприятие 8.2 до актуальной 8.3.22. Особое внимание уделим типичным ошибкам, которые приводят к потере UUID при выгрузке/загрузке данных, и способам их предотвращения.

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

UUID (Universally Unique Identifier) в контексте 1С:Предприятие — это 128-битный идентификатор, который присваивается объектам метаданных (документам, справочникам, регистрам) для их однозначного распознавания. В отличие от стандартных реквизитов вроде Ссылка или Номер, UUID остается неизменным даже при переносе объекта между базами или изменении его атрибутов. Это критично важно для:

  • 🔄 Обмена данными между разными информационными базами (например, при синхронизации розничной и оптовой торговли)
  • 📤 Интеграции с внешними системами (ERP, CRM, сайтами) через API или веб-сервисы
  • 🔍 Отслеживания истории изменений объектов в механизме версионирования
  • 🛠️ Восстановления ссылочной целостности после сбоев или некорректных выгрузок

В большинстве типовых конфигураций (УТ 11, БП 3.0, ЗУП 3.1) UUID автоматически генерируется платформой при создании нового объекта и хранится в служебных таблицах базы данных. Однако в некоторых случаях — например, при ручном импорте данных или миграции с устаревших версий — может потребоваться явное управление этими идентификаторами.

⚠️ Внимание: В конфигурациях на управляемых формах (8.3+) UUID объекта может отличаться от UUID его представления в форме. Это важно учитывать при разработке расширений или внешних обработок.

Где физически хранится UUID в базе 1С

Уникальные идентификаторы в 1С:Предприятие хранятся на двух уровнях:

  1. Уровень СУБД — в служебных таблицах, название которых зависит от используемой платформы:
    • Для Microsoft SQL Server: таблица _1SJOURNAL (для журналов регистрации) и _1SDATA{NNN} (для данных)
    • Для PostgreSQL: таблицы с префиксом v81c_, например v81c_data{NNN}
    • Для файлового варианта: в бинарном формате внутри файла 1Cv8.1CD
  • Уровень платформы — в виде свойства объекта УникальныйИдентификатор (для метаданных) или UUID (в некоторых типовых конфигурациях)
  • Для справки: структура хранения UUID в SQL-базе для документа может выглядеть так:

    Поле таблицы Тип данных Описание
    TREF Binary(16) Ссылка на объект (включает UUID)
    RREF Binary(16) Ссылка на родительский объект
    LINE_NO Integer Номер строки (для табличных частей)
    UUID_COLUMN UniqueIdentifier Явное поле с UUID (если добавлено в конфигурации)

    В файловом варианте базы UUID хранятся в бинарном виде внутри структуры 1Cv8.1CD, и их нельзя просмотреть без специализированных инструментов вроде 1C:Repair или ChDBFl. Для анализа таких баз требуется выгружать данные в DT-формат или использовать OT-отчеты.

    📊 С какой СУБД вы работаете в 1С?
    Microsoft SQL Server
    PostgreSQL
    Файловый вариант
    IBM DB2
    Другая

    Как найти UUID объекта через конфигуратор

    Самый надежный способ получить UUID любого объекта метаданных — использовать встроенные средства конфигуратора. Вот пошаговая инструкция:

    1. Откройте конфигуратор в режиме 1С:Предприятие (с правами администратора)
    2. Перейдите в меню Файл → Открыть и выберите нужную информационную базу
    3. В дереве метаданных найдите интересующий объект (например, документ РеализацияТоваровУслуг)
    4. Кликните правой кнопкой по объекту и выберите Свойства
    5. В открывшемся окне перейдите на вкладку Прочее — там будет поле Уникальный идентификатор

    Для программного получения UUID прямо в конфигураторе можно использовать следующий код (в окне отладки Ctrl+Alt+D):

    // Получение UUID текущей конфигурации
    

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

    // Получение UUID конкретного объекта (например, справочника"Номенклатура")

    Спр = Метаданные.Справочники.Номенклатура;

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

    Если вам нужно получить UUID конкретного экземпляра документа или элемента справочника (а не типа объекта), используйте такой код:

    // Получение UUID документа по ссылке
    

    Док = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("000-000001");

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

    // Альтернативный способ через ПолучениеОбъекта

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

    Объект = Ссылка.ПолучитьОбъект;

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

    ⚠️ Внимание: В некоторых конфигурациях (особенно самописных) поле УникальныйИдентификатор может быть скрыто или переименовано. В этом случае проверьте наличие реквизита UUID или ГлобальныйИдентификатор.

    Изучите свойства объекта в конфигураторе|Проверьте вкладку"Прочее" в свойствах|Выполните тестовый запрос через отладчик|Просмотрите структуру таблицы в СУБД (если есть доступ)-->

    Получение UUID через запросы к базе данных

    Для опытных пользователей и администраторов самый эффективный способ массового получения UUID — прямые запросы к СУБД. Рассмотрим примеры для разных платформ:

    Для Microsoft SQL Server

    Используйте следующий запрос для получения UUID документов конкретного типа (например, Document112 — это внутреннее имя документа"РеализацияТоваровУслуг" в УТ 11):

    SELECT
    

    TREF AS [Ссылка],

    CAST(SUBSTRING(TREF, 1, 16) AS UNIQUEIDENTIFIER) AS [UUID],

    NUMSTR AS [Номер],

    DATETM AS [Дата]

    FROM

    _1SDATA112

    WHERE

    MARKDEL = 0x00

    Чтобы узнать внутренние имена таблиц для вашей конфигурации, выполните запрос:

    SELECT
    

    t.name AS [ИмяТаблицы],

    t.object_id,

    p.value AS [ТипОбъекта]

    FROM

    sys.tables t

    JOIN

    sys.extended_properties p ON t.object_id = p.major_id

    WHERE

    p.name ='V8Object'

    Для PostgreSQL

    В PostgreSQL запрос будет выглядеть иначе из-за особенностей хранения бинарных данных:

    SELECT
    

    encode(substring(tref from 1 for 16),'hex') AS uuid_hex,

    numstr AS номер,

    datetm AS дата

    FROM

    v81c_data112

    WHERE

    markdel = E'\x00'

    Для преобразования HEX-строки в стандартный формат UUID (например, 123e4567-e89b-12d3-a456-426614174000) используйте функцию:

    SELECT
    

    encode(substring(tref from 1 for 4),'hex') ||'-' ||

    encode(substring(tref from 5 for 2),'hex') ||'-' ||

    encode(substring(tref from 7 for 2),'hex') ||'-' ||

    encode(substring(tref from 9 for 2),'hex') ||'-' ||

    encode(substring(tref from 11 for 6),'hex') AS standard_uuid

    FROM v81c_data112

    ⚠️ Внимание: Прямые запросы к базе данных могут нарушить целостность данных при некорректном использовании. Всегда делайте резервную копию перед выполнением SQL-запросов, особенно в продуктивных базах.
    💡

    Для удобства работы с UUID в SQL Server создайте представление (VIEW), которое будет автоматически конвертировать бинарные идентификаторы в читаемый формат. Это сэкономит время при повторных запросах.

    Программное получение UUID в 1С (встроенный язык)

    Во встроенном языке 1С:Предприятие есть несколько способов работы с уникальными идентификаторами. Рассмотрим наиболее универсальные методы, которые работают в большинстве конфигураций.

    Метод 1: Через свойство УникальныйИдентификатор

    Самый простой способ — обратиться к свойству объекта:

    // Для документа
    

    Док = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("РТ-000001");

    Если Не Док = Неопределено Тогда

    UUID = Док.УникальныйИдентификатор;

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

    КонецЕсли;

    Обратите внимание на метод УникальныйИдентификатор — он возвращает строку в стандартном формате UUID (с дефисами). Без этого метода вы получите двоичные данные.

    Метод 2: Через механизм XDTO

    Если вам нужно получить UUID в формате, совместимом с веб-сервисами, используйте XDTO:

    // Создаем фабрику XDTO
    

    ФабрикаXDTO = Новый ФабрикаXDTO;

    ТипUUID = ФабрикаXDTO.Tип("http://www.w3.org/2001/XMLSchema","string");

    // Получаем UUID документа

    Док = Документы.ЗаказПокупателя.НайтиПоНомеру("ЗП-000001");

    UUID = Док.УникальныйИдентификатор;

    UUIDСтрока = ФабрикаXDTO.ЗаписатьXML(UUID);

    // Преобразуем в читаемый формат

    Результат = СтрЗаменить(UUIDСтрока,"urn:uuid:","");

    Сообщить(Результат);

    Метод 3: Для справочников и других объектов

    Алгоритм аналогичен работе с документами, но есть нюансы с получением объекта:

    // Для элемента справочника
    

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

    Если Не Элемент = Неопределено Тогда

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

    Иначе

    Сообщить("Элемент не найден!");

    КонецЕсли;

    Для табличных частей документов или справочников UUID получается через ссылку на строку:

    Док = Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру("ПТ-000001");
    

    Для Каждого Строка Из Док.Товары Цикл

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

    КонецЦикла;

    Особенности работы с UUID в распределенных базах

    В РИБ (распределенных информационных базах) UUID используется для синхронизации изменений между узлами. При этом в каждом узле может храниться своя копия UUID для одного и того же объекта, что иногда приводит к конфликтам при слиянии. Для их разрешения используется механизм"приоритета узлов", который настраивается в плане обмена.

    Типичные проблемы с UUID и способы их решения

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

    Проблема 1: UUID не отображается в свойствах объекта

    Если поле УникальныйИдентификатор отсутствует в свойствах объекта, это может означать:

    • 🔹 Конфигурация устаревшая (до версии 8.1) и не поддерживает UUID
    • 🔹 Объект является виртуальным (например, результат запроса)
    • 🔹 В конфигурации отключена поддержка уникальных идентификаторов (редко, но встречается в самописных решениях)
    • Решение:

      1. Проверьте версию платформы через О программе в конфигураторе
      2. Обновите конфигурацию до актуальной версии
      3. Используйте альтернативный метод получения через запросы к СУБД

    Проблема 2: Дублирование UUID при переносе данных

    Одна из самых опасных ситуаций — когда при выгрузке/загрузке данных между базами возникают дубли UUID. Это приводит к:

    • 🚨 Ошибкам ссылочной целостности
    • 🔄 Проблемам с синхронизацией
    • 📊 Некорректной работе отчетов

    Причина обычно кроется в некорректной настройке правил обмена или использовании устаревших обработок выгрузки. Решение:

    // Пример корректной выгрузки с сохранением UUID
    

    Процедура ВыгрузитьДанные

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

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

    "ВЫБРАТЬ

    | РеализацияТоваровУслуг.Ссылка КАК Ссылка,

    | РеализацияТоваровУслуг.УникальныйИдентификатор КАК UUID

    |ИЗ

    | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг";

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

    Выборка = Результат.Выбрать;

    Пока Выборка.Следующий Цикл

    // Сохраняем UUID в выгружаемые данные

    ДанныеДляВыгрузки.Добавить(Выборка.UUID);

    КонецЦикла;

    КонецПроцедуры

    Проблема 3: UUID изменяется после обновления конфигурации

    В редких случаях после обновления конфигурации могут измениться UUID объектов метаданных (но не экземпляров!). Это происходит при:

    • 🔧 Кардинальном изменении структуры объекта
    • 📦 Переносе объекта между подсистемами
    • 🔄 Объединении конфигураций

    Решение: перед массовым обновлением всегда проверяйте отчет СравнениеКонфигураций на предмет изменений UUID. При критически важных интеграциях зафиксируйте текущие UUID в отдельной таблице для откатных сценариев.

    💡

    Всегда проверяйте наличие UUID в правилах обмена данных между базами. Отсутствие этого поля в правилах — главная причина дублирования объектов при синхронизации.

    Работа с UUID в типовых конфигурациях (УТ, БП, ЗУП)

    В стандартных конфигурациях от работа с UUID имеет свои особенности. Рассмотрим нюансы для самых популярных решений.

    1С:Управление торговлей (УТ 11)

    В УТ 11 UUID активно используется для:

    • 📦 Синхронизации с 1С:Розница и 1С:Мобильная торговля
    • 📤 Обмена с сайтами на 1С-Битрикс или Shop-Script
    • 🔄 Интеграции с 1С:Документооборот
    • Чтобы увидеть UUID в интерфейсе УТ 11:

      1. Откройте документ (например, Реализация товаров и услуг)
      2. Перейдите на закладку Дополнительно
      3. Нажмите кнопку Еще → Служебная информация
      4. В открывшемся окне будет поле Уникальный идентификатор

      Для программного доступа в УТ 11 часто используется объект УниверсальныеКоллекцииОбъектов, который позволяет работать с UUID через механизм Управляемые формы.

      1С:Бухгалтерия предприятия (БП 3.0)

      В БП 3.0 UUID критически важен для:

      • 📑 Обмена с 1С:Зарплата и управление персоналом
      • 🏦 Интеграции с банк-клиентами (например, СберБизнес)
      • 📊 Выгрузки в 1С:Отчетность и Контур.Экстерн

      Особенность БП 3.0 — в некоторых документах (например, Поступление на расчетный счет) UUID может дублироваться в реквизите ИдДок для совместимости со старыми версиями обменов.

      1С:Зарплата и управление персоналом (ЗУП 3.1)

      В ЗУП 3.1 UUID используется для:

      • 👥 Синхронизации с 1С:Бухгалтерией по физическим лицам
      • 📋 Обмена с Пенсионным фондом и ФСС
      • 🔗 Интеграции с 1С:Документооборот по кадровым документам

      В ЗУП 3.1 UUID физических лиц хранится в справочнике ФизическиеЛица и дублируется в регистре сведений СотрудникиОрганизаций для удобства обмена.

      Конфигурация Где хранится UUID Особенности
      УТ 11 Служебная информация документа Используется для обмена с розничными системами
      БП 3.0 Реквизит"ИдДок" или стандартное поле Может дублироваться для совместимости
      ЗУП 3.1 Справочник"ФизическиеЛица" Критичен для обмена с госорганами
      ERP 2.5 Регистр сведений"УникальныеИдентификаторыОбъектов" Цentralизованное хранение для всех объектов
      📊 С какой типовой конфигурацией 1С вы работаете?
      УТ 11
      БП 3.0
      ЗУП 3.1
      ERP 2
      КА 2
      Другая
      Не использую типовые

      Продвинутые техники работы с UUID

      Для разработчиков и администраторов, которым требуется более глубокая работа с уникальными идентификаторами, рассмотрим несколько продвинутых приемов.

      Генерация нового UUID программно

      Иногда требуется сгенерировать новый UUID для объекта (например, при миграции данных из старой системы). Сделать это можно так:

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

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

      // Присваивание объекту (пример для документа)

      Док = Документы.ЗаказПокупателя.СоздатьДокумент;

      Док.УникальныйИдентификатор = НовыйUUID;

      Док.Записать;

      Важно: при ручном назначении UUID следите за его уникальностью в пределах всей базы! Для проверки уникальности используйте запрос:

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

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

      "ВЫБРАТЬ РАЗРЕШЕННЫЕ

      | Документ.ЗаказПокупателя.УникальныйИдентификатор КАК UUID

      |ИЗ

      | Документ.ЗаказПокупателя КАК Документ.ЗаказПокупателя

      |ГДЕ

      | Документ.ЗаказПокупателя.УникальныйИдентификатор = &UUID";

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

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

      Если Результат.Пустой Тогда

      Сообщить("UUID уникален");

      Иначе

      Сообщить("ОШИБКА: UUID уже существует!");

      КонецЕсли;

      Массовое обновление UUID

      При миграции данных иногда требуется массово обновить UUID объектов. Это опасная операция, но иногда необходимая. Пример кода для массового обновления:

      Процедура ОбновитьUUIDВСправочнике
      

      Спр = Справочники.Номенклатура;

      Выборка = Спр.Выбрать;

      Пока Выборка.Следующий Цикл

      Объект = Выборка.ПолучитьОбъект;

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

      Объект.Записать;

      КонецЦикла;

      КонецПроцедуры

      ⚠️ Внимание: Массовое изменение UUID приведет к разрыву всех существующих ссылок на эти объекты в других системах! Эта операция должна выполняться только в тестовых базах или в рамках согласованной миграции с полным пересозданием интеграционных связей.

      Работа с UUID в расширениях конфигурации

      При разработке расширений для типовых конфигураций часто требуется получить UUID объекта из основной конфигурации. Используйте такой подход:

      // В модуле расширения
      

      &НаКлиенте

      Процедура ПолучитьUUIDОбъекта(Команда)

      Объект = ПараметрыВыполненияКоманды.Объект;

      Если ТипЗнч(Объект) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда

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

      КонецЕсли;

      КонецПроцедуры

      Для работы с метаданными основной конфигурации из расширения используйте:

      // Получение UUID справочника из основной конфигурации
      

      ОсновнаяКонфигурация = Метаданные.ОсновнаяКонфигурация;

      СпрНоменклатура = ОсновнаяКонфигурация.Справочники.Найти("Номенклатура");

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

      💡

      При разработке интеграций всегда фиксируйте UUID объектов в логах обмена. Это значительно ускорит диагностику проблем при синхронизации.

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

      Можно ли в 1С изменить UUID существующего объекта?

      Технически да, но это крайне не рекомендуется. Изменение UUID приведет к разрыву всех внешних ссылок на этот объект. Если это необходимо (например, при слиянии баз), используйте специализированные обработки, которые могут обновлять ссылки во всех связанных объектах.

      Пример безопасного изменения:

      // 1. Создаем новый объект с нужным UUID
      

      НовыйОбъект = Документы.ЗаказПокупателя.СоздатьДокумент;

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

      // 2. Копируем данные из старого объекта

      СтарыйОбъект = Документы.ЗаказПокупателя.НайтиПоНомеру("ЗП-000001");

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

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

      //... копируем остальные реквизиты

      // 3. Записываем новый объект

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

      // 4. Обновляем ссылки в связанных объектах

      // (этот шаг зависит от конкретной конфигурации)

      Как найти UUID объекта, если он не отображается в интерфейсе?

      Есть несколько способов:

      1. Через конфигуратор (как описано выше)
      2. Через запрос к базе данных (SQL или язык запросов 1С)
      3. Через отладчик: поставьте точку останова на запись объекта и посмотрите его свойства
      4. Используйте обработку"Универсальный просмотрщик объектов" (доступна на Инфостарте)

      Для файлового варианта базы можно использовать утилиту ChDBFl для анализа внутренней структуры.

      Почему при обмене данными между базами возникают дубли UUID?

      Основные причины:

      • 🔹 В правилах обмена не настроено поле UUID (или оно игнорируется)
      • 🔹 Используется устаревшая обработка выгрузки, которая не учитывает UUID
      • 🔹 В одной из баз отключена поддержка уникальных идентификаторов
      • 🔹 При загрузке данных создаются новые объекты вместо обновления существующих

      Решение: проверьте настройки об