Платформа 3V/Формы/Источники данных/Справочник/Фильтрация/От другого справочника: различия между версиями

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
 
(не показано 16 промежуточных версий этого же участника)
Строка 1: Строка 1:
Фильтр EntryFilterDto позволяет выбрать данные в справочнике относительно другого связного справочника. Элементы одного справочника будут отображаться в зависимости от выбранных элементов другого справочника. Элемент "filter" добавляется в источник, который необходимо отфильтровать.
+
Фильтр EntryFilter позволяет выбрать данные в справочнике относительно другого связного справочника. Элементы одного справочника будут отображаться в зависимости от выбранных элементов другого справочника. Элемент "filter" добавляется в источник, который необходимо отфильтровать.
 
Фильтр имеет следующую структуру:
 
Фильтр имеет следующую структуру:
 
<syntaxhighlight lang="JSON" line>
 
<syntaxhighlight lang="JSON" line>
Строка 15: Строка 15:
 
         "inversion": false,
 
         "inversion": false,
 
         "conditionId": null,
 
         "conditionId": null,
         "discriminator": "EntryFilterDto"
+
         "discriminator": "EntryFilter"
 
           }
 
           }
 
</syntaxhighlight>
 
</syntaxhighlight>
Строка 21: Строка 21:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Свойство !! Описание
+
! Свойство !! Обязательность !!Описание
 
|-
 
|-
| dictionaryEntrySourceId || Id источника - справочника, от значений которого будут фильтроваться данные
+
| dictionaryEntrySourceId || + ||Id источника данных на форме с типом "Справочник", от значений которого будут фильтроваться данные
 
|-
 
|-
| sourceAttribute|| [[Платформа_3V/Справочник/Связи_атрибутов_справочников|''' Атрибут''']] справочника, от значений которого будут фильтроваться данные
+
| sourceAttribute|| + || [[Платформа_3V/Справочник/Связи_атрибутов_справочников|''' Идентификатор атрибута''']] справочника, от значений которого будут фильтроваться данные, указанного в dictionaryEntrySourceId
 
|-
 
|-
| attribute|| [[Платформа_3V/Справочник/Связи_атрибутов_справочников|''' Атрибут''']] текущего источника, с которым связано значение справочника от которого идет фильтрация. Указывается номер Id и тип атрибута в данном случае собственный (OwnAttributeDefinitionDto), так как используются данные текущего справочника.
+
| attribute|| + || [[Платформа_3V/Справочник/Связи_атрибутов_справочников|''' Идентификатор атрибута''']] текущего настраиваемого справочника, с которым связано значение справочника от которого идет фильтрация. Указывается номер Id и тип атрибута в данном случае собственный (OwnAttributeDefinitionDto), так как используются данные текущего справочника.  
 
|-
 
|-
| discriminator|| EntryFilterDto
+
| discriminator|| + || EntryFilter
 
|-  
 
|-  
| conditionType || Тип условий
+
| conditionType || - ||[[Платформа_3V/Формы/Источники_данных/Справочник/Фильтрация#Типы%20условий%20фильтрации%20(conditionType)| '''Тип условий''']]
 
|-  
 
|-  
| inversion || В значении "false" источник-справочник принимает значения, которые удовлетворяют фильтру, в значении "true" - все значения, которые наоборот не удовлетворяют ему
+
| inversion || + || В значении "false" источник-справочник принимает значения, которые удовлетворяют фильтру, в значении "true" - все значения, которые наоборот не удовлетворяют ему
 
|-  
 
|-  
| conditionId || [[Платформа_3V/Формы/Правила| '''Условия''']], при которых применяется фильтр  
+
| conditionId || - || [[Платформа_3V/Формы/Правила| '''Условия''']], при которых применяется фильтр  
 
|}
 
|}
  
 
== Особенности использования ==
 
== Особенности использования ==
 +
Важно, если фильтрация происходит по связанному атрибуту с типом "Элемент справочника", фильтрация, т.е. связь sourceAttribute и attribute будет происходить по атрибуту "Идентификатор", а не по атрибуту "Наименование"!
 +
 
При использовании в фильтрации источника - справочника транзитивного атрибута другого источника - справочника необходимо обязательно указать в источнике, от которого происходит фильтрация, в блоке "dictionaryAttributes" [[Платформа_3V/Справочник/Связи_атрибутов_справочников|'''все атрибуты (транзитивные и собственные)''']], которые используются. Пример см.ниже "Пример фильтрации от транзитивного атрибута"
 
При использовании в фильтрации источника - справочника транзитивного атрибута другого источника - справочника необходимо обязательно указать в источнике, от которого происходит фильтрация, в блоке "dictionaryAttributes" [[Платформа_3V/Справочник/Связи_атрибутов_справочников|'''все атрибуты (транзитивные и собственные)''']], которые используются. Пример см.ниже "Пример фильтрации от транзитивного атрибута"
  
== Пример фильтрации от собственного атрибута ==
+
== Пример фильтрации от собственного атрибута справочника==
Справочник "Контрагенты" содержит связный атрибут "Виды контрагентов". Можно создать клиентскую карточку в которой, при выборе из выпадающего списка "Вида контрагентов", элементы следующего выпадающего списка "Контрагенты" будут только выбранного виду.
+
Справочник "Контрагенты" содержит связный атрибут "Виды контрагентов". Можно создать форму у в которой, при выборе из выпадающего списка "Вида контрагентов", элементы следующего выпадающего списка "Контрагенты" будут только выбранного вида.
[[Файл:Screenshot 2021-04-15 at 10.34.19.png|мини|слева]]
+
[[Файл:Screenshot 2021-04-15 at 10.34.19.png|400px|безрамки|без]]
<br>
 
<br>
 
<br><br>
 
<br>
 
<br>
 
<br>
 
<br>
 
<br>
 
<br>
 
<br>
 
<br>
 
<br>
 
<br>
 
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:800px; overflow:auto;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:800px; overflow:auto;">
Строка 64: Строка 53:
 
{
 
{
 
   "id": 10735,
 
   "id": 10735,
   "name": "Пример фильтра от справочника (EntryFilterDto)",
+
   "name": "Пример фильтра от справочника (EntryFilter)",
 
   "description": null,
 
   "description": null,
 
   "title": "Пример фильтрации_справочник от справочника",
 
   "title": "Пример фильтрации_справочник от справочника",
Строка 88: Строка 77:
 
       "visible": true,
 
       "visible": true,
 
       "hint": null,
 
       "hint": null,
      "uiDataSource": {
 
        "attribute": {
 
          "id": 21,
 
          "discriminator": "OwnAttributeDefinitionDto"
 
        },
 
        "attributeId": null,
 
        "sourceId": 1,
 
        "discriminator": "UiDataSourceDictionary"
 
      },
 
 
       "doActionOnChangeValue": true,
 
       "doActionOnChangeValue": true,
 
       "onAfterChangeValueConditionalActions": null,
 
       "onAfterChangeValueConditionalActions": null,
Строка 127: Строка 107:
 
       "visible": true,
 
       "visible": true,
 
       "hint": null,
 
       "hint": null,
      "uiDataSource": {
 
        "attribute": {
 
          "id": 2,
 
          "discriminator": "OwnAttributeDefinitionDto"
 
        },
 
        "attributeId": null,
 
        "sourceId": 1,
 
        "discriminator": "UiDataSourceDictionary"
 
      },
 
 
       "doActionOnChangeValue": false,
 
       "doActionOnChangeValue": false,
 
       "onAfterChangeValueConditionalActions": null,
 
       "onAfterChangeValueConditionalActions": null,
Строка 149: Строка 120:
 
   ],
 
   ],
 
   "entryDataSources": [
 
   "entryDataSources": [
    {
 
      "dictionaryId": 10736,
 
      "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": 1,
 
      "name": "Справочник",
 
      "isReadOnly": false,
 
      "dataEditRuleIds": [],
 
      "beforeSaveDataActions": [],
 
      "afterSaveDataActions": [],
 
      "discriminator": "DictionaryDataSource"
 
    },
 
 
     {
 
     {
 
       "dictionaryId": 10754,
 
       "dictionaryId": 10754,
Строка 211: Строка 159:
 
         "inversion": false,
 
         "inversion": false,
 
         "conditionId": null,
 
         "conditionId": null,
         "discriminator": "EntryFilterDto"
+
         "discriminator": "EntryFilter"
 
       },
 
       },
 
       "sortingOptions": null,
 
       "sortingOptions": null,
Строка 247: Строка 195:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
</div></div>
 
</div></div>
Два контрола (uiSources): Вид контрагента (id=1) и Контрагенты (id=2).
+
Два поля - Выпадающих списка: Вид контрагента и Контрагенты с источниками-справочниками (Справочник видов контрагентов (id=2, "dictionaryId": 10754,) и справочник Контрагентов (id=3, "dictionaryId": 10755))
Три источника (entryDataSources): Справочник, куда данные будут записываться (id=1), справочник видов контроля (id=2, "dictionaryId": 10754,) и справочник Контрагентов (id=3, "dictionaryId": 10755).
 
  
 
В источник "Контрагенты" добавлен фильтр, в котором указан "dictionaryEntrySourceId": 2 - справочник видов контроля от значений которого идет фильтрация, далее указан номер атрибута справочника Контрагенты (id=1), в данном случае мы сравниваем по первому атрибуту - идентификатору. Далее обозначен атрибут текущего источника, справочника "Контрагенты", с которым мы сравниваем и в котором указан вид (id=21).
 
В источник "Контрагенты" добавлен фильтр, в котором указан "dictionaryEntrySourceId": 2 - справочник видов контроля от значений которого идет фильтрация, далее указан номер атрибута справочника Контрагенты (id=1), в данном случае мы сравниваем по первому атрибуту - идентификатору. Далее обозначен атрибут текущего источника, справочника "Контрагенты", с которым мы сравниваем и в котором указан вид (id=21).
 +
 +
Таким образом при выборе элемента в поле "Вид контрагента" будет происходить фильтрация в поле "Контрагенты "
 +
 +
Важно! Если необходимо, чтобы фильтрация происходила сразу после выбора "Вида контрагента", необходимо поставить флаг "Выполнить действие при изменении значения", в ином случае будет необходимо [[Платформа_3V/Формы/Действия/обновить источник| '''Условия''']]
 +
 
<syntaxhighlight lang="JSON" line>
 
<syntaxhighlight lang="JSON" line>
 
"filter": {
 
"filter": {
Строка 265: Строка 217:
 
         "inversion": false,
 
         "inversion": false,
 
         "conditionId": null,
 
         "conditionId": null,
         "discriminator": "EntryFilterDto"
+
         "discriminator": "EntryFilter"
 
       },
 
       },
 
</syntaxhighlight>
 
</syntaxhighlight>
Строка 358: Строка 310:
 
         "inversion": false,
 
         "inversion": false,
 
         "conditionId": null,
 
         "conditionId": null,
         "discriminator": "EntryFilterDto"
+
         "discriminator": "EntryFilter"
 
       }
 
       }
 
</syntaxhighlight>
 
</syntaxhighlight>
Строка 395: Строка 347:
 
           "discriminator": "TransitiveAttributeDefinitionDto"
 
           "discriminator": "TransitiveAttributeDefinitionDto"
 
         },
 
         },
{
+
        {
 
           "id": 21,
 
           "id": 21,
 
           "discriminator": "OwnAttributeDefinitionDto"
 
           "discriminator": "OwnAttributeDefinitionDto"
Строка 401: Строка 353:
 
       ]
 
       ]
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
[[Файл:фильтр от транизитивного атрибута.gif|400px|безрамки|без]]
  
 
В примере JSON фильтрация от контрагента происходит как для справочника городов, так и для номеров домов и улиц.
 
В примере JSON фильтрация от контрагента происходит как для справочника городов, так и для номеров домов и улиц.
Строка 409: Строка 363:
 
{
 
{
 
   "id": 176,
 
   "id": 176,
   "name": "Пример фильтра от транзитивного атрибуа справочника (EntryFilterDto)",
+
   "name": "Пример фильтра от транзитивного атрибута справочника (EntryFilter)",
 
   "description": null,
 
   "description": null,
   "title": "Пример фильтра от транзитивного атрибуа справочника (EntryFilterDto)",
+
   "title": "Пример фильтра от транзитивного атрибута справочника (EntryFilter)",
 
   "entrySettings": null,
 
   "entrySettings": null,
 
   "uiSources": [
 
   "uiSources": [
Строка 614: Строка 568:
 
         "inversion": false,
 
         "inversion": false,
 
         "conditionId": null,
 
         "conditionId": null,
         "discriminator": "EntryFilterDto"
+
         "discriminator": "EntryFilter"
 
       },
 
       },
 
       "sortingOptions": null,
 
       "sortingOptions": null,
Строка 657: Строка 611:
 
         "inversion": false,
 
         "inversion": false,
 
         "conditionId": null,
 
         "conditionId": null,
         "discriminator": "EntryFilterDto"
+
         "discriminator": "EntryFilter"
 
       },
 
       },
 
       "sortingOptions": null,
 
       "sortingOptions": null,
Строка 704: Строка 658:
 
         "inversion": false,
 
         "inversion": false,
 
         "conditionId": null,
 
         "conditionId": null,
         "discriminator": "EntryFilterDto"
+
         "discriminator": "EntryFilter"
 
       },
 
       },
 
       "sortingOptions": null,
 
       "sortingOptions": null,

Текущая версия на 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" все атрибуты (транзитивные и собственные), которые используются. Пример см.ниже "Пример фильтрации от транзитивного атрибута"

Пример фильтрации от собственного атрибута справочника

Справочник "Контрагенты" содержит связный атрибут "Виды контрагентов". Можно создать форму у в которой, при выборе из выпадающего списка "Вида контрагентов", элементы следующего выпадающего списка "Контрагенты" будут только выбранного вида.

Screenshot 2021-04-15 at 10.34.19.png
JSON серверной карточки

Два поля - Выпадающих списка: Вид контрагента и Контрагенты с источниками-справочниками (Справочник видов контрагентов (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 Мира (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       ]
фильтр от транизитивного атрибута.gif

В примере JSON фильтрация от контрагента происходит как для справочника городов, так и для номеров домов и улиц.

JSON серверной карточки