1.15 Предопределенные данные как устроены и для каких объектов можно задать
❓ 1.15 Предопределенные данные: как устроены и для каких объектов можно задать?
📚 Документация
Заголовок раздела «📚 Документация»ИТС: Платформа — Предопределенные данные — https://its.1c.ru/db/v8327doc#bookmark:dev:TI000000281
🧠 Краткая теория
Заголовок раздела «🧠 Краткая теория»Предопределённые данные в 1С: как это работает
Заголовок раздела «Предопределённые данные в 1С: как это работает»Предопределённые данные — это элементы объектов метаданных, которые создаются в конфигураторе и доступны в коде без предварительного поиска.
Пример:
РозничныйПокупатель = Справочники.Контрагенты.РозничныйПокупательОсновная цель предопределённых данных — упростить доступ к важным элементам из встроенного языка.
Для каких объектов можно создать предопределенные данные
Заголовок раздела «Для каких объектов можно создать предопределенные данные»Предопределённые данные можно создать для:
- Справочников
- Планов
- планов счетов
- планов видов характеристик
- планов видов расчётов
Внутренний идентификатор предопределённых данных
Заголовок раздела «Внутренний идентификатор предопределённых данных»У каждого предопределённого элемента есть внутренний идентификатор метаданных.
Уникальный (в пределах объекта метаданных) внутренний идентификатор присваивается предопределенному элементу при создании. Он сохраняется при любых перемещениях предопределенных данных между конфигурациями при объединении или копировании. Пример ниже.
🔎 Его можно увидеть:
- при выгрузке конфигурации в XML
Что происходит на уровне базы данных
Заголовок раздела «Что происходит на уровне базы данных»Для объектов, у которых есть предопределённые данные,
в таблицах СУБД существует поле вида PredefinedID (для MSSQL).
👉 В это поле:
- записывается внутренний идентификатор метаданных
Что доступно разработчику в режиме «Предприятие»
Заголовок раздела «Что доступно разработчику в режиме «Предприятие»»На уровне объекта доступны два свойства:
- Предопределенный (Булево)
- ИмяПредопределенныхДанных
⚠️ Важный момент:
Для перепривязки предопределённого элемента к объекту базы данных разработчик использует ИмяПредопределенныхДанных.
Поведение ИмяПредопределенныхДанных
Заголовок раздела «Поведение ИмяПредопределенныхДанных»Очистка имени
Заголовок раздела «Очистка имени»Если установить:
ИмяПредопределенныхДанных = ""Элемент отвязывается от предопределённого элемента конфигурации.
В СУБД поле PredefinedID становится пустым
Перепривязка к другому элементу
Заголовок раздела «Перепривязка к другому элементу»Предопределённое имя можно назначить и другому элементу.
Для этого нужно:
- выбрать нужный элемент
- установить ему
ИмяПредопределенныхДанных, совпадающее с именем предопределённого элемента из конфигуратора
Это возможно только если:
- в базе нет другого элемента с таким же
ИмяПредопределенныхДанных
📘 Пример
Заголовок раздела «📘 Пример»Есть справочник Клиенты
В конфигураторе создан предопределённый элемент «Клиентос»

В XML выгрузки конфигурации видим его внутренний идентификатор

В таблице MSSQL в поле PredefinedID хранится этот же идентификатор
(хранится в другом порядке следования байт)

Очищаем имя:
КлиентОб = Клиент.ПолучитьОбъект();КлиентОб.ИмяПредопределенныхДанных = "";КлиентОб.Записать();
Назначаем имя другому элементу:
КлиентОб = Клиент.ПолучитьОбъект();КлиентОб.ИмяПредопределенныхДанных = "Клиентос";КлиентОб.Записать();

💡 Что это означает на практике
Заголовок раздела «💡 Что это означает на практике»Когда в коде выполняется обращение:
Справочники.Клиенты.КлиентосПлатформа:
- Берёт внутренний идентификатор метаданных
- Ищет элемент в БД по полю
PredefinedID - Возвращает тот элемент, который сейчас к нему привязан
Даже если это уже не тот объект, который был создан изначально
📌Ключевая мысль
Заголовок раздела «📌Ключевая мысль»Предопределённый элемент — это не конкретная строка в таблице,
а связка по внутреннему идентификатору метаданных