Сортировка элементов справочника (SortingOptions)

Материал из 3v-wiki
Перейти к навигации Перейти к поиску

Последовательное расположение в зависимости от выбранного атрибута справочника

 1  "sortingOptions": {
 2         "attributes": [
 3           {
 4             "attribute": {
 5               "id": 1,
 6               "discriminator": "OwnAttributeDefinitionDto"
 7             },
 8             "sortDirection": "Descending",
 9             "nullsSortingMode": "PlaceFirst"
10           }
11         ]
12       }
Значение Описание
attribute описание пути до атрибута, по которому будет производиться сортировка
sortDirection Направление по убыванию / по возрастанию ("Descending" / "Ascending")
nullsSortingMode нулевые значения в начале / в конце ("PlaceFirst" / "PlaceLast")

Особенности использования

Сортировка по атрибуту справочника с типом "числовой, дробный" происходит по математической логике упорядочивания чисел (1 < 2 < 10).

Сортировка по атрибуту справочника с типом "дата" происходит в соответствии с порядком дней в календаре.

Сортировка по текстовому атрибуту происходит по каждому символу. Порядок по возрастанию, в рамках которого происходит упорядочивание, каждого символа в названии: символы ("-", "!" и т.д.), цифры (от 0 до 9), буквы русские (от А до Я), буквы латинского алфавита ( от A до Z)

Пример использования в форме и отчете

Кейс: исходный справочник "Договоры" имеет следующую структуру и типы данных в атрибутах

Идентификатор Наименование Порядковый номер Сумма по договору Дата подписания
1 2 21 22 23
Числовой Текстовый Числовой Дробный Дата
1 123 1 100,00 22.04.2021
2 АБ-1-11 10 100,12 04.03.2021
3 1 2 98,00 22.04.2021
4 11 21 1,00
5 -11-АБ 3 11,00 05.08.2019
6 2 11 14.05.2020

При сортировке по возрастанию по атр. "Наименование" (id=2) порядок будет следующий:

Идентификатор Наименование Порядковый номер Сумма по договору Дата подписания
1 2 21 22 23
Числовой Текстовый Числовой Дробный Дата
5 -11-АБ 3 11,00 05.08.2019
3 1 2 98,00 22.04.2021
4 11 21 1,00
1 123 1 100,00 22.04.2021
6 2 11 14.05.2020
2 АБ-1-11 10 100,12 04.03.2021

При сортировке по возрастанию по атр. "Порядковый номер" (id=21) порядок будет следующий:

Идентификатор Наименование Порядковый номер Сумма по договору Дата подписания
1 2 21 22 23
Числовой Текстовый Числовой Дробный Дата
1 123 1 100,00 22.04.2021
3 1 2 98,00 22.04.2021
5 -11-АБ 3 11,00 05.08.2019
2 АБ-1-11 10 100,12 04.03.2021
6 2 11 14.05.2020
4 11 21 1,00

При сортировке по убыванию по атр. "Сумма по договору" (id=22) и расположению пустых атрибутов в конце списка порядок будет следующий:

Идентификатор Наименование Порядковый номер Сумма по договору Дата подписания
1 2 21 22 23
Числовой Текстовый Числовой Дробный Дата
2 АБ-1-11 10 100,12 04.03.2021
1 123 1 100,00 22.04.2021
3 1 2 98,00 22.04.2021
5 -11-АБ 3 11,00 05.08.2019
4 11 21 1,00
6 2 11 14.05.2020

При сортировке по убыванию по атр. "Дата подписания" (id=22) и расположению пустых атрибутов в начале списка порядок будет следующий:

Идентификатор Наименование Порядковый номер Сумма по договору Дата подписания
1 2 21 22 23
Числовой Текстовый Числовой Дробный Дата
4 11 21 1,00
1 123 1 100,00 22.04.2021
3 1 2 98,00 22.04.2021
2 АБ-1-11 10 100,12 04.03.2021
6 2 11 14.05.2020
5 -11-АБ 3 11,00 05.08.2019

Пример использования в форме


JSON серверной карточки со всеми примерами сортировки
  1 {
  2   "id": 53,
  3   "name": "Сортировка справочника договоры",
  4   "description": "",
  5   "title": "",
  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": 11,
 17       "caption": "Без сортировки",
 18       "enable": true,
 19       "visible": true,
 20       "hint": null,
 21       "uiDataSource": null,
 22       "doActionOnChangeValue": true,
 23       "onAfterChangeValueConditionalActions": null,
 24       "onAfterChangeValueByClientConditionalActions": null,
 25       "rebuildDependentsObjectOnChange": true,
 26       "enableRuleIds": [],
 27       "visibleRuleIds": [],
 28       "access": null,
 29       "isValueChanged": true,
 30       "expressionId": null,
 31       "discriminator": "DictionarySourceEntry"
 32     },
 33     {
 34       "dataSourceId": 2,
 35       "nameTemplate": "",
 36       "displayAttribute": null,
 37       "hasMultipleValue": false,
 38       "hasNullableValue": false,
 39       "maxElements": null,
 40       "hasServerFiltration": false,
 41       "id": 12,
 42       "caption": "По возрастанию (по наименованию)",
 43       "enable": true,
 44       "visible": true,
 45       "hint": null,
 46       "uiDataSource": null,
 47       "doActionOnChangeValue": true,
 48       "onAfterChangeValueConditionalActions": null,
 49       "onAfterChangeValueByClientConditionalActions": null,
 50       "rebuildDependentsObjectOnChange": true,
 51       "enableRuleIds": [],
 52       "visibleRuleIds": [],
 53       "access": null,
 54       "isValueChanged": true,
 55       "expressionId": null,
 56       "discriminator": "DictionarySourceEntry"
 57     },
 58     {
 59       "dataSourceId": 3,
 60       "nameTemplate": "[2] (Порядковый номер:[21])",
 61       "displayAttribute": null,
 62       "hasMultipleValue": false,
 63       "hasNullableValue": false,
 64       "maxElements": null,
 65       "hasServerFiltration": false,
 66       "id": 13,
 67       "caption": "По возрастанию (по порядковому номеру)",
 68       "enable": true,
 69       "visible": true,
 70       "hint": null,
 71       "uiDataSource": null,
 72       "doActionOnChangeValue": true,
 73       "onAfterChangeValueConditionalActions": null,
 74       "onAfterChangeValueByClientConditionalActions": null,
 75       "rebuildDependentsObjectOnChange": true,
 76       "enableRuleIds": [],
 77       "visibleRuleIds": [],
 78       "access": null,
 79       "isValueChanged": true,
 80       "expressionId": null,
 81       "discriminator": "DictionarySourceEntry"
 82     },
 83     {
 84       "dataSourceId": 4,
 85       "nameTemplate": "[2] (Сумма: [22])",
 86       "displayAttribute": null,
 87       "hasMultipleValue": false,
 88       "hasNullableValue": false,
 89       "maxElements": null,
 90       "hasServerFiltration": false,
 91       "id": 14,
 92       "caption": "По убыванию (по сумме)",
 93       "enable": true,
 94       "visible": true,
 95       "hint": null,
 96       "uiDataSource": null,
 97       "doActionOnChangeValue": true,
 98       "onAfterChangeValueConditionalActions": null,
 99       "onAfterChangeValueByClientConditionalActions": null,
100       "rebuildDependentsObjectOnChange": true,
101       "enableRuleIds": [],
102       "visibleRuleIds": [],
103       "access": null,
104       "isValueChanged": true,
105       "expressionId": null,
106       "discriminator": "DictionarySourceEntry"
107     },
108     {
109       "dataSourceId": 5,
110       "nameTemplate": "[2] (Дата подписания: [23])",
111       "displayAttribute": null,
112       "hasMultipleValue": false,
113       "hasNullableValue": false,
114       "maxElements": null,
115       "hasServerFiltration": false,
116       "id": 15,
117       "caption": "По убыванию (по дата подписания)",
118       "enable": true,
119       "visible": true,
120       "hint": null,
121       "uiDataSource": null,
122       "doActionOnChangeValue": true,
123       "onAfterChangeValueConditionalActions": null,
124       "onAfterChangeValueByClientConditionalActions": null,
125       "rebuildDependentsObjectOnChange": true,
126       "enableRuleIds": [],
127       "visibleRuleIds": [],
128       "access": null,
129       "isValueChanged": true,
130       "expressionId": null,
131       "discriminator": "DictionarySourceEntry"
132     }
133   ],
134   "entryDataSources": [
135     {
136       "dictionaryId": 67,
137       "hierarchyId": null,
138       "filter": null,
139       "sortingOptions": null,
140       "groupingOptions": null,
141       "dictionaryAttributes": null,
142       "defaultValue": [],
143       "defaultValueExpressionId": null,
144       "parameterId": null,
145       "dictionarySourceSelectionMode": "None",
146       "dataSourceAttributesAdditionsSettings": [],
147       "externalFileStorageUrl": null,
148       "filePrefix": null,
149       "defaultNewElementSettings": null,
150       "id": 1,
151       "name": null,
152       "isReadOnly": true,
153       "dataEditRuleIds": [],
154       "beforeSaveDataActions": [],
155       "afterSaveDataActions": [],
156       "discriminator": "DictionaryDataSource"
157     },
158     {
159       "dictionaryId": 67,
160       "hierarchyId": null,
161       "filter": null,
162       "sortingOptions": {
163         "attributes": [
164           {
165             "attribute": {
166               "id": 2,
167               "discriminator": "OwnAttributeDefinitionDto"
168             },
169             "sortDirection": "Ascending",
170             "nullsSortingMode": "PlaceFirst"
171           }
172         ]
173       },
174       "groupingOptions": null,
175       "dictionaryAttributes": null,
176       "defaultValue": [],
177       "defaultValueExpressionId": null,
178       "parameterId": null,
179       "dictionarySourceSelectionMode": "None",
180       "dataSourceAttributesAdditionsSettings": [],
181       "externalFileStorageUrl": null,
182       "filePrefix": null,
183       "defaultNewElementSettings": null,
184       "id": 2,
185       "name": null,
186       "isReadOnly": true,
187       "dataEditRuleIds": [],
188       "beforeSaveDataActions": [],
189       "afterSaveDataActions": [],
190       "discriminator": "DictionaryDataSource"
191     },
192     {
193       "dictionaryId": 67,
194       "hierarchyId": null,
195       "filter": null,
196       "sortingOptions": {
197         "attributes": [
198           {
199             "attribute": {
200               "id": 21,
201               "discriminator": "OwnAttributeDefinitionDto"
202             },
203             "sortDirection": "Ascending",
204             "nullsSortingMode": "PlaceFirst"
205           }
206         ]
207       },
208       "groupingOptions": null,
209       "dictionaryAttributes": null,
210       "defaultValue": [],
211       "defaultValueExpressionId": null,
212       "parameterId": null,
213       "dictionarySourceSelectionMode": "None",
214       "dataSourceAttributesAdditionsSettings": [],
215       "externalFileStorageUrl": null,
216       "filePrefix": null,
217       "defaultNewElementSettings": null,
218       "id": 3,
219       "name": null,
220       "isReadOnly": true,
221       "dataEditRuleIds": [],
222       "beforeSaveDataActions": [],
223       "afterSaveDataActions": [],
224       "discriminator": "DictionaryDataSource"
225     },
226     {
227       "dictionaryId": 67,
228       "hierarchyId": null,
229       "filter": null,
230       "sortingOptions": {
231         "attributes": [
232           {
233             "attribute": {
234               "id": 22,
235               "discriminator": "OwnAttributeDefinitionDto"
236             },
237             "sortDirection": "Descending",
238             "nullsSortingMode": "PlaceLast"
239           }
240         ]
241       },
242       "groupingOptions": null,
243       "dictionaryAttributes": null,
244       "defaultValue": [],
245       "defaultValueExpressionId": null,
246       "parameterId": null,
247       "dictionarySourceSelectionMode": "None",
248       "dataSourceAttributesAdditionsSettings": [],
249       "externalFileStorageUrl": null,
250       "filePrefix": null,
251       "defaultNewElementSettings": null,
252       "id": 4,
253       "name": null,
254       "isReadOnly": true,
255       "dataEditRuleIds": [],
256       "beforeSaveDataActions": [],
257       "afterSaveDataActions": [],
258       "discriminator": "DictionaryDataSource"
259     },
260     {
261       "dictionaryId": 67,
262       "hierarchyId": null,
263       "filter": null,
264       "sortingOptions": {
265         "attributes": [
266           {
267             "attribute": {
268               "id": 23,
269               "discriminator": "OwnAttributeDefinitionDto"
270             },
271             "sortDirection": "Descending",
272             "nullsSortingMode": "PlaceFirst"
273           }
274         ]
275       },
276       "groupingOptions": null,
277       "dictionaryAttributes": null,
278       "defaultValue": [],
279       "defaultValueExpressionId": null,
280       "parameterId": null,
281       "dictionarySourceSelectionMode": "None",
282       "dataSourceAttributesAdditionsSettings": [],
283       "externalFileStorageUrl": null,
284       "filePrefix": null,
285       "defaultNewElementSettings": null,
286       "id": 5,
287       "name": null,
288       "isReadOnly": true,
289       "dataEditRuleIds": [],
290       "beforeSaveDataActions": [],
291       "afterSaveDataActions": [],
292       "discriminator": "DictionaryDataSource"
293     }
294   ],
295   "parameters": [],
296   "binaryConditionsRules": [],
297   "submitValidateRules": [],
298   "expressions": [],
299   "controlsValueCalculateRules": [],
300   "actions": [],
301   "conditionActionIdsOnOpen": [],
302   "conditionalActions": [],
303   "selectionSets": [],
304   "reportTemplates": [],
305   "useNewDependenciesBuilder": null
306 }


Сортировки в форме.jpg

Пример использования в отчете


JSON отчета с сортировкой по возрастанию атр."Наименование"
  1 {
  2   "workflowId": null,
  3   "leftHeader": {
  4     "useLazyDataLoadingStrategy": false,
  5     "dictionaries": [
  6       {
  7         "showDataIfAbsentFilter": null,
  8         "coordAttribute": null,
  9         "cartesianOptions": "Default",
 10         "canSelectAttribute": null,
 11         "groupingOptions": null,
 12         "groupingMethod": "Default",
 13         "sortingOptions": {
 14           "attributes": [
 15             {
 16               "attribute": {
 17                 "id": 2,
 18                 "discriminator": "OwnAttributeDefinitionDto"
 19               },
 20               "sortDirection": "Ascending",
 21               "nullsSortingMode": "PlaceFirst"
 22             }
 23           ]
 24         },
 25         "rootElement": null,
 26         "virtualElements": null,
 27         "displayValueOptions": null,
 28         "displayAttribute": null,
 29         "dictionaryId": 67,
 30         "filter": {
 31           "value": null,
 32           "skipIfValueNull": false,
 33           "attributeId": null,
 34           "attribute": {
 35             "id": 1,
 36             "discriminator": "OwnAttributeDefinitionDto"
 37           },
 38           "conditionType": "AllElements",
 39           "inversion": false,
 40           "discriminator": "ValueConditionalDictionaryFilterDto"
 41         },
 42         "selection": null,
 43         "hierarchyId": null,
 44         "limit": null
 45       }
 46     ],
 47     "dictionaryAttributesLinks": [],
 48     "specialFilters": {
 49       "filtersByDataOptions": {
 50         "filtersByData": [],
 51         "needRestoreFullHierachy": false,
 52         "joinOption": "Or",
 53         "restoreElements": null
 54       },
 55       "dictionaryAttributesLinks": [],
 56       "needRestoreFullHierachy": false,
 57       "restoreElements": null
 58     },
 59     "isEditable": false
 60   },
 61   "topHeader": {
 62     "topHeaderItems": [
 63       {
 64         "dictionaryAttributes": [
 65           {
 66             "dictionaryId": 67,
 67             "attribute": {
 68               "id": 2,
 69               "discriminator": "OwnAttributeDefinitionDto"
 70             },
 71             "filter": null,
 72             "sortingOptions": null,
 73             "attributeId": null,
 74             "displayAttributeType": "AttributeName",
 75             "displayAttributeName": null,
 76             "addFirstElementValue": false,
 77             "overwriteNotFirstElementValues": true,
 78             "delimiter": ", ",
 79             "hideAttributeNameInHeader": false,
 80             "headerNameDelimiter": " / ",
 81             "duplicateValuesForNextDictionaries": true,
 82             "duplicateValuesForNextRows": true,
 83             "displayValueOptions": null,
 84             "linkedAttributeSettings": null,
 85             "skippedFilterAttributesByLink": [],
 86             "filterOptionsByLinks": null
 87           }
 88         ],
 89         "settings": null,
 90         "hyperlinkOptions": null,
 91         "hasImage": false,
 92         "columnOptions": null,
 93         "discriminator": "AttributeHeaderItemDto"
 94       },
 95       {
 96         "dictionaryAttributes": [
 97           {
 98             "dictionaryId": 67,
 99             "attribute": {
100               "id": 21,
101               "discriminator": "OwnAttributeDefinitionDto"
102             },
103             "filter": null,
104             "sortingOptions": null,
105             "attributeId": null,
106             "displayAttributeType": "AttributeName",
107             "displayAttributeName": null,
108             "addFirstElementValue": false,
109             "overwriteNotFirstElementValues": true,
110             "delimiter": ", ",
111             "hideAttributeNameInHeader": false,
112             "headerNameDelimiter": " / ",
113             "duplicateValuesForNextDictionaries": true,
114             "duplicateValuesForNextRows": true,
115             "displayValueOptions": null,
116             "linkedAttributeSettings": null,
117             "skippedFilterAttributesByLink": [],
118             "filterOptionsByLinks": null
119           }
120         ],
121         "settings": null,
122         "hyperlinkOptions": null,
123         "hasImage": false,
124         "columnOptions": null,
125         "discriminator": "AttributeHeaderItemDto"
126       },
127       {
128         "dictionaryAttributes": [
129           {
130             "dictionaryId": 67,
131             "attribute": {
132               "id": 22,
133               "discriminator": "OwnAttributeDefinitionDto"
134             },
135             "filter": null,
136             "sortingOptions": null,
137             "attributeId": null,
138             "displayAttributeType": "AttributeName",
139             "displayAttributeName": null,
140             "addFirstElementValue": false,
141             "overwriteNotFirstElementValues": true,
142             "delimiter": ", ",
143             "hideAttributeNameInHeader": false,
144             "headerNameDelimiter": " / ",
145             "duplicateValuesForNextDictionaries": true,
146             "duplicateValuesForNextRows": true,
147             "displayValueOptions": null,
148             "linkedAttributeSettings": null,
149             "skippedFilterAttributesByLink": [],
150             "filterOptionsByLinks": null
151           }
152         ],
153         "settings": null,
154         "hyperlinkOptions": null,
155         "hasImage": false,
156         "columnOptions": null,
157         "discriminator": "AttributeHeaderItemDto"
158       },
159       {
160         "dictionaryAttributes": [
161           {
162             "dictionaryId": 67,
163             "attribute": {
164               "id": 23,
165               "discriminator": "OwnAttributeDefinitionDto"
166             },
167             "filter": null,
168             "sortingOptions": null,
169             "attributeId": null,
170             "displayAttributeType": "AttributeName",
171             "displayAttributeName": null,
172             "addFirstElementValue": false,
173             "overwriteNotFirstElementValues": true,
174             "delimiter": ", ",
175             "hideAttributeNameInHeader": false,
176             "headerNameDelimiter": " / ",
177             "duplicateValuesForNextDictionaries": true,
178             "duplicateValuesForNextRows": true,
179             "displayValueOptions": null,
180             "linkedAttributeSettings": null,
181             "skippedFilterAttributesByLink": [],
182             "filterOptionsByLinks": null
183           }
184         ],
185         "settings": null,
186         "hyperlinkOptions": null,
187         "hasImage": false,
188         "columnOptions": null,
189         "discriminator": "AttributeHeaderItemDto"
190       }
191     ],
192     "needFilterAttributesByLinks": false,
193     "enableFilterByLinks": false,
194     "numerationSettings": null,
195     "filterOptions": null
196   },
197   "parameters": [],
198   "styles": [],
199   "styleOptions": [],
200   "stylesTemplate": [],
201   "filtersByDataOptions": null,
202   "view": null,
203   "externalExecutions": null,
204   "settings": null,
205   "code": "P_Сортировка элементов справочника (SortingOptions)",
206   "id": 82,
207   "name": "Сортировка элементов справочника (SortingOptions)"
208 }


Сортировка в отчете.jpg