Представления с карточками¶
В карточке документа AbDocument
уже есть несколько полей, связанных со схемой данных, поэтому карточку можно начать использовать. Но созданные карточки нигде не будут отображаться, т.к. в системе не определён источник данных для этих карточек – не создано представление, которое должно быть размещено в рабочем месте.
Метаинформация представления¶
На вкладке Представления нужно создать представление AbDocuments
следующего вида:
Код, который необходимо вставить внутри вкладки "Редактор JSON":
{
"Alias": "AbDocuments",
"Appearance": null,
"Appearances": null,
"AutoSelectFirstRow": true,
"AutoWidthRowLimit": null,
"Caption": "Documents",
"CollapseGroups": false,
"Columns": [
{
"Alias": "DocID",
"Appearance": null,
"CalendarIDColumn": null,
"CalendarOverdueFormat": null,
"CalendarQuantsColumn": null,
"Caption": null,
"Condition": null,
"DisableGrouping": false,
"HasTag": false,
"Hidden": true,
"InvisibleByDefault": false,
"Localizable": false,
"MaxLength": null,
"PlannedColumn": null,
"SortBy": null,
"SortByFormat": null,
"TreatValueAsUtc": false,
"Type": "Guid Not Null"
},
{
"Alias": "DocNumber",
"Appearance": null,
"CalendarIDColumn": null,
"CalendarOverdueFormat": null,
"CalendarQuantsColumn": null,
"Caption": "Number",
"Condition": null,
"DisableGrouping": false,
"HasTag": false,
"Hidden": false,
"InvisibleByDefault": false,
"Localizable": false,
"MaxLength": null,
"PlannedColumn": null,
"SortBy": "t.Number",
"SortByFormat": null,
"TreatValueAsUtc": false,
"Type": "Int64 Not Null"
},
{
"Alias": "DocSubject",
"Appearance": null,
"CalendarIDColumn": null,
"CalendarOverdueFormat": null,
"CalendarQuantsColumn": null,
"Caption": "Subject",
"Condition": null,
"DisableGrouping": false,
"HasTag": false,
"Hidden": false,
"InvisibleByDefault": false,
"Localizable": false,
"MaxLength": null,
"PlannedColumn": null,
"SortBy": null,
"SortByFormat": null,
"TreatValueAsUtc": false,
"Type": "String(Max) Not Null"
},
{
"Alias": "TypeID",
"Appearance": null,
"CalendarIDColumn": null,
"CalendarOverdueFormat": null,
"CalendarQuantsColumn": null,
"Caption": null,
"Condition": null,
"DisableGrouping": false,
"HasTag": false,
"Hidden": true,
"InvisibleByDefault": false,
"Localizable": false,
"MaxLength": null,
"PlannedColumn": null,
"SortBy": null,
"SortByFormat": null,
"TreatValueAsUtc": false,
"Type": "Int16 Not Null"
},
{
"Alias": "TypeName",
"Appearance": null,
"CalendarIDColumn": null,
"CalendarOverdueFormat": null,
"CalendarQuantsColumn": null,
"Caption": "Type",
"Condition": null,
"DisableGrouping": false,
"HasTag": false,
"Hidden": false,
"InvisibleByDefault": false,
"Localizable": false,
"MaxLength": null,
"PlannedColumn": null,
"SortBy": "t.TypeName",
"SortByFormat": null,
"TreatValueAsUtc": false,
"Type": "String(Max) Not Null"
},
{
"Alias": "PartnerID",
"Appearance": null,
"CalendarIDColumn": null,
"CalendarOverdueFormat": null,
"CalendarQuantsColumn": null,
"Caption": null,
"Condition": null,
"DisableGrouping": false,
"HasTag": false,
"Hidden": true,
"InvisibleByDefault": false,
"Localizable": false,
"MaxLength": null,
"PlannedColumn": null,
"SortBy": null,
"SortByFormat": null,
"TreatValueAsUtc": false,
"Type": "Guid Null"
},
{
"Alias": "PartnerName",
"Appearance": null,
"CalendarIDColumn": null,
"CalendarOverdueFormat": null,
"CalendarQuantsColumn": null,
"Caption": "Partner",
"Condition": null,
"DisableGrouping": false,
"HasTag": false,
"Hidden": false,
"InvisibleByDefault": false,
"Localizable": false,
"MaxLength": null,
"PlannedColumn": null,
"SortBy": null,
"SortByFormat": null,
"TreatValueAsUtc": false,
"Type": "String(Max) Null"
}
],
"ConnectionAlias": null,
"DefaultSortColumns": [
{
"Alias": "DocNumber",
"SortDirection": "Descending"
}
],
"EnableAutoWidth": false,
"ExportDataPageLimit": null,
"Extensions": null,
"FormatVersion::int": 3,
"GroupingColumn": null,
"MultiSelect": false,
"Overrides": null,
"PageLimit": null,
"Paging": "No",
"Parameters": [
{
"Alias": "Number",
"AllowedOperands": null,
"AutoCompleteInfo": null,
"AutoCompleteMapping": null,
"Caption": "Number",
"Condition": null,
"DateTimeType": null,
"DisallowedOperands": null,
"DropDownInfo": null,
"EmptyStringIsNotNull": false,
"Hidden": false,
"HideAutoCompleteButton": false,
"IgnoreCase": true,
"Multiple": true,
"RefSection": null,
"TreatValueAsUtc": false,
"Type": "Int64 Not Null"
},
{
"Alias": "Subject",
"AllowedOperands": null,
"AutoCompleteInfo": null,
"AutoCompleteMapping": null,
"Caption": "Subject",
"Condition": null,
"DateTimeType": null,
"DisallowedOperands": null,
"DropDownInfo": null,
"EmptyStringIsNotNull": false,
"Hidden": false,
"HideAutoCompleteButton": false,
"IgnoreCase": true,
"Multiple": true,
"RefSection": null,
"TreatValueAsUtc": false,
"Type": "String(Max) Not Null"
},
{
"Alias": "Type",
"AllowedOperands": null,
"AutoCompleteInfo": {
"ParamAlias": "Name",
"PopupColumns": [
{
"::single_type": "int"
},
1
],
"RefPrefix": "Type",
"ViewAlias": "AbDocumentTypes"
},
"AutoCompleteMapping": null,
"Caption": "Type",
"Condition": null,
"DateTimeType": null,
"DisallowedOperands": null,
"DropDownInfo": {
"PopupColumns": [
{
"::single_type": "int"
},
1
],
"RefPrefix": null,
"ViewAlias": "AbDocumentTypes"
},
"EmptyStringIsNotNull": false,
"Hidden": false,
"HideAutoCompleteButton": false,
"IgnoreCase": true,
"Multiple": true,
"RefSection": [
{
"::single_type": "str"
},
"AbDocumentTypes"
],
"TreatValueAsUtc": false,
"Type": "Int16 Not Null"
},
{
"Alias": "Partner",
"AllowedOperands": null,
"AutoCompleteInfo": {
"ParamAlias": "Name",
"PopupColumns": [
{
"::single_type": "int"
},
1
],
"RefPrefix": "Partner",
"ViewAlias": "Partners"
},
"AutoCompleteMapping": null,
"Caption": "Partner",
"Condition": null,
"DateTimeType": null,
"DisallowedOperands": null,
"DropDownInfo": null,
"EmptyStringIsNotNull": false,
"Hidden": false,
"HideAutoCompleteButton": false,
"IgnoreCase": true,
"Multiple": true,
"RefSection": [
{
"::single_type": "str"
},
"Partners"
],
"TreatValueAsUtc": false,
"Type": "Guid Null"
},
{
"Alias": "PartnerName",
"AllowedOperands": null,
"AutoCompleteInfo": null,
"AutoCompleteMapping": null,
"Caption": "Partner name",
"Condition": null,
"DateTimeType": null,
"DisallowedOperands": null,
"DropDownInfo": null,
"EmptyStringIsNotNull": false,
"Hidden": false,
"HideAutoCompleteButton": false,
"IgnoreCase": true,
"Multiple": true,
"RefSection": null,
"TreatValueAsUtc": false,
"Type": "String(255) Null"
}
],
"QuickSearchParam": null,
"References": [
{
"CardType": null,
"CardTypeColumn": null,
"ColPrefix": "Doc",
"Condition": null,
"DisplayValueColumn": "DocNumber",
"IsCard": true,
"OpenOnDoubleClick": true,
"RefSection": [
{
"::single_type": "str"
},
"AbDocuments"
]
},
{
"CardType": null,
"CardTypeColumn": null,
"ColPrefix": "Type",
"Condition": null,
"DisplayValueColumn": "TypeName",
"IsCard": false,
"OpenOnDoubleClick": false,
"RefSection": [
{
"::single_type": "str"
},
"AbDocumentTypes"
]
},
{
"CardType": null,
"CardTypeColumn": null,
"ColPrefix": "Partner",
"Condition": null,
"DisplayValueColumn": "PartnerName",
"IsCard": true,
"OpenOnDoubleClick": false,
"RefSection": [
{
"::single_type": "str"
},
"Partners"
]
}
],
"RowCountSubset": null,
"RowCounterVisible": false,
"SelectionMode": "Row",
"Subsets": null,
"TagsPosition": "None",
"TreatAsSingleQuery": false,
"TreeGroup": null,
"TreeGroupDisplayValue": null,
"TreeGroupId": null,
"TreeGroupParentId": null,
"TreeId": null,
"TreeParentId": null
}
В метаинформации выше указано следующее:
-
Через
DefaultSortColumns
представление сортируется по умолчанию по колонкеDocNumber
(номер документа) по убыванию номеров. -
Для каждой отображаемой или скрываемой колонки добавляется запись в
Columns
. Если её не добавить, и колонка будет возвращаться в запросеSELECT
, то она отображается с возвращаемым в запросе именем. Например, колонкаPartner
была бы отображена какPartnerName
, а колонкаPartnerID
не была бы скрыта. Также вColumns
задаются сортировкиSortBy
для тех колонок, для которых сортировки актуальны (они требуют наличия индекса в БД для быстрого отображения при наличии большого количества строк в таблицеAbDocuments
).
-
Parameters
позволяет задать параметры фильтрации. Они могут быть как числовыеType: bigint
, так и строковыеType: nvarchar
. В значенииType
указывается тип SQL без размерности, т.е.nvarchar
, а неnvarchar(128)
. Соответственно можно использовать параметры для указания датыType: date
или даты и времениType: datetime
, а также других типов SQL. -
В
Parameters
можно добавлять параметры фильтрации в виде полей с автодополнением по аналогии со ссылочными контролами в карточке. Это сделано для параметра с алиасомType
, который можно как вводить с клавиатуры с автодополнениемAutoCompleteInfo
, так и выбирать через выпадающий список по кнопке со стрелкой внизDropDownInfo
. Поскольку такой параметр выбирает идентификатор типа документа, то в свойствеType
указываетсяint
.-
В
AutoCompleteInfo
указывается:-
Алиас представления с типами документов
View: AbDocumentTypes
, и ещё параметр этого представления, в который передаётся текст, который начал вводить пользователь и который надо дополнитьParamAlias: Name
. -
PopupColumns
перечисляет разделённые пробелами индексы колонок из представленияAbDocumentTypes
, которые должны отображаться в выпадающем списке при автодополнении. Представление возвращает колонкиTypeID
иTypeName
, а вывести надо колонкуTypeName
с именем типа документа, поэтому нужно указать колонку с индексом1
(индекс отсчитывается от нуля). -
Колонка результата запроса представления
RefPrefix: Type
, идентификатор из которой будет передан в параметр с алиасомType
представленияAbDocuments
. -
RefSection
определяет имя секции, на которую ссылается вводимое значение. Это свойство требуется для работы кнопки с троеточием (которая работает так же, как и в ссылочном контроле карточки).
-
-
DropDownInfo
нужен только для небольших справочников, чтобы вывести все их значения через выпадающий список. В свойствеView
также указывается алиас представления, которое будет выполнено для формирования выпадающего списка (никаких параметров в него не передаётся), а в свойствеPopupColumns
перечисляются индексы колонок представленияAbDocumentTypes
, и это снова колонкаTypeName
(индекс1
).
-
-
Параметр с алиасом
Partner
обращается к стандартному справочнику контрагентов из типового решения, данные которого предоставляет представлениеPartners
(можно открыть его в редакторе представлений и изучить параметры). Здесь не используетсяdropdown
, т.к. представление может возвращать тысячи контрагентов, которые не получится вывести через выпадающий список. -
Параметр с алиасом
PartnerName
позволяет искать не по конкретному контрагенту, выбранному из справочника (т.е. не по идентификатору), а по имени контрагента. Таким образом, например, можно найти все документы, которые ссылаются на контрагента с именем, содержащим какую-то подстроку.
-
Reference
с префиксомDoc
(колонкиDocID, DocNumber, DocSubject
) предоставляет ссылку на документ, которую можно использовать, например, чтобы исходящий документ ссылался на входящий документ (для этого в карточке документа потребуется сделать ссылку на документ, т.е. на ту же секциюAbDocuments
). -
Reference
с префиксомType
(TypeID
иTypeName
) предоставляет ссылку на тип документа, который в нём указан. -
Reference
с префиксомPartner
ссылается на того контрагента, на которого ссылается документ (поскольку каждая строка представления описывает один документ, то каждая строка может ссылаться на контрагента, если он указан в документе). Когда представлениеAbDocuments
будет добавлено в рабочее место, то любой пользователь, у которого есть доступ к представлениюAbDocuments
и к рабочему месту Documents, сможет выбрать контрагента по кнопке с троеточием не только из стандартного справочника с контрагентами (в рабочем месте Пользователь), но и изAbDocuments
(если это не работает из TessaAdmin, то изменения были внесены недавно, и надо перезапустить TessaAdmin).
Шаблонизируемый запрос представления¶
Запрос для создаваемого представления будет выглядеть таким образом:
select
t.ID as DocID,
t.Number as DocNumber,
t.Subject as DocSubject,
t.TypeID,
t.TypeName,
t.PartnerID,
t.PartnerName
from AbDocuments t with(nolock)
where 1 = 1
#param(Number, t.Number)
#param(Subject, t.Subject)
#param(Type, t.TypeID)
#param(Partner, t.PartnerID)
#param(PartnerName, t.PartnerName)
order by #order_by
Note
Для группировки данных в представлении можно использовать сабсеты, их настройка описана в этом разделе.
Система скрывает из этого результата колонки с идентификаторами (у которых задано Hidden: true
), и представляет результат пользователю в виде таблицы. Его можно увидеть, если перейти во вкладку Просмотр.
Чтобы все сотрудники получили доступ к представлению, нужно указать роль Все сотрудники
, нажав кнопку Роли в правом верхнем углу окна.
Настройка узла рабочего места¶
Чтобы добавить представление на рабочее место, нужно выбрать вкладку Рабочие места в левой панели навигации, а затем выбрать узел рабочего места Documents
и нажать кнопку Создать -> Представление на панели инструментов сверху. В поле Свойства нужно ввести алиас созданного представления AbDocuments
, Режим отображения - Всегда
, чтобы узел был доступен как в главном окне системы, так и при выборе ссылок через кнопку с троеточием.
После этого необходимо перетащить представление Documents
из списка справа сверху в область размещения узла слева. Проверить результат можно в режиме предпросмотра, нажав кнопку Просмотр в правой верхней части окна. Если в области просмотра отображаются колонки представления, значит представление настроено верно.
Итак, представление добавлено в рабочее место, из которого пользователь сможет увидеть его в TESSA.