Перейти к содержимому

❓ 1.15 Предопределенные данные: как устроены и для каких объектов можно задать?

ИТС: Платформа — Предопределенные данные — https://its.1c.ru/db/v8327doc#bookmark:dev:TI000000281

Предопределённые данные в 1С: как это работает

Заголовок раздела «Предопределённые данные в 1С: как это работает»

Предопределённые данные — это элементы объектов метаданных, которые создаются в конфигураторе и доступны в коде без предварительного поиска.

Пример:

РозничныйПокупатель = Справочники.Контрагенты.РозничныйПокупатель

Основная цель предопределённых данных — упростить доступ к важным элементам из встроенного языка.


Для каких объектов можно создать предопределенные данные

Заголовок раздела «Для каких объектов можно создать предопределенные данные»

Предопределённые данные можно создать для:

  • Справочников
  • Планов
    • планов счетов
    • планов видов характеристик
    • планов видов расчётов

Внутренний идентификатор предопределённых данных

Заголовок раздела «Внутренний идентификатор предопределённых данных»

У каждого предопределённого элемента есть внутренний идентификатор метаданных.
Уникальный (в пределах объекта метаданных) внутренний идентификатор присваивается предопределенному элементу при создании. Он сохраняется при любых перемещениях предопределенных данных между конфигурациями при объединении или копировании. Пример ниже.

🔎 Его можно увидеть:

  • при выгрузке конфигурации в XML

Для объектов, у которых есть предопределённые данные,
в таблицах СУБД существует поле вида PredefinedID (для MSSQL).

👉 В это поле:

  • записывается внутренний идентификатор метаданных

Что доступно разработчику в режиме «Предприятие»

Заголовок раздела «Что доступно разработчику в режиме «Предприятие»»

На уровне объекта доступны два свойства:

  • Предопределенный (Булево)
  • ИмяПредопределенныхДанных

⚠️ Важный момент:
Для перепривязки предопределённого элемента к объекту базы данных разработчик использует ИмяПредопределенныхДанных.


Если установить:

ИмяПредопределенныхДанных = ""

Элемент отвязывается от предопределённого элемента конфигурации.
В СУБД поле PredefinedID становится пустым

Предопределённое имя можно назначить и другому элементу.

Для этого нужно:

  • выбрать нужный элемент
  • установить ему ИмяПредопределенныхДанных, совпадающее с именем предопределённого элемента из конфигуратора

Это возможно только если:

  • в базе нет другого элемента с таким же ИмяПредопределенныхДанных

Есть справочник Клиенты
В конфигураторе создан предопределённый элемент «Клиентос»

Справочник клиенты

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

Идентификатор предопределенного элемента

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

Данные в СУБД

Очищаем имя:

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

Данные в СУБД после очистки связи

Назначаем имя другому элементу:

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

Данные в 1С после привязки нового элемента Данные в СУБД после привязки нового элемента

Когда в коде выполняется обращение:

Справочники.Клиенты.Клиентос

Платформа:

  1. Берёт внутренний идентификатор метаданных
  2. Ищет элемент в БД по полю PredefinedID
  3. Возвращает тот элемент, который сейчас к нему привязан

Даже если это уже не тот объект, который был создан изначально

Предопределённый элемент — это не конкретная строка в таблице,
а связка по внутреннему идентификатору метаданных