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

Представления с карточками

В карточке документа 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.

Back to top