Пример контракта сущности — ссылочный тип, который можно использовать в хранимых полях
Цель примера — возможность указывать в реквизите Участники элементы из разных справочников, в том числе из тех, которые могут появиться в будущем.
В проекте есть справочник Встречи, у которого есть реквизит-коллекция Участники. Участниками встречи могут быть сотрудники, клиенты, покупатели, поставщики и т. д. В будущем список участников может расширяться, например, могут добавиться инвесторы.
Чтобы иметь возможность в этом реквизите выбрать элемент из разных справочников, создается контракт сущности УчастникиВстреч. Его реализуют справочники: Сотрудники, Клиенты, Поставщики, Покупатели. Реквизит Участники справочника Встречи имеет тип Массив<УчастникиВстреч.Ссылка?>. Соответственно элемент из любого из этих справочников можно выбрать в качестве участника для встречи. Тогда реквизит Участники справочника Встречи может выглядеть следующим образом:
Реквизиты:
-
Ид: 982dccd4-57e2-4eda-92db-f547ab85126a
Имя: Участники
Тип: Массив<УчастникиВстреч.Ссылка?>
Файл описания контракта УчастникиВстреч.yaml выглядит следующим образом:
ВидЭлемента: КонтрактСущности
Ид: d75b1e97-7b04-4a3c-a456-0d1f0d2fb676
Имя: УчастникиВстреч
ОбластьВидимости: ВПодсистеме
Свойства:
-
Ид: eff0b39d-1d1f-499f-90d4-263bc3f71bd0
Имя: Код
Тип: Строка
МаксимальнаяДлина: 10
ТолькоЧтение: Истина
Когда появится справочник Инвесторы, для него нужно указать, что он реализует контракт УчастникиВстреч. И тогда элементы этого справочника смогут участвовать в этой же механике. Описание справочника Инвесторы может выглядеть следующим образом:
ВидЭлемента: Справочник
Ид: 617ae98c-5f54-4410-92a0-bcf618567dc5
Имя: Инвесторы
ОбластьВидимости: ВПодсистеме
НастройкиТипов:
Справочник.Объект:
Контракты:
- УчастникиВстреч.Объект
Интерфейс:
ПредставлениеОбъекта: Инвесторы
Представление: Код
Реквизиты:
-
Имя: Код
Тип: Строка
-
Ид: 9e550d07-17dc-4076-88fa-23856881442d
Имя: Фамилия
Тип: Строка
-
Ид: fe815141-53c2-4eb4-90a4-a8a78034552f
Имя: Имя
Тип: Строка
Если бы не было контракта сущности, то для того, чтобы реализовать аналогичный механизм нужно было бы делать составной тип у реквизита Участники, включающий типы Сотрудники.Ссылка
, Клиенты.Ссылка
, Поставщики.Ссылка
и Покупатели.Ссылка
. А когда появится справочник Инвесторы, его нужно было бы включить в составной тип этого реквизита. А если таких реквизитов несколько, то можно легко забыть про какой-нибудь из них, в результате чего возникнет ошибка.