Платформа 3V/Формы/Источники данных/Справочник/Фильтрация/От другого справочника: различия между версиями
(не показаны 23 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | + | Фильтр EntryFilter позволяет выбрать данные в справочнике относительно другого связного справочника. Элементы одного справочника будут отображаться в зависимости от выбранных элементов другого справочника. Элемент "filter" добавляется в источник, который необходимо отфильтровать. | |
− | |||
− | Фильтр | ||
Фильтр имеет следующую структуру: | Фильтр имеет следующую структуру: | ||
<syntaxhighlight lang="JSON" line> | <syntaxhighlight lang="JSON" line> | ||
Строка 17: | Строка 15: | ||
"inversion": false, | "inversion": false, | ||
"conditionId": null, | "conditionId": null, | ||
− | "discriminator": " | + | "discriminator": "EntryFilter" |
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 23: | Строка 21: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! Свойство !! Описание | + | ! Свойство !! Обязательность !!Описание |
|- | |- | ||
− | | dictionaryEntrySourceId || Id источника | + | | dictionaryEntrySourceId || + ||Id источника данных на форме с типом "Справочник", от значений которого будут фильтроваться данные |
|- | |- | ||
− | | sourceAttribute|| [[Платформа_3V/Справочник/Связи_атрибутов_справочников|''' | + | | sourceAttribute|| + || [[Платформа_3V/Справочник/Связи_атрибутов_справочников|''' Идентификатор атрибута''']] справочника, от значений которого будут фильтроваться данные, указанного в dictionaryEntrySourceId |
|- | |- | ||
− | | attribute|| [[Платформа_3V/Справочник/Связи_атрибутов_справочников|''' | + | | attribute|| + || [[Платформа_3V/Справочник/Связи_атрибутов_справочников|''' Идентификатор атрибута''']] текущего настраиваемого справочника, с которым связано значение справочника от которого идет фильтрация. Указывается номер Id и тип атрибута в данном случае собственный (OwnAttributeDefinitionDto), так как используются данные текущего справочника. |
|- | |- | ||
− | | discriminator|| | + | | discriminator|| + || EntryFilter |
|- | |- | ||
− | | conditionType || Тип условий | + | | conditionType || - ||[[Платформа_3V/Формы/Источники_данных/Справочник/Фильтрация#Типы%20условий%20фильтрации%20(conditionType)| '''Тип условий''']] |
|- | |- | ||
− | | inversion || В значении "false" | + | | inversion || + || В значении "false" источник-справочник принимает значения, которые удовлетворяют фильтру, в значении "true" - все значения, которые наоборот не удовлетворяют ему |
|- | |- | ||
− | | conditionId || [[Платформа_3V/Формы/Правила| '''Условия''']], при которых применяется фильтр | + | | conditionId || - || [[Платформа_3V/Формы/Правила| '''Условия''']], при которых применяется фильтр |
|} | |} | ||
− | == Пример | + | == Особенности использования == |
− | Справочник "Контрагенты" содержит связный атрибут "Виды контрагентов". Можно создать | + | Важно, если фильтрация происходит по связанному атрибуту с типом "Элемент справочника", фильтрация, т.е. связь sourceAttribute и attribute будет происходить по атрибуту "Идентификатор", а не по атрибуту "Наименование"! |
+ | |||
+ | При использовании в фильтрации источника - справочника транзитивного атрибута другого источника - справочника необходимо обязательно указать в источнике, от которого происходит фильтрация, в блоке "dictionaryAttributes" [[Платформа_3V/Справочник/Связи_атрибутов_справочников|'''все атрибуты (транзитивные и собственные)''']], которые используются. Пример см.ниже "Пример фильтрации от транзитивного атрибута" | ||
+ | |||
+ | == Пример фильтрации от собственного атрибута справочника== | ||
+ | Справочник "Контрагенты" содержит связный атрибут "Виды контрагентов". Можно создать форму у в которой, при выборе из выпадающего списка "Вида контрагентов", элементы следующего выпадающего списка "Контрагенты" будут только выбранного вида. | ||
+ | [[Файл:Screenshot 2021-04-15 at 10.34.19.png|400px|безрамки|без]] | ||
<div class="toccolours mw-collapsible mw-collapsed" style="width:800px; overflow:auto;"> | <div class="toccolours mw-collapsible mw-collapsed" style="width:800px; overflow:auto;"> | ||
Строка 49: | Строка 53: | ||
{ | { | ||
"id": 10735, | "id": 10735, | ||
− | "name": "Пример фильтра от справочника ( | + | "name": "Пример фильтра от справочника (EntryFilter)", |
"description": null, | "description": null, | ||
"title": "Пример фильтрации_справочник от справочника", | "title": "Пример фильтрации_справочник от справочника", | ||
Строка 55: | Строка 59: | ||
"uiSources": [ | "uiSources": [ | ||
{ | { | ||
− | " | + | "dataSourceId": 2, |
− | " | + | "nameTemplate": "", |
− | " | + | "displayAttribute": null, |
+ | "hasMultipleValue": false, | ||
+ | "hasNullableValue": false, | ||
+ | "maxElements": null, | ||
+ | "hasServerFiltration": false, | ||
+ | "searchSettings": { | ||
+ | "maxElements": null, | ||
+ | "minInputChars": 2, | ||
+ | "searchMode": "Client", | ||
+ | "debounceMs": 300 | ||
}, | }, | ||
− | + | "id": 1, | |
− | + | "caption": "Вид контрагента", | |
− | |||
− | |||
− | "id": | ||
− | "caption": " | ||
"enable": true, | "enable": true, | ||
"visible": true, | "visible": true, | ||
"hint": null, | "hint": null, | ||
− | |||
"doActionOnChangeValue": true, | "doActionOnChangeValue": true, | ||
"onAfterChangeValueConditionalActions": null, | "onAfterChangeValueConditionalActions": null, | ||
"onAfterChangeValueByClientConditionalActions": null, | "onAfterChangeValueByClientConditionalActions": null, | ||
− | "rebuildDependentsObjectOnChange": | + | "rebuildDependentsObjectOnChange": true, |
"enableRuleIds": [], | "enableRuleIds": [], | ||
"visibleRuleIds": [], | "visibleRuleIds": [], | ||
"access": null, | "access": null, | ||
− | "isValueChanged": | + | "isValueChanged": true, |
"expressionId": null, | "expressionId": null, | ||
− | "discriminator": " | + | "discriminator": "DictionarySourceEntry" |
}, | }, | ||
{ | { | ||
− | "dataSourceId": | + | "dataSourceId": 3, |
"nameTemplate": "", | "nameTemplate": "", | ||
"displayAttribute": null, | "displayAttribute": null, | ||
Строка 94: | Строка 102: | ||
"debounceMs": 300 | "debounceMs": 300 | ||
}, | }, | ||
− | "id": | + | "id": 2, |
− | "caption": " | + | "caption": "Контрагенты", |
"enable": true, | "enable": true, | ||
"visible": true, | "visible": true, | ||
"hint": null, | "hint": null, | ||
− | " | + | "doActionOnChangeValue": false, |
+ | "onAfterChangeValueConditionalActions": null, | ||
+ | "onAfterChangeValueByClientConditionalActions": null, | ||
+ | "rebuildDependentsObjectOnChange": true, | ||
+ | "enableRuleIds": [], | ||
+ | "visibleRuleIds": [], | ||
+ | "access": null, | ||
+ | "isValueChanged": false, | ||
+ | "expressionId": null, | ||
+ | "discriminator": "DictionarySourceEntry" | ||
+ | } | ||
+ | ], | ||
+ | "entryDataSources": [ | ||
+ | { | ||
+ | "dictionaryId": 10754, | ||
+ | "hierarchyId": null, | ||
+ | "filter": null, | ||
+ | "sortingOptions": null, | ||
+ | "groupingOptions": null, | ||
+ | "dictionaryAttributes": null, | ||
+ | "defaultValue": [], | ||
+ | "defaultValueExpressionId": null, | ||
+ | "parameterId": null, | ||
+ | "dictionarySourceSelectionMode": "None", | ||
+ | "dataSourceAttributesAdditionsSettings": [], | ||
+ | "externalFileStorageUrl": null, | ||
+ | "filePrefix": null, | ||
+ | "defaultNewElementSettings": null, | ||
+ | "id": 2, | ||
+ | "name": "Вид контрагента", | ||
+ | "isReadOnly": true, | ||
+ | "dataEditRuleIds": [], | ||
+ | "beforeSaveDataActions": [], | ||
+ | "afterSaveDataActions": [], | ||
+ | "discriminator": "DictionaryDataSource" | ||
+ | }, | ||
+ | { | ||
+ | "dictionaryId": 10755, | ||
+ | "hierarchyId": null, | ||
+ | "filter": { | ||
+ | "dictionaryEntrySourceId": 2, | ||
+ | "sourceAttribute": { | ||
+ | "id": 1, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "attribute": { | ||
+ | "id": 21, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "conditionType": "AttributeInCollection", | ||
+ | "inversion": false, | ||
+ | "conditionId": null, | ||
+ | "discriminator": "EntryFilter" | ||
+ | }, | ||
+ | "sortingOptions": null, | ||
+ | "groupingOptions": null, | ||
+ | "dictionaryAttributes": [], | ||
+ | "defaultValue": [], | ||
+ | "defaultValueExpressionId": null, | ||
+ | "parameterId": null, | ||
+ | "dictionarySourceSelectionMode": "None", | ||
+ | "dataSourceAttributesAdditionsSettings": [], | ||
+ | "externalFileStorageUrl": null, | ||
+ | "filePrefix": null, | ||
+ | "defaultNewElementSettings": null, | ||
+ | "id": 3, | ||
+ | "name": "Контрагенты", | ||
+ | "isReadOnly": true, | ||
+ | "dataEditRuleIds": [], | ||
+ | "beforeSaveDataActions": [], | ||
+ | "afterSaveDataActions": [], | ||
+ | "discriminator": "DictionaryDataSource" | ||
+ | } | ||
+ | ], | ||
+ | "parameters": [], | ||
+ | "binaryConditionsRules": [], | ||
+ | "submitValidateRules": [], | ||
+ | "expressions": [], | ||
+ | "controlsValueCalculateRules": [], | ||
+ | "actions": [], | ||
+ | "conditionActionIdsOnOpen": [], | ||
+ | "conditionalActions": [], | ||
+ | "selectionSets": [], | ||
+ | "reportTemplates": [], | ||
+ | "useNewDependenciesBuilder": null | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | </div></div> | ||
+ | Два поля - Выпадающих списка: Вид контрагента и Контрагенты с источниками-справочниками (Справочник видов контрагентов (id=2, "dictionaryId": 10754,) и справочник Контрагентов (id=3, "dictionaryId": 10755)) | ||
+ | |||
+ | В источник "Контрагенты" добавлен фильтр, в котором указан "dictionaryEntrySourceId": 2 - справочник видов контроля от значений которого идет фильтрация, далее указан номер атрибута справочника Контрагенты (id=1), в данном случае мы сравниваем по первому атрибуту - идентификатору. Далее обозначен атрибут текущего источника, справочника "Контрагенты", с которым мы сравниваем и в котором указан вид (id=21). | ||
+ | |||
+ | Таким образом при выборе элемента в поле "Вид контрагента" будет происходить фильтрация в поле "Контрагенты " | ||
+ | |||
+ | Важно! Если необходимо, чтобы фильтрация происходила сразу после выбора "Вида контрагента", необходимо поставить флаг "Выполнить действие при изменении значения", в ином случае будет необходимо [[Платформа_3V/Формы/Действия/обновить источник| '''Условия''']] | ||
+ | |||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "filter": { | ||
+ | "dictionaryEntrySourceId": 2, | ||
+ | "sourceAttribute": { | ||
+ | "id": 1, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
"attribute": { | "attribute": { | ||
"id": 21, | "id": 21, | ||
"discriminator": "OwnAttributeDefinitionDto" | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "conditionType": "AttributeInCollection", | ||
+ | "inversion": false, | ||
+ | "conditionId": null, | ||
+ | "discriminator": "EntryFilter" | ||
+ | }, | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Пример фильтрации от транзитивного атрибута == | ||
+ | Справочник "Контрагенты" содержит атрибут "Адрес (дома)", который связан со справочником номеров домов, элементы которого в свою очередь имеют связанный атрибут "Улица", который связан со справочником "Города". Таблицы выглядят следующим образом: | ||
+ | |||
+ | '''Контрагенты''' | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Идентификатор (id=1) !! Наименование (id=2) !! Полное наименование (id=21) !! Адрес (дома) (id=22) | ||
+ | |- | ||
+ | | 1 || Петров П.П || Петров Петр Петрович || 3 (id=3) | ||
+ | |- | ||
+ | | 2 || Сидоров С.С. || Сидоров Семен Сергеевич || 30 (id=12) | ||
+ | |- | ||
+ | | 3 || Иванов И.И. || Иванов Илья Игоревич || 3а (id=15) | ||
+ | |} | ||
+ | |||
+ | '''Номера домов''' | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Идентификатор (id=1) !! Номер дома (id=2) !! Улица (id=21) | ||
+ | |- | ||
+ | | 1 || 1 || Ленина (id=1) | ||
+ | |- | ||
+ | | 2 || 2 || Ленина (id=1) | ||
+ | |- | ||
+ | | 3 || 3 || Ленина (id=1) | ||
+ | |- | ||
+ | | ... || ... || ... | ||
+ | |- | ||
+ | | 12 || 30 || Баумана (id=4) | ||
+ | |- | ||
+ | | ... || ... || ... | ||
+ | |- | ||
+ | | 15 || 3а || Мира (id=5) | ||
+ | |} | ||
+ | |||
+ | '''Улицы''' | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Идентификатор (id=1) !! Наименование (id=2) !! Город (id=21) | ||
+ | |- | ||
+ | | 1 || Ленина || Москва (id=1) | ||
+ | |- | ||
+ | | 2 || Ленина || Москва (id=1) | ||
+ | |- | ||
+ | | ... || ... || ... | ||
+ | |- | ||
+ | | 4 || Баумана || Пермь (id=2) | ||
+ | |- | ||
+ | | 5 || Мира || Соликамск (id=3) | ||
+ | |} | ||
+ | |||
+ | '''Города''' | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Идентификатор (id=1) !! Наименование (id=2) | ||
+ | |- | ||
+ | | 1 || Москва | ||
+ | |- | ||
+ | | 2 || Пермь | ||
+ | |- | ||
+ | | 3 || Соликамск | ||
+ | |} | ||
+ | |||
+ | Чтобы отфильтровать справочник городов напрямую от справочника контрагентов, необходимо в справочнике - источнике "Города" указать следующий фильтр, где в свойстве '''"sourceAttribute"''' указать транзитивную связь от справочника "Контрагенты" до справочника "Города": | ||
+ | |||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "filter": { | ||
+ | "dictionaryEntrySourceId": 1, | ||
+ | "sourceAttributeId": null, | ||
+ | "sourceAttribute": { | ||
+ | "innerAttribute": { | ||
+ | "innerAttribute": { | ||
+ | "id": 21, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "id": 21, | ||
+ | "discriminator": "TransitiveAttributeDefinitionDto" | ||
+ | }, | ||
+ | "id": 22, | ||
+ | "discriminator": "TransitiveAttributeDefinitionDto" | ||
}, | }, | ||
"attributeId": null, | "attributeId": null, | ||
− | " | + | "attribute": { |
− | "discriminator": " | + | "id": 1, |
− | }, | + | "discriminator": "OwnAttributeDefinitionDto" |
+ | }, | ||
+ | "conditionType": "AttributeInCollection", | ||
+ | "inversion": false, | ||
+ | "conditionId": null, | ||
+ | "discriminator": "EntryFilter" | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | А также в самом справочнике контрагентов необходимо указать эту же связь до транзитивного атрибута в свойстве '''"dictionaryAttributes"''': | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "dictionaryAttributes": [ | ||
+ | { | ||
+ | "innerAttribute": { | ||
+ | "innerAttribute": { | ||
+ | "id": 21, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "id": 21, | ||
+ | "discriminator": "TransitiveAttributeDefinitionDto" | ||
+ | }, | ||
+ | "id": 22, | ||
+ | "discriminator": "TransitiveAttributeDefinitionDto" | ||
+ | } | ||
+ | ] | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | При появлении хотя бы одного атрибута (собственного или транзитивного) в '''"dictionaryAttributes"''' все прочие собственные атрибуты данного справочника загружаться в серверную карточку не будут, для этого необходимо указывать все требуемые атрибуты. Например, при появлении фильтрации, которая описана выше, для отображения в карточке атрибута "Полое наименование" (id = 21) необходимо прописать данный атрибут в '''"dictionaryAttributes"''': | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "dictionaryAttributes": [ | ||
+ | { | ||
+ | "innerAttribute": { | ||
+ | "innerAttribute": { | ||
+ | "id": 21, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "id": 21, | ||
+ | "discriminator": "TransitiveAttributeDefinitionDto" | ||
+ | }, | ||
+ | "id": 22, | ||
+ | "discriminator": "TransitiveAttributeDefinitionDto" | ||
+ | }, | ||
+ | { | ||
+ | "id": 21, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | } | ||
+ | ] | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | [[Файл:фильтр от транизитивного атрибута.gif|400px|безрамки|без]] | ||
+ | |||
+ | В примере JSON фильтрация от контрагента происходит как для справочника городов, так и для номеров домов и улиц. | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="width:800px; overflow:auto;"> | ||
+ | <div style="font-weight:bold;line-height:1.6;">JSON серверной карточки</div> | ||
+ | <div class="mw-collapsible-content mw-collapsed-content"> | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "id": 176, | ||
+ | "name": "Пример фильтра от транзитивного атрибута справочника (EntryFilter)", | ||
+ | "description": null, | ||
+ | "title": "Пример фильтра от транзитивного атрибута справочника (EntryFilter)", | ||
+ | "entrySettings": null, | ||
+ | "uiSources": [ | ||
+ | { | ||
+ | "dataSourceId": 1, | ||
+ | "nameTemplate": "", | ||
+ | "displayAttribute": null, | ||
+ | "hasMultipleValue": false, | ||
+ | "hasNullableValue": false, | ||
+ | "maxElements": null, | ||
+ | "hasServerFiltration": false, | ||
+ | "id": 1, | ||
+ | "caption": "Контрагенты", | ||
+ | "enable": true, | ||
+ | "visible": true, | ||
+ | "hint": null, | ||
+ | "doActionOnChangeValue": true, | ||
+ | "onAfterChangeValueConditionalActions": null, | ||
+ | "onAfterChangeValueByClientConditionalActions": null, | ||
+ | "rebuildDependentsObjectOnChange": true, | ||
+ | "enableRuleIds": [], | ||
+ | "visibleRuleIds": [], | ||
+ | "access": null, | ||
+ | "isValueChanged": true, | ||
+ | "expressionId": null, | ||
+ | "discriminator": "DictionarySourceEntry" | ||
+ | }, | ||
+ | { | ||
+ | "dataSourceId": 2, | ||
+ | "nameTemplate": "", | ||
+ | "displayAttribute": null, | ||
+ | "hasMultipleValue": false, | ||
+ | "hasNullableValue": false, | ||
+ | "maxElements": null, | ||
+ | "hasServerFiltration": false, | ||
+ | "id": 2, | ||
+ | "caption": "Номера домов", | ||
+ | "enable": true, | ||
+ | "visible": true, | ||
+ | "hint": null, | ||
"doActionOnChangeValue": true, | "doActionOnChangeValue": true, | ||
"onAfterChangeValueConditionalActions": null, | "onAfterChangeValueConditionalActions": null, | ||
Строка 127: | Строка 424: | ||
"maxElements": null, | "maxElements": null, | ||
"hasServerFiltration": false, | "hasServerFiltration": false, | ||
− | + | "id": 3, | |
− | + | "caption": "Улица", | |
− | |||
− | |||
− | |||
− | |||
− | "id": | ||
− | "caption": " | ||
"enable": true, | "enable": true, | ||
"visible": true, | "visible": true, | ||
"hint": null, | "hint": null, | ||
− | "doActionOnChangeValue": | + | "doActionOnChangeValue": true, |
"onAfterChangeValueConditionalActions": null, | "onAfterChangeValueConditionalActions": null, | ||
"onAfterChangeValueByClientConditionalActions": null, | "onAfterChangeValueByClientConditionalActions": null, | ||
Строка 145: | Строка 436: | ||
"visibleRuleIds": [], | "visibleRuleIds": [], | ||
"access": null, | "access": null, | ||
− | "isValueChanged": | + | "isValueChanged": true, |
"expressionId": null, | "expressionId": null, | ||
"discriminator": "DictionarySourceEntry" | "discriminator": "DictionarySourceEntry" | ||
}, | }, | ||
{ | { | ||
− | " | + | "dataSourceId": 4, |
− | " | + | "nameTemplate": "", |
− | " | + | "displayAttribute": null, |
+ | "hasMultipleValue": false, | ||
+ | "hasNullableValue": false, | ||
+ | "maxElements": null, | ||
+ | "hasServerFiltration": false, | ||
"id": 4, | "id": 4, | ||
− | "caption": " | + | "caption": "Город", |
"enable": true, | "enable": true, | ||
"visible": true, | "visible": true, | ||
"hint": null, | "hint": null, | ||
+ | "doActionOnChangeValue": true, | ||
+ | "onAfterChangeValueConditionalActions": null, | ||
+ | "onAfterChangeValueByClientConditionalActions": null, | ||
+ | "rebuildDependentsObjectOnChange": true, | ||
+ | "enableRuleIds": [], | ||
+ | "visibleRuleIds": [], | ||
+ | "access": null, | ||
+ | "isValueChanged": true, | ||
+ | "expressionId": null, | ||
+ | "discriminator": "DictionarySourceEntry" | ||
+ | }, | ||
+ | { | ||
+ | "nameTemplate": "", | ||
+ | "displayAttribute": null, | ||
+ | "hasMultipleValue": false, | ||
+ | "hasNullableValue": false, | ||
+ | "maxElements": null, | ||
+ | "hasServerFiltration": false, | ||
+ | "id": 121, | ||
"uiDataSource": { | "uiDataSource": { | ||
"attribute": { | "attribute": { | ||
− | "id": | + | "id": 21, |
"discriminator": "OwnAttributeDefinitionDto" | "discriminator": "OwnAttributeDefinitionDto" | ||
}, | }, | ||
Строка 167: | Строка 481: | ||
"discriminator": "UiDataSourceDictionary" | "discriminator": "UiDataSourceDictionary" | ||
}, | }, | ||
+ | "caption": "Полное наименование.Контрагенты", | ||
+ | "enable": true, | ||
+ | "visible": true, | ||
+ | "hint": null, | ||
"doActionOnChangeValue": true, | "doActionOnChangeValue": true, | ||
"onAfterChangeValueConditionalActions": null, | "onAfterChangeValueConditionalActions": null, | ||
"onAfterChangeValueByClientConditionalActions": null, | "onAfterChangeValueByClientConditionalActions": null, | ||
− | "rebuildDependentsObjectOnChange": | + | "rebuildDependentsObjectOnChange": true, |
"enableRuleIds": [], | "enableRuleIds": [], | ||
"visibleRuleIds": [], | "visibleRuleIds": [], | ||
"access": null, | "access": null, | ||
− | "isValueChanged": | + | "isValueChanged": true, |
− | "expressionId": | + | "expressionId": null, |
"discriminator": "StringSourceEntry" | "discriminator": "StringSourceEntry" | ||
} | } | ||
Строка 181: | Строка 499: | ||
"entryDataSources": [ | "entryDataSources": [ | ||
{ | { | ||
− | "dictionaryId": | + | "dictionaryId": 174, |
"hierarchyId": null, | "hierarchyId": null, | ||
"filter": null, | "filter": null, | ||
"sortingOptions": null, | "sortingOptions": null, | ||
"groupingOptions": null, | "groupingOptions": null, | ||
− | "dictionaryAttributes": | + | "dictionaryAttributes": [ |
+ | { | ||
+ | "innerAttribute": { | ||
+ | "innerAttribute": { | ||
+ | "id": 21, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "id": 21, | ||
+ | "discriminator": "TransitiveAttributeDefinitionDto" | ||
+ | }, | ||
+ | "id": 22, | ||
+ | "discriminator": "TransitiveAttributeDefinitionDto" | ||
+ | }, | ||
+ | { | ||
+ | "innerAttribute": { | ||
+ | "id": 21, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "id": 22, | ||
+ | "discriminator": "TransitiveAttributeDefinitionDto" | ||
+ | }, | ||
+ | { | ||
+ | "id": 22, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | { | ||
+ | "id": 21, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | } | ||
+ | ], | ||
"defaultValue": [], | "defaultValue": [], | ||
"defaultValueExpressionId": null, | "defaultValueExpressionId": null, | ||
Строка 196: | Строка 543: | ||
"defaultNewElementSettings": null, | "defaultNewElementSettings": null, | ||
"id": 1, | "id": 1, | ||
− | "name": " | + | "name": "Контрагенты", |
"isReadOnly": false, | "isReadOnly": false, | ||
"dataEditRuleIds": [], | "dataEditRuleIds": [], | ||
Строка 204: | Строка 551: | ||
}, | }, | ||
{ | { | ||
− | "dictionaryId": | + | "dictionaryId": 173, |
"hierarchyId": null, | "hierarchyId": null, | ||
− | "filter": null, | + | "filter": { |
+ | "dictionaryEntrySourceId": 1, | ||
+ | "sourceAttributeId": null, | ||
+ | "sourceAttribute": { | ||
+ | "id": 22, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "attributeId": null, | ||
+ | "attribute": { | ||
+ | "id": 1, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "conditionType": "AttributeInCollection", | ||
+ | "inversion": false, | ||
+ | "conditionId": null, | ||
+ | "discriminator": "EntryFilter" | ||
+ | }, | ||
"sortingOptions": null, | "sortingOptions": null, | ||
"groupingOptions": null, | "groupingOptions": null, | ||
Строка 213: | Строка 576: | ||
"defaultValueExpressionId": null, | "defaultValueExpressionId": null, | ||
"parameterId": null, | "parameterId": null, | ||
− | "dictionarySourceSelectionMode": " | + | "dictionarySourceSelectionMode": "SelectFirst", |
"dataSourceAttributesAdditionsSettings": [], | "dataSourceAttributesAdditionsSettings": [], | ||
"externalFileStorageUrl": null, | "externalFileStorageUrl": null, | ||
Строка 219: | Строка 582: | ||
"defaultNewElementSettings": null, | "defaultNewElementSettings": null, | ||
"id": 2, | "id": 2, | ||
− | "name": " | + | "name": "Номер дома", |
"isReadOnly": true, | "isReadOnly": true, | ||
"dataEditRuleIds": [], | "dataEditRuleIds": [], | ||
Строка 227: | Строка 590: | ||
}, | }, | ||
{ | { | ||
− | "dictionaryId": | + | "dictionaryId": 172, |
"hierarchyId": null, | "hierarchyId": null, | ||
"filter": { | "filter": { | ||
− | "dictionaryEntrySourceId": | + | "dictionaryEntrySourceId": 1, |
+ | "sourceAttributeId": null, | ||
"sourceAttribute": { | "sourceAttribute": { | ||
+ | "innerAttribute": { | ||
+ | "id": 21, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "id": 22, | ||
+ | "discriminator": "TransitiveAttributeDefinitionDto" | ||
+ | }, | ||
+ | "attributeId": null, | ||
+ | "attribute": { | ||
"id": 1, | "id": 1, | ||
"discriminator": "OwnAttributeDefinitionDto" | "discriminator": "OwnAttributeDefinitionDto" | ||
}, | }, | ||
+ | "conditionType": "AttributeInCollection", | ||
+ | "inversion": false, | ||
+ | "conditionId": null, | ||
+ | "discriminator": "EntryFilter" | ||
+ | }, | ||
+ | "sortingOptions": null, | ||
+ | "groupingOptions": null, | ||
+ | "dictionaryAttributes": [], | ||
+ | "defaultValue": [], | ||
+ | "defaultValueExpressionId": null, | ||
+ | "parameterId": null, | ||
+ | "dictionarySourceSelectionMode": "SelectFirst", | ||
+ | "dataSourceAttributesAdditionsSettings": [], | ||
+ | "externalFileStorageUrl": null, | ||
+ | "filePrefix": null, | ||
+ | "defaultNewElementSettings": null, | ||
+ | "id": 3, | ||
+ | "name": "Улицы", | ||
+ | "isReadOnly": true, | ||
+ | "dataEditRuleIds": [], | ||
+ | "beforeSaveDataActions": [], | ||
+ | "afterSaveDataActions": [], | ||
+ | "discriminator": "DictionaryDataSource" | ||
+ | }, | ||
+ | { | ||
+ | "dictionaryId": 170, | ||
+ | "hierarchyId": null, | ||
+ | "filter": { | ||
+ | "dictionaryEntrySourceId": 1, | ||
+ | "sourceAttributeId": null, | ||
+ | "sourceAttribute": { | ||
+ | "innerAttribute": { | ||
+ | "innerAttribute": { | ||
+ | "id": 21, | ||
+ | "discriminator": "OwnAttributeDefinitionDto" | ||
+ | }, | ||
+ | "id": 21, | ||
+ | "discriminator": "TransitiveAttributeDefinitionDto" | ||
+ | }, | ||
+ | "id": 22, | ||
+ | "discriminator": "TransitiveAttributeDefinitionDto" | ||
+ | }, | ||
+ | "attributeId": null, | ||
"attribute": { | "attribute": { | ||
− | "id": | + | "id": 1, |
"discriminator": "OwnAttributeDefinitionDto" | "discriminator": "OwnAttributeDefinitionDto" | ||
}, | }, | ||
Строка 242: | Строка 658: | ||
"inversion": false, | "inversion": false, | ||
"conditionId": null, | "conditionId": null, | ||
− | "discriminator": " | + | "discriminator": "EntryFilter" |
}, | }, | ||
"sortingOptions": null, | "sortingOptions": null, | ||
Строка 250: | Строка 666: | ||
"defaultValueExpressionId": null, | "defaultValueExpressionId": null, | ||
"parameterId": null, | "parameterId": null, | ||
− | "dictionarySourceSelectionMode": " | + | "dictionarySourceSelectionMode": "SelectFirst", |
"dataSourceAttributesAdditionsSettings": [], | "dataSourceAttributesAdditionsSettings": [], | ||
"externalFileStorageUrl": null, | "externalFileStorageUrl": null, | ||
"filePrefix": null, | "filePrefix": null, | ||
"defaultNewElementSettings": null, | "defaultNewElementSettings": null, | ||
− | "id": | + | "id": 4, |
− | "name": " | + | "name": "Города", |
"isReadOnly": true, | "isReadOnly": true, | ||
"dataEditRuleIds": [], | "dataEditRuleIds": [], | ||
Строка 267: | Строка 683: | ||
"binaryConditionsRules": [], | "binaryConditionsRules": [], | ||
"submitValidateRules": [], | "submitValidateRules": [], | ||
− | "expressions": [ | + | "expressions": [], |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
"controlsValueCalculateRules": [], | "controlsValueCalculateRules": [], | ||
"actions": [], | "actions": [], |
Текущая версия на 07:52, 12 октября 2022
Фильтр EntryFilter позволяет выбрать данные в справочнике относительно другого связного справочника. Элементы одного справочника будут отображаться в зависимости от выбранных элементов другого справочника. Элемент "filter" добавляется в источник, который необходимо отфильтровать. Фильтр имеет следующую структуру:
1 "filter": {
2 "dictionaryEntrySourceId": 2,
3 "sourceAttribute": {
4 "id": 21,
5 "discriminator": "OwnAttributeDefinitionDto"
6 },
7 "attribute": {
8 "id": 1,
9 "discriminator": "OwnAttributeDefinitionDto"
10 },
11 "conditionType": "AttributeInCollection",
12 "inversion": false,
13 "conditionId": null,
14 "discriminator": "EntryFilter"
15 }
Содержание
Описание свойств фильтра
Свойство | Обязательность | Описание |
---|---|---|
dictionaryEntrySourceId | + | Id источника данных на форме с типом "Справочник", от значений которого будут фильтроваться данные |
sourceAttribute | + | Идентификатор атрибута справочника, от значений которого будут фильтроваться данные, указанного в dictionaryEntrySourceId |
attribute | + | Идентификатор атрибута текущего настраиваемого справочника, с которым связано значение справочника от которого идет фильтрация. Указывается номер Id и тип атрибута в данном случае собственный (OwnAttributeDefinitionDto), так как используются данные текущего справочника. |
discriminator | + | EntryFilter |
conditionType | - | Тип условий |
inversion | + | В значении "false" источник-справочник принимает значения, которые удовлетворяют фильтру, в значении "true" - все значения, которые наоборот не удовлетворяют ему |
conditionId | - | Условия, при которых применяется фильтр |
Особенности использования
Важно, если фильтрация происходит по связанному атрибуту с типом "Элемент справочника", фильтрация, т.е. связь sourceAttribute и attribute будет происходить по атрибуту "Идентификатор", а не по атрибуту "Наименование"!
При использовании в фильтрации источника - справочника транзитивного атрибута другого источника - справочника необходимо обязательно указать в источнике, от которого происходит фильтрация, в блоке "dictionaryAttributes" все атрибуты (транзитивные и собственные), которые используются. Пример см.ниже "Пример фильтрации от транзитивного атрибута"
Пример фильтрации от собственного атрибута справочника
Справочник "Контрагенты" содержит связный атрибут "Виды контрагентов". Можно создать форму у в которой, при выборе из выпадающего списка "Вида контрагентов", элементы следующего выпадающего списка "Контрагенты" будут только выбранного вида.
1 {
2 "id": 10735,
3 "name": "Пример фильтра от справочника (EntryFilter)",
4 "description": null,
5 "title": "Пример фильтрации_справочник от справочника",
6 "entrySettings": null,
7 "uiSources": [
8 {
9 "dataSourceId": 2,
10 "nameTemplate": "",
11 "displayAttribute": null,
12 "hasMultipleValue": false,
13 "hasNullableValue": false,
14 "maxElements": null,
15 "hasServerFiltration": false,
16 "searchSettings": {
17 "maxElements": null,
18 "minInputChars": 2,
19 "searchMode": "Client",
20 "debounceMs": 300
21 },
22 "id": 1,
23 "caption": "Вид контрагента",
24 "enable": true,
25 "visible": true,
26 "hint": null,
27 "doActionOnChangeValue": true,
28 "onAfterChangeValueConditionalActions": null,
29 "onAfterChangeValueByClientConditionalActions": null,
30 "rebuildDependentsObjectOnChange": true,
31 "enableRuleIds": [],
32 "visibleRuleIds": [],
33 "access": null,
34 "isValueChanged": true,
35 "expressionId": null,
36 "discriminator": "DictionarySourceEntry"
37 },
38 {
39 "dataSourceId": 3,
40 "nameTemplate": "",
41 "displayAttribute": null,
42 "hasMultipleValue": false,
43 "hasNullableValue": false,
44 "maxElements": null,
45 "hasServerFiltration": false,
46 "searchSettings": {
47 "maxElements": null,
48 "minInputChars": 2,
49 "searchMode": "Client",
50 "debounceMs": 300
51 },
52 "id": 2,
53 "caption": "Контрагенты",
54 "enable": true,
55 "visible": true,
56 "hint": null,
57 "doActionOnChangeValue": false,
58 "onAfterChangeValueConditionalActions": null,
59 "onAfterChangeValueByClientConditionalActions": null,
60 "rebuildDependentsObjectOnChange": true,
61 "enableRuleIds": [],
62 "visibleRuleIds": [],
63 "access": null,
64 "isValueChanged": false,
65 "expressionId": null,
66 "discriminator": "DictionarySourceEntry"
67 }
68 ],
69 "entryDataSources": [
70 {
71 "dictionaryId": 10754,
72 "hierarchyId": null,
73 "filter": null,
74 "sortingOptions": null,
75 "groupingOptions": null,
76 "dictionaryAttributes": null,
77 "defaultValue": [],
78 "defaultValueExpressionId": null,
79 "parameterId": null,
80 "dictionarySourceSelectionMode": "None",
81 "dataSourceAttributesAdditionsSettings": [],
82 "externalFileStorageUrl": null,
83 "filePrefix": null,
84 "defaultNewElementSettings": null,
85 "id": 2,
86 "name": "Вид контрагента",
87 "isReadOnly": true,
88 "dataEditRuleIds": [],
89 "beforeSaveDataActions": [],
90 "afterSaveDataActions": [],
91 "discriminator": "DictionaryDataSource"
92 },
93 {
94 "dictionaryId": 10755,
95 "hierarchyId": null,
96 "filter": {
97 "dictionaryEntrySourceId": 2,
98 "sourceAttribute": {
99 "id": 1,
100 "discriminator": "OwnAttributeDefinitionDto"
101 },
102 "attribute": {
103 "id": 21,
104 "discriminator": "OwnAttributeDefinitionDto"
105 },
106 "conditionType": "AttributeInCollection",
107 "inversion": false,
108 "conditionId": null,
109 "discriminator": "EntryFilter"
110 },
111 "sortingOptions": null,
112 "groupingOptions": null,
113 "dictionaryAttributes": [],
114 "defaultValue": [],
115 "defaultValueExpressionId": null,
116 "parameterId": null,
117 "dictionarySourceSelectionMode": "None",
118 "dataSourceAttributesAdditionsSettings": [],
119 "externalFileStorageUrl": null,
120 "filePrefix": null,
121 "defaultNewElementSettings": null,
122 "id": 3,
123 "name": "Контрагенты",
124 "isReadOnly": true,
125 "dataEditRuleIds": [],
126 "beforeSaveDataActions": [],
127 "afterSaveDataActions": [],
128 "discriminator": "DictionaryDataSource"
129 }
130 ],
131 "parameters": [],
132 "binaryConditionsRules": [],
133 "submitValidateRules": [],
134 "expressions": [],
135 "controlsValueCalculateRules": [],
136 "actions": [],
137 "conditionActionIdsOnOpen": [],
138 "conditionalActions": [],
139 "selectionSets": [],
140 "reportTemplates": [],
141 "useNewDependenciesBuilder": null
142 }
Два поля - Выпадающих списка: Вид контрагента и Контрагенты с источниками-справочниками (Справочник видов контрагентов (id=2, "dictionaryId": 10754,) и справочник Контрагентов (id=3, "dictionaryId": 10755))
В источник "Контрагенты" добавлен фильтр, в котором указан "dictionaryEntrySourceId": 2 - справочник видов контроля от значений которого идет фильтрация, далее указан номер атрибута справочника Контрагенты (id=1), в данном случае мы сравниваем по первому атрибуту - идентификатору. Далее обозначен атрибут текущего источника, справочника "Контрагенты", с которым мы сравниваем и в котором указан вид (id=21).
Таким образом при выборе элемента в поле "Вид контрагента" будет происходить фильтрация в поле "Контрагенты "
Важно! Если необходимо, чтобы фильтрация происходила сразу после выбора "Вида контрагента", необходимо поставить флаг "Выполнить действие при изменении значения", в ином случае будет необходимо Условия
1 "filter": {
2 "dictionaryEntrySourceId": 2,
3 "sourceAttribute": {
4 "id": 1,
5 "discriminator": "OwnAttributeDefinitionDto"
6 },
7 "attribute": {
8 "id": 21,
9 "discriminator": "OwnAttributeDefinitionDto"
10 },
11 "conditionType": "AttributeInCollection",
12 "inversion": false,
13 "conditionId": null,
14 "discriminator": "EntryFilter"
15 },
Пример фильтрации от транзитивного атрибута
Справочник "Контрагенты" содержит атрибут "Адрес (дома)", который связан со справочником номеров домов, элементы которого в свою очередь имеют связанный атрибут "Улица", который связан со справочником "Города". Таблицы выглядят следующим образом:
Контрагенты
Идентификатор (id=1) | Наименование (id=2) | Полное наименование (id=21) | Адрес (дома) (id=22) |
---|---|---|---|
1 | Петров П.П | Петров Петр Петрович | 3 (id=3) |
2 | Сидоров С.С. | Сидоров Семен Сергеевич | 30 (id=12) |
3 | Иванов И.И. | Иванов Илья Игоревич | 3а (id=15) |
Номера домов
Идентификатор (id=1) | Номер дома (id=2) | Улица (id=21) |
---|---|---|
1 | 1 | Ленина (id=1) |
2 | 2 | Ленина (id=1) |
3 | 3 | Ленина (id=1) |
... | ... | ... |
12 | 30 | Баумана (id=4) |
... | ... | ... |
15 | 3а | Мира (id=5) |
Улицы
Идентификатор (id=1) | Наименование (id=2) | Город (id=21) |
---|---|---|
1 | Ленина | Москва (id=1) |
2 | Ленина | Москва (id=1) |
... | ... | ... |
4 | Баумана | Пермь (id=2) |
5 | Мира | Соликамск (id=3) |
Города
Идентификатор (id=1) | Наименование (id=2) |
---|---|
1 | Москва |
2 | Пермь |
3 | Соликамск |
Чтобы отфильтровать справочник городов напрямую от справочника контрагентов, необходимо в справочнике - источнике "Города" указать следующий фильтр, где в свойстве "sourceAttribute" указать транзитивную связь от справочника "Контрагенты" до справочника "Города":
1 "filter": {
2 "dictionaryEntrySourceId": 1,
3 "sourceAttributeId": null,
4 "sourceAttribute": {
5 "innerAttribute": {
6 "innerAttribute": {
7 "id": 21,
8 "discriminator": "OwnAttributeDefinitionDto"
9 },
10 "id": 21,
11 "discriminator": "TransitiveAttributeDefinitionDto"
12 },
13 "id": 22,
14 "discriminator": "TransitiveAttributeDefinitionDto"
15 },
16 "attributeId": null,
17 "attribute": {
18 "id": 1,
19 "discriminator": "OwnAttributeDefinitionDto"
20 },
21 "conditionType": "AttributeInCollection",
22 "inversion": false,
23 "conditionId": null,
24 "discriminator": "EntryFilter"
25 }
А также в самом справочнике контрагентов необходимо указать эту же связь до транзитивного атрибута в свойстве "dictionaryAttributes":
1 "dictionaryAttributes": [
2 {
3 "innerAttribute": {
4 "innerAttribute": {
5 "id": 21,
6 "discriminator": "OwnAttributeDefinitionDto"
7 },
8 "id": 21,
9 "discriminator": "TransitiveAttributeDefinitionDto"
10 },
11 "id": 22,
12 "discriminator": "TransitiveAttributeDefinitionDto"
13 }
14 ]
При появлении хотя бы одного атрибута (собственного или транзитивного) в "dictionaryAttributes" все прочие собственные атрибуты данного справочника загружаться в серверную карточку не будут, для этого необходимо указывать все требуемые атрибуты. Например, при появлении фильтрации, которая описана выше, для отображения в карточке атрибута "Полое наименование" (id = 21) необходимо прописать данный атрибут в "dictionaryAttributes":
1 "dictionaryAttributes": [
2 {
3 "innerAttribute": {
4 "innerAttribute": {
5 "id": 21,
6 "discriminator": "OwnAttributeDefinitionDto"
7 },
8 "id": 21,
9 "discriminator": "TransitiveAttributeDefinitionDto"
10 },
11 "id": 22,
12 "discriminator": "TransitiveAttributeDefinitionDto"
13 },
14 {
15 "id": 21,
16 "discriminator": "OwnAttributeDefinitionDto"
17 }
18 ]
В примере JSON фильтрация от контрагента происходит как для справочника городов, так и для номеров домов и улиц.
1 {
2 "id": 176,
3 "name": "Пример фильтра от транзитивного атрибута справочника (EntryFilter)",
4 "description": null,
5 "title": "Пример фильтра от транзитивного атрибута справочника (EntryFilter)",
6 "entrySettings": null,
7 "uiSources": [
8 {
9 "dataSourceId": 1,
10 "nameTemplate": "",
11 "displayAttribute": null,
12 "hasMultipleValue": false,
13 "hasNullableValue": false,
14 "maxElements": null,
15 "hasServerFiltration": false,
16 "id": 1,
17 "caption": "Контрагенты",
18 "enable": true,
19 "visible": true,
20 "hint": null,
21 "doActionOnChangeValue": true,
22 "onAfterChangeValueConditionalActions": null,
23 "onAfterChangeValueByClientConditionalActions": null,
24 "rebuildDependentsObjectOnChange": true,
25 "enableRuleIds": [],
26 "visibleRuleIds": [],
27 "access": null,
28 "isValueChanged": true,
29 "expressionId": null,
30 "discriminator": "DictionarySourceEntry"
31 },
32 {
33 "dataSourceId": 2,
34 "nameTemplate": "",
35 "displayAttribute": null,
36 "hasMultipleValue": false,
37 "hasNullableValue": false,
38 "maxElements": null,
39 "hasServerFiltration": false,
40 "id": 2,
41 "caption": "Номера домов",
42 "enable": true,
43 "visible": true,
44 "hint": null,
45 "doActionOnChangeValue": true,
46 "onAfterChangeValueConditionalActions": null,
47 "onAfterChangeValueByClientConditionalActions": null,
48 "rebuildDependentsObjectOnChange": true,
49 "enableRuleIds": [],
50 "visibleRuleIds": [],
51 "access": null,
52 "isValueChanged": true,
53 "expressionId": null,
54 "discriminator": "DictionarySourceEntry"
55 },
56 {
57 "dataSourceId": 3,
58 "nameTemplate": "",
59 "displayAttribute": null,
60 "hasMultipleValue": false,
61 "hasNullableValue": false,
62 "maxElements": null,
63 "hasServerFiltration": false,
64 "id": 3,
65 "caption": "Улица",
66 "enable": true,
67 "visible": true,
68 "hint": null,
69 "doActionOnChangeValue": true,
70 "onAfterChangeValueConditionalActions": null,
71 "onAfterChangeValueByClientConditionalActions": null,
72 "rebuildDependentsObjectOnChange": true,
73 "enableRuleIds": [],
74 "visibleRuleIds": [],
75 "access": null,
76 "isValueChanged": true,
77 "expressionId": null,
78 "discriminator": "DictionarySourceEntry"
79 },
80 {
81 "dataSourceId": 4,
82 "nameTemplate": "",
83 "displayAttribute": null,
84 "hasMultipleValue": false,
85 "hasNullableValue": false,
86 "maxElements": null,
87 "hasServerFiltration": false,
88 "id": 4,
89 "caption": "Город",
90 "enable": true,
91 "visible": true,
92 "hint": null,
93 "doActionOnChangeValue": true,
94 "onAfterChangeValueConditionalActions": null,
95 "onAfterChangeValueByClientConditionalActions": null,
96 "rebuildDependentsObjectOnChange": true,
97 "enableRuleIds": [],
98 "visibleRuleIds": [],
99 "access": null,
100 "isValueChanged": true,
101 "expressionId": null,
102 "discriminator": "DictionarySourceEntry"
103 },
104 {
105 "nameTemplate": "",
106 "displayAttribute": null,
107 "hasMultipleValue": false,
108 "hasNullableValue": false,
109 "maxElements": null,
110 "hasServerFiltration": false,
111 "id": 121,
112 "uiDataSource": {
113 "attribute": {
114 "id": 21,
115 "discriminator": "OwnAttributeDefinitionDto"
116 },
117 "attributeId": null,
118 "sourceId": 1,
119 "discriminator": "UiDataSourceDictionary"
120 },
121 "caption": "Полное наименование.Контрагенты",
122 "enable": true,
123 "visible": true,
124 "hint": null,
125 "doActionOnChangeValue": true,
126 "onAfterChangeValueConditionalActions": null,
127 "onAfterChangeValueByClientConditionalActions": null,
128 "rebuildDependentsObjectOnChange": true,
129 "enableRuleIds": [],
130 "visibleRuleIds": [],
131 "access": null,
132 "isValueChanged": true,
133 "expressionId": null,
134 "discriminator": "StringSourceEntry"
135 }
136 ],
137 "entryDataSources": [
138 {
139 "dictionaryId": 174,
140 "hierarchyId": null,
141 "filter": null,
142 "sortingOptions": null,
143 "groupingOptions": null,
144 "dictionaryAttributes": [
145 {
146 "innerAttribute": {
147 "innerAttribute": {
148 "id": 21,
149 "discriminator": "OwnAttributeDefinitionDto"
150 },
151 "id": 21,
152 "discriminator": "TransitiveAttributeDefinitionDto"
153 },
154 "id": 22,
155 "discriminator": "TransitiveAttributeDefinitionDto"
156 },
157 {
158 "innerAttribute": {
159 "id": 21,
160 "discriminator": "OwnAttributeDefinitionDto"
161 },
162 "id": 22,
163 "discriminator": "TransitiveAttributeDefinitionDto"
164 },
165 {
166 "id": 22,
167 "discriminator": "OwnAttributeDefinitionDto"
168 },
169 {
170 "id": 21,
171 "discriminator": "OwnAttributeDefinitionDto"
172 }
173 ],
174 "defaultValue": [],
175 "defaultValueExpressionId": null,
176 "parameterId": null,
177 "dictionarySourceSelectionMode": "None",
178 "dataSourceAttributesAdditionsSettings": [],
179 "externalFileStorageUrl": null,
180 "filePrefix": null,
181 "defaultNewElementSettings": null,
182 "id": 1,
183 "name": "Контрагенты",
184 "isReadOnly": false,
185 "dataEditRuleIds": [],
186 "beforeSaveDataActions": [],
187 "afterSaveDataActions": [],
188 "discriminator": "DictionaryDataSource"
189 },
190 {
191 "dictionaryId": 173,
192 "hierarchyId": null,
193 "filter": {
194 "dictionaryEntrySourceId": 1,
195 "sourceAttributeId": null,
196 "sourceAttribute": {
197 "id": 22,
198 "discriminator": "OwnAttributeDefinitionDto"
199 },
200 "attributeId": null,
201 "attribute": {
202 "id": 1,
203 "discriminator": "OwnAttributeDefinitionDto"
204 },
205 "conditionType": "AttributeInCollection",
206 "inversion": false,
207 "conditionId": null,
208 "discriminator": "EntryFilter"
209 },
210 "sortingOptions": null,
211 "groupingOptions": null,
212 "dictionaryAttributes": null,
213 "defaultValue": [],
214 "defaultValueExpressionId": null,
215 "parameterId": null,
216 "dictionarySourceSelectionMode": "SelectFirst",
217 "dataSourceAttributesAdditionsSettings": [],
218 "externalFileStorageUrl": null,
219 "filePrefix": null,
220 "defaultNewElementSettings": null,
221 "id": 2,
222 "name": "Номер дома",
223 "isReadOnly": true,
224 "dataEditRuleIds": [],
225 "beforeSaveDataActions": [],
226 "afterSaveDataActions": [],
227 "discriminator": "DictionaryDataSource"
228 },
229 {
230 "dictionaryId": 172,
231 "hierarchyId": null,
232 "filter": {
233 "dictionaryEntrySourceId": 1,
234 "sourceAttributeId": null,
235 "sourceAttribute": {
236 "innerAttribute": {
237 "id": 21,
238 "discriminator": "OwnAttributeDefinitionDto"
239 },
240 "id": 22,
241 "discriminator": "TransitiveAttributeDefinitionDto"
242 },
243 "attributeId": null,
244 "attribute": {
245 "id": 1,
246 "discriminator": "OwnAttributeDefinitionDto"
247 },
248 "conditionType": "AttributeInCollection",
249 "inversion": false,
250 "conditionId": null,
251 "discriminator": "EntryFilter"
252 },
253 "sortingOptions": null,
254 "groupingOptions": null,
255 "dictionaryAttributes": [],
256 "defaultValue": [],
257 "defaultValueExpressionId": null,
258 "parameterId": null,
259 "dictionarySourceSelectionMode": "SelectFirst",
260 "dataSourceAttributesAdditionsSettings": [],
261 "externalFileStorageUrl": null,
262 "filePrefix": null,
263 "defaultNewElementSettings": null,
264 "id": 3,
265 "name": "Улицы",
266 "isReadOnly": true,
267 "dataEditRuleIds": [],
268 "beforeSaveDataActions": [],
269 "afterSaveDataActions": [],
270 "discriminator": "DictionaryDataSource"
271 },
272 {
273 "dictionaryId": 170,
274 "hierarchyId": null,
275 "filter": {
276 "dictionaryEntrySourceId": 1,
277 "sourceAttributeId": null,
278 "sourceAttribute": {
279 "innerAttribute": {
280 "innerAttribute": {
281 "id": 21,
282 "discriminator": "OwnAttributeDefinitionDto"
283 },
284 "id": 21,
285 "discriminator": "TransitiveAttributeDefinitionDto"
286 },
287 "id": 22,
288 "discriminator": "TransitiveAttributeDefinitionDto"
289 },
290 "attributeId": null,
291 "attribute": {
292 "id": 1,
293 "discriminator": "OwnAttributeDefinitionDto"
294 },
295 "conditionType": "AttributeInCollection",
296 "inversion": false,
297 "conditionId": null,
298 "discriminator": "EntryFilter"
299 },
300 "sortingOptions": null,
301 "groupingOptions": null,
302 "dictionaryAttributes": [],
303 "defaultValue": [],
304 "defaultValueExpressionId": null,
305 "parameterId": null,
306 "dictionarySourceSelectionMode": "SelectFirst",
307 "dataSourceAttributesAdditionsSettings": [],
308 "externalFileStorageUrl": null,
309 "filePrefix": null,
310 "defaultNewElementSettings": null,
311 "id": 4,
312 "name": "Города",
313 "isReadOnly": true,
314 "dataEditRuleIds": [],
315 "beforeSaveDataActions": [],
316 "afterSaveDataActions": [],
317 "discriminator": "DictionaryDataSource"
318 }
319 ],
320 "parameters": [],
321 "binaryConditionsRules": [],
322 "submitValidateRules": [],
323 "expressions": [],
324 "controlsValueCalculateRules": [],
325 "actions": [],
326 "conditionActionIdsOnOpen": [],
327 "conditionalActions": [],
328 "selectionSets": [],
329 "reportTemplates": [],
330 "useNewDependenciesBuilder": null
331 }