Сортировка

Для большинства коллекций, возвращаемых JSON API, доступна сортировка.

Сортировка поддерживается для следующих типов полей:

  • числовой,
  • строковый,
  • дата-время,
  • логический,
  • uuid.

Доступные поля для сортировки

В зависимости от вызываемого endpoint’а сортируемые поля могут отличаться. В таблицах ниже представлены сортируемые поля справочников и документов.

Endpoint (справочники) Сортируемые поля
Контрагент id, version, updated, updatedBy, name, description, code, externalCode, archived, created, phone, email, fax
Ассортимент name, code
Валюта id, name, archived, default, fullname, code, isoCode, multiplicity
Товар id, version, updated, updatedBy, name, code, externalCode, archived, pathName, isSerialTrackable, weighed, weight, volume, syncId
Услуга id, version, updated, updatedBy, name, code, externalCode, archived, pathName, syncId
Комплект id, version, updated, updatedBy, name, description, code, externalCode, archived, pathName, article, weight, volume, syncId
Модификация id,version, updated,updatedBy, name, description, code,externalCode
Группа товаров id, version, updated, updatedBy, name, externalCode, archived, pathName
Серия id,version, updated,updatedBy, name, description, code,externalCode
Договор id, version, updated, updatedBy, name, description, code, externalCode, archived, moment
Проект id,version, updated,updatedBy, name, code,externalCode, archived
Статья расходов id,version, updated,updatedBy, name, description, code,externalCode
Страна id,version, updated,updatedBy, name, description, code,externalCode
Отдел id
Единица измерения id, version, updated, name, description, code, externalCode
Сотрудник id, version, updated, updatedBy, name, description, externalCode,archived,email,phone,lastname, firstname, middlename, uid
Склад id,version, updated,updatedBy, name, description, code, externalCode, address, archived, pathName
Юрлицо id,version, updated,updatedBy, name, description, code,externalCode, archived, created, inn, actualAddress, legalTitle, legalAddress, kpp, phone, email, fax
Точка продаж id,version, updated,updatedBy, name, description, externalCode, address, active
Задача id, created, version, updated, description, dueToDate, done
Endpoint (документы) Сортируемые поля
Розничная смена id, syncId, version, updated, updatedBy, name, description, externalCode, moment, applicable, sum, created, closeDate
Оприходования id, syncId,version, updated,updatedBy,name, description, externalCode,moment, applicable,sum, created
Заказ покупателя id, syncId,version, updated,updatedBy,name, description, externalCode,moment, applicable,sum, created, deliveryPlannedMoment
Заказ поставщику id, syncId,version, updated,updatedBy,name, description, externalCode,moment, applicable,sum, created, deliveryPlannedMoment
Счет покупателю id, syncId, version, updated, updatedBy, name, description, externalCode, moment, applicable, sum, created
Счет поставщика id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created, incomingNumber, incomingDate, paymentPlannedMoment
Входящий платеж id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created, paymentPurpose, incomingNumber, incomingDate
Исходящий платеж id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created, paymentPurpose
Приходный ордер id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created, paymentPurpose
Расходный ордер id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created, paymentPurpose
Отгрузка id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Приемка id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Списание id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Перемещение id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Розничная продажа id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Розничный возврат id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Внесение денег id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Выплата денег id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Возврат покупателя id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Возврат поставщику id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Счет-фактура выданный id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Счет-фактура полученный id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Инвентаризация id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Полученный отчет комиссионера id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created, incomingDate
Выданный отчет комиссионера id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Прайс-лист id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created
Тех. карта id, syncId, version, updated, updatedBy, name, description, externalCode
Заказ на производство id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created, deliveryPlannedMoment, quantity
Тех. операция id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created, quantity
Внутренний заказ id, syncId,version, updated,updatedBy, name, description, externalCode,moment, applicable, sum, created, quantity

Как использовать сортировку через JSON API

Для применения сортировки к коллекции необходимо добавить в запрос order=[field name],[asc/desc], где field name - имя поля для сортировки. Опционально через запятую можно указать направление сортировки:

  • asc - по возрастанию, значение по умолчанию,
  • desc - по убыванию. Например, для сортировки поля name по возрастанию нужно использовать ?order=name, asc или ?order=name, а по убыванию ?order=name,desc.

Сортировка также доступна одновременно для нескольких полей, поля для сортировки необходимо указывать через разделитель ;. Например, ?order=name,asc;code,desc.

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

curl -X POST \
https://online.moysklad.ru/api/remap/1.1/entity/product \
-H 'Authorization: Basic token=' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-d '[
 {
"name":"12345",
"weight":0.1,
"weighed":true,
"syncId":"8b7c97cf-cf77-4f7e-b200-d264125578ab"
 },
 {
"name":"Pencil",
"weight":0.01,
"syncId":"5b7c97cf-cf77-4f7e-b200-d264125578ab"
 },
 {
"name":"Pencil 123",
"weight":0.01,
"syncId":"3b7c97cf-cf77-4f7e-b200-d264125578ab"
 },
 {
"name":"Pencil Blue",
"weight":0.11,
"weighed":true
 },
 {
"name":"Pencil Red",
"weight":0.2,
"syncId":"1b7c97cf-cf77-4f7e-b200-d264125578ab"
 },
 {
"name":"Карандаш",
"weight":0.1,
"syncId":"2b7c97cf-cf77-4f7e-b200-d264125578ab"
 },
 {
"name":"Карандаш 123",
"weight":0.32,
"syncId":"4b7c97cf-cf77-4f7e-b200-d264125578ab"
 },
 {
"name":"Карандаш желтый",
"weight":0.12,
"weighed":true,
"syncId":"7b7c97cf-cf77-4f7e-b200-d264125578ab"
 },
 {
"name":"Карандаш зеленый",
"weight":0.4,
"syncId":"8c7c97cf-cf77-4f7e-b200-d264125578ab"
 },
 {
"name":"!!! Это карандаш",
"weight":0.1,
"syncId":"3d7c97cf-cf77-4f7e-b200-d264125578ab"
 }
]'

Чтобы получить коллекцию товаров, отсортированных по имени, необходимо указать поле name и направление сортировки, как в примере ниже

curl -X GET \
'https://online.moysklad.ru/api/remap/1.1/entity/product?order=name' \
-H 'Authorization: Basic token==' \
-H 'Cache-Control: no-cache'

Ответ будет содержать следующий порядок по возрастанию:

name
12345
Pencil
Pencil 123
Pencil Blue
Pencil Red
Карандаш
Карандаш 123
Карандаш желтый
Карандаш зеленый
!!! Это карандаш

Изменим направление сортировки

curl -X GET \
'https://online.moysklad.ru/api/remap/1.1/entity/product?order=name,desc' \
-H 'Authorization: Basic token==' \
-H 'Cache-Control: no-cache'
name
!!! Это карандаш
Карандаш зеленый
Карандаш желтый
Карандаш 123
Карандаш
Pencil Red
Pencil Blue
Pencil 123
Pencil
12345

Попробуем отсортировать товары одновременно по убыванию логического поля weighed и по возрастанию поля name.

curl -X GET \
'https://online.moysklad.ru/api/remap/1.1/entity/product?order=weighed,desc;name' \
-H 'Authorization: Basic token=' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json'
weighed name
true 12345
true Pencil Blue
true Карандаш желтый
false Pencil
false Pencil 123
false Pencil Red
false Карандаш
false Карандаш 123
false Карандаш зеленый
false !!! Это карандаш

Добавим еще сортировку по числовому полю weight.

curl -X GET \
'https://online.moysklad.ru/api/remap/1.1/entity/product?order=weighed,desc;weight,desc;name' \
-H 'Authorization: Basic token=' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json'
weighed weight name
true 0.12 Карандаш желтый
true 0.11 Pencil Blue
true 0.1 12345
false 0.4 Карандаш зеленый
false 0.32 Карандаш 123
false 0.2 Pencil Red
false 0.1 Карандаш
false 0.1 !!! Это карандаш
false 0.01 Pencil
false 0.01 Pencil 123

Кроме текстовых, числовых и логических полей доступна сортировка по полям типов uuid и дата-время. Например, применим сортировку по полю syncId.

curl -X GET \
'https://online.moysklad.ru/api/remap/1.1/entity/product?order=syncId' \
-H 'Authorization: Basic token=' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json'
syncId name
1b7c97cf-cf77-4f7e-b200-d264125578ab Pencil Red
2b7c97cf-cf77-4f7e-b200-d264125578ab Карандаш
3b7c97cf-cf77-4f7e-b200-d264125578ab Pencil 123
3d7c97cf-cf77-4f7e-b200-d264125578ab !!! Это карандаш
4b7c97cf-cf77-4f7e-b200-d264125578ab Карандаш 123
5b7c97cf-cf77-4f7e-b200-d264125578ab Pencil
7b7c97cf-cf77-4f7e-b200-d264125578ab Карандаш желтый
8b7c97cf-cf77-4f7e-b200-d264125578ab 12345
8c7c97cf-cf77-4f7e-b200-d264125578ab Карандаш зеленый
null Pencil Blue

У товара Pencil Blue отсутствует значение поля поэтому при сортировке по возрастанию, оно выводится в конце. Аналогичное поведение и для других полей со значением null.