Уникальные идентификаторы (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С:Предприятие хранятся на двух уровнях:
- Уровень СУБД — в служебных таблицах, название которых зависит от используемой платформы:
- Для Microsoft SQL Server: таблица
_1SJOURNAL(для журналов регистрации) и_1SDATA{NNN}(для данных) - Для PostgreSQL: таблицы с префиксом
v81c_, напримерv81c_data{NNN} - Для файлового варианта: в бинарном формате внутри файла
1Cv8.1CD
- Для Microsoft SQL Server: таблица
УникальныйИдентификатор (для метаданных) или 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-отчеты.
Как найти UUID объекта через конфигуратор
Самый надежный способ получить UUID любого объекта метаданных — использовать встроенные средства конфигуратора. Вот пошаговая инструкция:
- Откройте конфигуратор в режиме
1С:Предприятие(с правами администратора) - Перейдите в меню
Файл → Открытьи выберите нужную информационную базу - В дереве метаданных найдите интересующий объект (например, документ
РеализацияТоваровУслуг) - Кликните правой кнопкой по объекту и выберите
Свойства - В открывшемся окне перейдите на вкладку
Прочее— там будет полеУникальный идентификатор
Для программного получения 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С пользователи часто сталкиваются сными проблемами. Рассмотрим наиболее распространенные случаи и способы их устранения.
Проблема 1: UUID не отображается в свойствах объекта
Если поле УникальныйИдентификатор отсутствует в свойствах объекта, это может означать:
- 🔹 Конфигурация устаревшая (до версии 8.1) и не поддерживает UUID
- 🔹 Объект является виртуальным (например, результат запроса)
- 🔹 В конфигурации отключена поддержка уникальных идентификаторов (редко, но встречается в самописных решениях)
- Проверьте версию платформы через
О программев конфигураторе - Обновите конфигурацию до актуальной версии
- Используйте альтернативный метод получения через запросы к СУБД
Решение:
Проблема 2: Дублирование UUID при переносе данных
Одна из самых опасных ситуаций — когда при выгрузке/загрузке данных между базами возникают дубли UUID. Это приводит к:
- 🚨 Ошибкам ссылочной целостности
- 🔄 Проблемам с синхронизацией
- 📊 Некорректной работе отчетов
Причина обычно кроется в некорректной настройке правил обмена или использовании устаревших обработок выгрузки. Решение:
// Пример корректной выгрузки с сохранением UUID
Процедура ВыгрузитьДанные
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка,
| РеализацияТоваровУслуг.УникальныйИдентификатор КАК UUID
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг";
Результат = Запрос.Выполнить;
Выборка = Результат.Выбрать;
Пока Выборка.Следующий Цикл
// Сохраняем UUID в выгружаемые данные
ДанныеДляВыгрузки.Добавить(Выборка.UUID);
КонецЦикла;
КонецПроцедуры
Проблема 3: UUID изменяется после обновления конфигурации
В редких случаях после обновления конфигурации могут измениться UUID объектов метаданных (но не экземпляров!). Это происходит при:
- 🔧 Кардинальном изменении структуры объекта
- 📦 Переносе объекта между подсистемами
- 🔄 Объединении конфигураций
Решение: перед массовым обновлением всегда проверяйте отчет СравнениеКонфигураций на предмет изменений UUID. При критически важных интеграциях зафиксируйте текущие UUID в отдельной таблице для откатных сценариев.
Всегда проверяйте наличие UUID в правилах обмена данных между базами. Отсутствие этого поля в правилах — главная причина дублирования объектов при синхронизации.
Работа с UUID в типовых конфигурациях (УТ, БП, ЗУП)
В стандартных конфигурациях от 1С работа с UUID имеет свои особенности. Рассмотрим нюансы для самых популярных решений.
1С:Управление торговлей (УТ 11)
В УТ 11 UUID активно используется для:
- 📦 Синхронизации с 1С:Розница и 1С:Мобильная торговля
- 📤 Обмена с сайтами на 1С-Битрикс или Shop-Script
- 🔄 Интеграции с 1С:Документооборот
- Откройте документ (например,
Реализация товаров и услуг) - Перейдите на закладку
Дополнительно - Нажмите кнопку
Еще → Служебная информация - В открывшемся окне будет поле
Уникальный идентификатор - 📑 Обмена с 1С:Зарплата и управление персоналом
- 🏦 Интеграции с банк-клиентами (например, СберБизнес)
- 📊 Выгрузки в 1С:Отчетность и Контур.Экстерн
- 👥 Синхронизации с 1С:Бухгалтерией по физическим лицам
- 📋 Обмена с Пенсионным фондом и ФСС
- 🔗 Интеграции с 1С:Документооборот по кадровым документам
Чтобы увидеть UUID в интерфейсе УТ 11:
Для программного доступа в УТ 11 часто используется объект УниверсальныеКоллекцииОбъектов, который позволяет работать с UUID через механизм Управляемые формы.
1С:Бухгалтерия предприятия (БП 3.0)
В БП 3.0 UUID критически важен для:
Особенность БП 3.0 — в некоторых документах (например, Поступление на расчетный счет) UUID может дублироваться в реквизите ИдДок для совместимости со старыми версиями обменов.
1С:Зарплата и управление персоналом (ЗУП 3.1)
В ЗУП 3.1 UUID используется для:
В ЗУП 3.1 UUID физических лиц хранится в справочнике ФизическиеЛица и дублируется в регистре сведений СотрудникиОрганизаций для удобства обмена.
| Конфигурация | Где хранится UUID | Особенности |
|---|---|---|
| УТ 11 | Служебная информация документа | Используется для обмена с розничными системами |
| БП 3.0 | Реквизит"ИдДок" или стандартное поле | Может дублироваться для совместимости |
| ЗУП 3.1 | Справочник"ФизическиеЛица" | Критичен для обмена с госорганами |
| ERP 2.5 | Регистр сведений"УникальныеИдентификаторыОбъектов" | Цentralизованное хранение для всех объектов |
Продвинутые техники работы с 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 объекта, если он не отображается в интерфейсе?
Есть несколько способов:
- Через конфигуратор (как описано выше)
- Через запрос к базе данных (SQL или язык запросов 1С)
- Через отладчик: поставьте точку останова на запись объекта и посмотрите его свойства
- Используйте обработку"Универсальный просмотрщик объектов" (доступна на Инфостарте)
Для файлового варианта базы можно использовать утилиту ChDBFl для анализа внутренней структуры.
Почему при обмене данными между базами возникают дубли UUID?
Основные причины:
- 🔹 В правилах обмена не настроено поле UUID (или оно игнорируется)
- 🔹 Используется устаревшая обработка выгрузки, которая не учитывает UUID
- 🔹 В одной из баз отключена поддержка уникальных идентификаторов
- 🔹 При загрузке данных создаются новые объекты вместо обновления существующих
Решение: проверьте настройки об