Строки в таблице типа Перечисление¶
Закроем диалог сохранения, и перейдём на узел таблицы AbDocumentTypes
- Записи, чтобы добавить строки Incoming
, Outgoing
и Internal
. В колонке Name
будет имя типа документа, а в колонке ID
– числовой код, начиная с единицы. В колонке Библиотека
автоматически будет указана наша библиотека - Ab Partition
.
Дальше следует выделить ячейку под колонкой ID. Теперь начинаем вводить значения, перемещаясь между ячейками по горизонтали клавишей <Tab>
и по вертикали клавишей <Enter>
.
Нажимаем <Ctrl+S>
, чтобы сохранить значения. Теперь эти значения присутствуют не только в схеме данных, но и в таблице AbDocumentTypes
в базе данных.
Разновидности таблиц¶
Следующим шагом будет добавление таблицы AbDocuments
. Эту таблицу потребуется включить в типы карточек, поэтому рассмотрим значения перечисления в поле Используется для типа
, которое и определяет то, каким образом таблица будет использоваться:
-
Не указан
– это обыкновенная таблица, которую можно было добавить и при помощи SQL, если бы добавление через редактор схемы было бы неудобным. Она не может быть включена в карточки, файлы и задания. Но на неё могут быть ссылки из других таких же таблиц, а также из карточек, файлов и заданий (в отличие от таблиц, добавленных вручную через SQL). Ниже мы рассмотрим, насколько удобен механизм ссылок в схеме данных. Также для такой таблицы могут быть заданы строки, которые будут автоматически добавлены при импорте схемы данных, как мы это сделали дляAbDocumentTypes
. Учитывая всё это, абсолютно все таблицы, используемые в проекте на платформе Tessa, рекомендуется добавлять через схему данных и указывать их какНе указан - Перечисление
, если они не должны использоваться в составе карточек, файлов или заданий. -
Карточки
– это таблица, которую можно включить в состав карточек, чтобы хранить данные этих карточек. Такая таблица имеет особую структуру, которую мы рассмотрим ниже. Одна и та же таблица может использоваться в различных типах карточек, например, таблицаDocumentCommonInfo
используется во всех карточках документов в типовом решении (в т.ч. в карточках входящих и исходящих документов, договоров и др.). Эту же таблицу рекомендуется использовать для карточек документов, добавленных в проекте, что мы покажем ниже. -
Файлы
– аналогично для файлов. -
Задания
– аналогично для заданий. С точки зрения схемы данных и UI для редактирования, файлы и задания устроены таким же образом, как и карточки, за исключением специфичных системных полей, за которыми “следит” платформа.
Для Используется для типа
, отличного от Не указан
, в поле Тип секции
уже нельзя использовать Перечисление
. Вместо этого задают один из трёх вариантов:
-
Строковая
– это строковая секция. На каждый экземпляр карточки, файла или задания (в зависимости отИспользуется для типа
), будет приходиться ровно одна строка в этой таблице (конечно, если таблица включена в схему карточки). Например, это таблицаPartners
в карточке контрагента. Использование этого типа секций автоматически добавляет колонку:ID
– уникальный идентификатор карточки. По этому полю создаётся первичный ключ и кластерный индекс. Этот идентификатор автоматически заполняется платформой при создании карточки.
-
Коллекционная
– это коллекционная секция. На каждый экземпляр карточки (и др.) будет приходиться ни одной, одна или несколько строк этой таблицы. Например, это таблица RoleUsers с перечислением пользователей, входящих в департамент. Использование этой секции добавляет колонки:-
ID
– уникальный идентификатор карточки. По нему автоматически создаётся кластерный индекс, но не первичный ключ, т.к. в таблице может быть несколько строк с одним и тем же ID (для одной и той же карточки). -
RowID
– это уникальный идентификатор строки для этой таблицы, который заполняется платформой, когда пользователь добавляет строки. По этому идентификатору автоматически создаётся первичный ключ.
-
-
Иерархическая
– это иерархическая секция. Она аналогична коллекционнойCollections
, но содержит связь между строками “родительский-дочерний” в пределах одного экземпляра карточки посредством колонкиParentRowID
. Например, это таблицаTaskHistory
, содержащая древовидную историю заданий в карточке. Существующие контролы не поддерживают иерархические секции (точнее работают с ними так же, как и с коллекционными), поэтому, скорее всего, при использовании иерархической секции также потребуется написать контрол или обрабатывать иерархическую связь в расширениях. Добавляемые в таблицу колонки:-
ID
– уникальный идентификатор карточки, аналогично секцииCollections
. -
RowID
– уникальный идентификатор строки, аналогично секцииCollections
. -
ParentRowID
– ссылка наRowID
родительской строки илиNull
, если текущая строка является корневой.
-
Для экземпляров карточек платформа автоматически добавляет строку в таблице Instances
, которая содержит системную информацию по карточке (такую, как дата последнего изменения или ссылка на сотрудника, который создал карточку). Поэтому колонка ID
для Используется для типа = Карточки
ссылается на таблицу Instances
и содержит ограничение по внешнему ключу (foreign key), чтобы никакие идентификаторы, кроме идентификаторов карточек, не были записаны в колонку ID
. Аналогично для файлов существует таблица Files
, а для заданий – Tasks
. Файлы и задания в Tessa всегда существуют в рамках какой-либо карточки, поэтому Files
и Tasks
являются коллекционными секциями карточек (Cards + Collections
), которые автоматически используются платформой для всех карточек, для которых есть файлы и задания.
Комплексные (ссылочные) колонки¶
Для таблицы AbDocuments
подойдёт Используется для типа = Карточки
, т.к. мы включим её в тип карточки, и Тип секции = Строковая
, т.к. на каждый экземпляр документа будет приходиться ровно одна строка этой таблицы. Не забудьте для новой таблицы также указать нашу библиотеку - Ab Partition
.
Добавим колонки:
-
Физическую колонку
Subject
, ТипString(Max) Not Null
– тема документа, строка Unicode неограниченного размера, должно быть указано для каждого документа (Not Null). -
Физическую колонку
Number
, ТипInt64 Not Null
– номер документа, 64-битное целое число. -
Комплексную колонку
Type
, ТипReference (Typified) Not Null
– ссылка на тип документа.
Комплексная колонка:
-
Ссылается на строку таблицы, заданной в свойстве Ссылка на таблицу/Referenced table. При этом автоматически создаётся внешний ключ на первичный ключ этой таблицы, если явно не был снят флажок
С внешним ключом/With foreign key
. -
Содержит колонки со значениями внешнего ключа, необходимые для поддержания ссылочной целостности.
-
Содержит референсные колонки, дублирующие данные из таблицы, на которую ссылается комплексная колонка. Обычно такой колонкой является строка, отображаемая в представлениях (отчётах) и контролах карточки.
-
Содержит произвольные колонки, которые логически “включаются” в комплексную колонку. Они могут иметь произвольный тип, но должны начинаться с префикса-имени колонки (здесь это
Type
). Все колонки, включённые в комплексную колонку, добавляются в тип карточки только совместно, поэтому это могут быть колонки, неразрывно связанные со ссылкой и заполняемые в некоторых (или во всех) случаях, когда заполняется ссылка. Например, ссылка на контрагента 1С должна иметь идентификатор карточки Tessa (внешний ключ) и отображаемое имя контрагента (референсная колонка), но она также может иметь идентификатор, загруженный из 1С, если этот контрагент был добавлен из 1С (для добавленных в Tessa контрагентов это поле будет равно Null).
Флажок Ссылка на родителя/Is reference to owner используется для связи между вложенными коллекционными секциями, в такой колонке строка дочерней коллекционной секции ссылается на строку родительской секции. Это позволяет организовать в карточках иерархию с ограниченным уровнем вложенности, причём на каждом уровне могут храниться различные данные. Например, в родительской коллекционной секции могут содержаться этапы согласования с указанием имени этапа и списка ролей, который организуется как дочерняя коллекционная секция, которая содержит ссылку на роль и ссылку на колонку RowID
этапа согласования.
Далее:
-
Укажем таблицу AbDocumentTypes в поле Ссылка на таблицу, т.е. укажем, что колонка Type содержит ссылку на таблицу AbDocumentTypes. Первичным ключом этой таблицы является колонка ID, поэтому в узел колонки “Type” была автоматически добавлена колонка “TypeID”. Физически в БД для таблицы будет создана именно колонка TypeID, в то время как колонка Type определена в метаинформации схемы данных для использования в платформе. Например, комплексную колонку использует ссылочный контрол Reference для заполнения значений.
-
После того, как мы указали тип ссылки, ниже можно флажками выбрать любые поля из целевой таблицы, которые будут входить в ссылку. Поставьте флажок у колонки Name. Обратите внимание, что автоматически добавилась колонка TypeName, дублирующая колонку Name в таблице AbDocumentTypes.
Аналогично добавим последнюю колонку:
-
Partner
, ТипReference (Typified) Null
– ссылка на контрагента. Допустим, что контрагент может быть не задан, поэтому указываем тип данных, как допускающийNull
. -
Далее аналогично добавляем в неё референсную колонку
PartnerName
с именем контрагента. Обратите внимание, что все добавленные колонкиPartnerID
иPartnerName
автоматически указываются как допускающиеNull
.
Сохраним схему <Ctrl+S>
. Все созданные нами объекты в схеме данных сохранены в отдельной библиотеке - Ab Partition
. Боле подробно об использовании библиотек, экспорте и импорте схемы данных/библиотек можно прочитать в Руководстве Администратора.
Теперь можно приступить к созданию типа карточки на вкладке Cards
.