В процессе разработки на платформе 1С:Предприятие 8 часто возникает вопрос: как система понимает, что два объекта в разных конфигурациях — это один и тот же объект, даже если их имена различаются? Или наоборот, почему два реквизита с одинаковыми именами могут считаться платформой абсолютно разными сущностями? Все дело во внутренних идентификаторах (UUID). Разберем подробно, как они работают, что происходит при копировании реквизитов и какими способами можно увидеть эти скрытые данные.
Каждый объект метаданных в 1С (будь то справочник, документ или обычный реквизит) обладает уникальным внутренним идентификатором — UUID (Universally Unique Identifier). Это 128-битное число, которое генерируется платформой автоматически в момент создания объекта.
Важно понимать разницу между именем реквизита и его идентификатором:
Реквизит1) — это строковый идентификатор для разработчика и кода. Оно может быть изменено в любой момент.Отвечая на основной вопрос: нет, при копировании реквизита его внутренний идентификатор не будет прежним. Платформа создаст абсолютно новый UUID для скопированного элемента. Рассмотрим подробнее, почему это происходит и на что влияет.
Когда мы копируем Реквизит1 и получаем Реквизит2, платформа выполняет операцию создания нового объекта метаданных, копируя лишь его свойства (тип, длину, точность, синоним). Поскольку это новый объект, ему назначается новый уникальный UUID.
Проанализируем последствия этого процесса:
_Fld1234).Существует несколько способов "вытащить" скрытый UUID объекта метаданных. Рассмотрим их от простых к более продвинутым.
Это самый надежный способ увидеть идентификаторы всех объектов сразу. Разберем его по шагам:
Catalog.Справочник1.xml).Внутри файла мы увидим структуру XML. Идентификатор реквизита будет находиться в атрибуте uuid. Рассмотрим пример фрагмента такого файла:
<ChildObjects>
<Attribute uuid="a1b2c3d4-e5f6-7a8b-9c0d-e1f2a3b4c5d6">
<Properties>
<Name>Реквизит1</Name>
<Type>
<v8:Type>xs:string</v8:Type>
</Type>
</Properties>
</Attribute>
</ChildObjects>
Если нам нужно узнать UUID реквизита непосредственно во время работы программы или для целей автоматизации, мы можем воспользоваться методом UUID() объекта метаданных. Проанализируем пример кода, который выводит идентификатор реквизита справочника:
// Получаем объект метаданных реквизита
РеквизитМетаданные = Метаданные.Справочники.Справочник1.Реквизиты.Реквизит1;
// Извлекаем UUID
ВнутреннийИдентификатор = РеквизитМетаданные.UUID();
// Выводим результат
Сообщить("UUID реквизита: " + Строка(ВнутреннийИдентификатор));
Этот метод работает для любых объектов метаданных: справочников, документов, перечислений и их табличных частей.
Выясним, как платформа использует UUID при сравнении двух конфигураций. Существует три основных сценария, которые важно различать:
Рассмотрим ситуацию: вам нужно изменить назначение реквизита. У вас есть два пути:
Реквизит1 на НовоеНазначение. В этом случае UUID сохраняется. При обновлении базы данных данные в этой колонке у существующих элементов сохранятся.Реквизит1 и создать новый реквизит НовоеНазначение. В этом случае создается новый UUID. Платформа воспримет это как удаление старой колонки (данные будут стерты!) и создание новой пустой колонки.Важный совет: Если вы хотите "перенести" реквизит из одной конфигурации в другую (неродственную) так, чтобы 1С считала их "родственниками", единственный способ сделать это — ручная правка UUID в XML-файлах выгрузки перед загрузкой конфигурации. Однако это считается "черной магией" и должно выполняться с осторожностью.
Хотя UUID метаданных напрямую не используется как имя колонки в SQL, связь между ними жесткая. Платформа хранит таблицу соответствий в системных таблицах базы данных (DBSchema). Для просмотра соответствия имен в 1С и имен в SQL можно использовать функцию:
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных("Справочник.Справочник1");
// В полученной таблице значений будут колонки ИмяПоля и ИмяТаблицыХранения
Таким образом, мы видим, что внутренняя архитектура 1С глубоко завязана на уникальные идентификаторы. Понимание того, что копия реквизита — это всегда новый идентификатор, поможет вам избежать ошибок при масштабных доработках и объединениях сложных информационных систем.