Перейти к содержанию

Строки в таблице типа Перечисление

Закроем диалог сохранения, и перейдём на узел таблицы AbDocumentTypes - Записи, чтобы добавить строки Incoming, Outgoing и Internal. В колонке Name будет имя типа документа, а в колонке ID – числовой код, начиная с единицы. В колонке Библиотека автоматически будет указана наша библиотека - Ab Partition.

Дальше следует выделить ячейку под колонкой ID. Теперь начинаем вводить значения, перемещаясь между ячейками по горизонтали клавишей <Tab> и по вертикали клавишей <Enter>.

Нажимаем <Ctrl+S>, чтобы сохранить значения. Теперь эти значения присутствуют не только в схеме данных, но и в таблице AbDocumentTypes в базе данных.

Разновидности таблиц

Следующим шагом будет добавление таблицы AbDocuments. Эту таблицу потребуется включить в типы карточек, поэтому рассмотрим значения перечисления в поле Используется для типа, которое и определяет то, каким образом таблица будет использоваться:

  1. Не указан – это обыкновенная таблица, которую можно было добавить и при помощи SQL, если бы добавление через редактор схемы было бы неудобным. Она не может быть включена в карточки, файлы и задания. Но на неё могут быть ссылки из других таких же таблиц, а также из карточек, файлов и заданий (в отличие от таблиц, добавленных вручную через SQL). Ниже мы рассмотрим, насколько удобен механизм ссылок в схеме данных. Также для такой таблицы могут быть заданы строки, которые будут автоматически добавлены при импорте схемы данных, как мы это сделали для AbDocumentTypes. Учитывая всё это, абсолютно все таблицы, используемые в проекте на платформе Tessa, рекомендуется добавлять через схему данных и указывать их как Не указан - Перечисление, если они не должны использоваться в составе карточек, файлов или заданий.

  2. Карточки – это таблица, которую можно включить в состав карточек, чтобы хранить данные этих карточек. Такая таблица имеет особую структуру, которую мы рассмотрим ниже. Одна и та же таблица может использоваться в различных типах карточек, например, таблица DocumentCommonInfo используется во всех карточках документов в типовом решении (в т.ч. в карточках входящих и исходящих документов, договоров и др.). Эту же таблицу рекомендуется использовать для карточек документов, добавленных в проекте, что мы покажем ниже.

  3. Файлы – аналогично для файлов.

  4. Задания – аналогично для заданий. С точки зрения схемы данных и UI для редактирования, файлы и задания устроены таким же образом, как и карточки, за исключением специфичных системных полей, за которыми “следит” платформа.

Для Используется для типа, отличного от Не указан, в поле Тип секции уже нельзя использовать Перечисление. Вместо этого задают один из трёх вариантов:

  1. Строковая – это строковая секция. На каждый экземпляр карточки, файла или задания (в зависимости от Используется для типа), будет приходиться ровно одна строка в этой таблице (конечно, если таблица включена в схему карточки). Например, это таблица Partners в карточке контрагента. Использование этого типа секций автоматически добавляет колонку:

    • ID – уникальный идентификатор карточки. По этому полю создаётся первичный ключ и кластерный индекс. Этот идентификатор автоматически заполняется платформой при создании карточки.
  2. Коллекционная – это коллекционная секция. На каждый экземпляр карточки (и др.) будет приходиться ни одной, одна или несколько строк этой таблицы. Например, это таблица RoleUsers с перечислением пользователей, входящих в департамент. Использование этой секции добавляет колонки:

    • ID – уникальный идентификатор карточки. По нему автоматически создаётся кластерный индекс, но не первичный ключ, т.к. в таблице может быть несколько строк с одним и тем же ID (для одной и той же карточки).

    • RowID – это уникальный идентификатор строки для этой таблицы, который заполняется платформой, когда пользователь добавляет строки. По этому идентификатору автоматически создаётся первичный ключ.

  3. Иерархическая – это иерархическая секция. Она аналогична коллекционной 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 – ссылка на тип документа.

Комплексная колонка:

  1. Ссылается на строку таблицы, заданной в свойстве Ссылка на таблицу/Referenced table. При этом автоматически создаётся внешний ключ на первичный ключ этой таблицы, если явно не был снят флажок С внешним ключом/With foreign key.

  2. Содержит колонки со значениями внешнего ключа, необходимые для поддержания ссылочной целостности.

  3. Содержит референсные колонки, дублирующие данные из таблицы, на которую ссылается комплексная колонка. Обычно такой колонкой является строка, отображаемая в представлениях (отчётах) и контролах карточки.

  4. Содержит произвольные колонки, которые логически “включаются” в комплексную колонку. Они могут иметь произвольный тип, но должны начинаться с префикса-имени колонки (здесь это Type). Все колонки, включённые в комплексную колонку, добавляются в тип карточки только совместно, поэтому это могут быть колонки, неразрывно связанные со ссылкой и заполняемые в некоторых (или во всех) случаях, когда заполняется ссылка. Например, ссылка на контрагента 1С должна иметь идентификатор карточки Tessa (внешний ключ) и отображаемое имя контрагента (референсная колонка), но она также может иметь идентификатор, загруженный из 1С, если этот контрагент был добавлен из 1С (для добавленных в Tessa контрагентов это поле будет равно Null).

Флажок Ссылка на родителя/Is reference to owner используется для связи между вложенными коллекционными секциями, в такой колонке строка дочерней коллекционной секции ссылается на строку родительской секции. Это позволяет организовать в карточках иерархию с ограниченным уровнем вложенности, причём на каждом уровне могут храниться различные данные. Например, в родительской коллекционной секции могут содержаться этапы согласования с указанием имени этапа и списка ролей, который организуется как дочерняя коллекционная секция, которая содержит ссылку на роль и ссылку на колонку RowID этапа согласования.

Далее:

  1. Укажем таблицу AbDocumentTypes в поле Ссылка на таблицу, т.е. укажем, что колонка Type содержит ссылку на таблицу AbDocumentTypes. Первичным ключом этой таблицы является колонка ID, поэтому в узел колонки “Type” была автоматически добавлена колонка “TypeID”. Физически в БД для таблицы будет создана именно колонка TypeID, в то время как колонка Type определена в метаинформации схемы данных для использования в платформе. Например, комплексную колонку использует ссылочный контрол Reference для заполнения значений.

  2. После того, как мы указали тип ссылки, ниже можно флажками выбрать любые поля из целевой таблицы, которые будут входить в ссылку. Поставьте флажок у колонки Name. Обратите внимание, что автоматически добавилась колонка TypeName, дублирующая колонку Name в таблице AbDocumentTypes.

Аналогично добавим последнюю колонку:

  1. Partner, Тип Reference (Typified) Null – ссылка на контрагента. Допустим, что контрагент может быть не задан, поэтому указываем тип данных, как допускающий Null.

  2. Далее аналогично добавляем в неё референсную колонку PartnerName с именем контрагента. Обратите внимание, что все добавленные колонки PartnerID и PartnerName автоматически указываются как допускающие Null.

Сохраним схему <Ctrl+S>. Все созданные нами объекты в схеме данных сохранены в отдельной библиотеке - Ab Partition. Боле подробно об использовании библиотек, экспорте и импорте схемы данных/библиотек можно прочитать в Руководстве Администратора.

Теперь можно приступить к созданию типа карточки на вкладке Cards.

Back to top