Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Получение данных из табличной части документа
Дальше: Получение данных регистра сведений

Условие отбора по реквизитам табличных частей

При получении данных через REST-интерфейс можно не только выполнять отбор по реквизитам объектов конфигурации и их табличных частей, но и накладывать условия отбора на элементы коллекций. Для этого необходимо использовать лямбда-функции. Система поддерживает использование следующих лямбда-функций:

Например, нам нужно получить список документов ПоступлениеТоваров, у которых цена хотя бы одного поступившего товара (значение реквизита Цена табличной части Товары) больше 3000.

Для этого наберем в адресной строке браузера следующий URL (листинг 1.104).

Листинг 1.104. URL запроса

localhost/REST/odata/standard.odata/Document_ПоступлениеТоваров?$filter=Товары/any(d: d/Цена gt 3000)&$format=json

В результате в ответе сервера будут содержаться данные двух из трех документов (Number: 000000001, 000000002), в состав которых входит хотя бы одна строка табличной части, удовлетворяющая условию (листинг 1.105).

Листинг 1.105. Содержимое ответа сервера

{

"odata.metadata": "http://localhost/REST/odata/standard.odata/$metadata#Document_ПоступлениеТоваров",

"value": [{

"Ref_Key": "34c5d79a-7636-11e9-88b7-642737df2048",

"DataVersion": "AAAABQAAAAA=",

"DeletionMark": false,

"Number": "000000001",

"Date": "2019-05-10T12:00:00",

"Posted": true,

"Поставщик_Key": "9cfabfb1-4cb2-11e9-9334-642737df2048",

"Товары": [

{

"Ref_Key": "34c5d79a-7636-11e9-88b7-642737df2048",

"LineNumber": "1",

"Товар_Key": "34c5d799-7636-11e9-88b7-642737df2048",

"Количество": 3,

"Цена": "5000",

"Сумма": "15000"

},

{

"Ref_Key": "34c5d79a-7636-11e9-88b7-642737df2048",

"LineNumber": "2",

"Товар_Key": "34c5d798-7636-11e9-88b7-642737df2048",

"Количество": 5,

"Цена": "2000",

"Сумма": "10000"

}

],

"Поставщик@navigationLinkUrl": "Document_ПоступлениеТоваров(guid'34c5d79a-7636-11e9-88b7-642737df2048')/Поставщик"

},{

"Ref_Key": "34c5d79b-7636-11e9-88b7-642737df2048",

"DataVersion": "AAAABgAAAAA=",

"DeletionMark": false,

"Number": "000000002",

"Date": "2019-05-13T12:00:00",

"Posted": true,

"Поставщик_Key": "9cfabfb0-4cb2-11e9-9334-642737df2048",

"Товары": [

{

"Ref_Key": "34c5d79b-7636-11e9-88b7-642737df2048",

"LineNumber": "1",

"Товар_Key": "34c5d799-7636-11e9-88b7-642737df2048",

"Количество": 3,

"Цена": "5500",

"Сумма": "16500"

},

{

"Ref_Key": "34c5d79b-7636-11e9-88b7-642737df2048",

"LineNumber": "2",

"Товар_Key": "34c5d797-7636-11e9-88b7-642737df2048",

"Количество": 3,

"Цена": "3300",

"Сумма": "9900"

}

],

"Поставщик@navigationLinkUrl": "Document_ПоступлениеТоваров(guid'34c5d79b-7636-11e9-88b7-642737df2048')/Поставщик"

}]

}

А теперь предположим, что нам нужно получить список документов ПоступлениеТоваров, у которых цена каждого поступившего товара (значение реквизита Цена табличной части Товары) больше 3000.

Для этого наберем в адресной строке браузера следующий URL (листинг 1.106).

Листинг 1.106. URL запроса

localhost/REST/odata/standard.odata/Document_ПоступлениеТоваров?$filter=Товары/all(d: d/Цена gt 3000)&$format=json

В результате в ответе сервера будут содержаться данные только одного документа (Number: 000000002), в составе которого все строки табличной части удовлетворяют заданному условию (листинг 1.107).

Листинг 1.107. Содержимое ответа сервера

{

"odata.metadata": "http://localhost/REST/odata/standard.odata/$metadata#Document_ПоступлениеТоваров",

"value": [{

"Ref_Key": "34c5d79b-7636-11e9-88b7-642737df2048",

"DataVersion": "AAAABgAAAAA=",

"DeletionMark": false,

"Number": "000000002",

"Date": "2019-05-13T12:00:00",

"Posted": true,

"Поставщик_Key": "9cfabfb0-4cb2-11e9-9334-642737df2048",

"Товары": [

{

"Ref_Key": "34c5d79b-7636-11e9-88b7-642737df2048",

"LineNumber": "1",

"Товар_Key": "34c5d799-7636-11e9-88b7-642737df2048",

"Количество": 3,

"Цена": "5500",

"Сумма": "16500"

},

{

"Ref_Key": "34c5d79b-7636-11e9-88b7-642737df2048",

"LineNumber": "2",

"Товар_Key": "34c5d797-7636-11e9-88b7-642737df2048",

"Количество": 3,

"Цена": "3300",

"Сумма": "9900"

}

],

"Поставщик@navigationLinkUrl": "Document_ПоступлениеТоваров(guid'34c5d79b-7636-11e9-88b7-642737df2048')/Поставщик"

}]

}

Для сравнения: если мы наложим условие непосредственно на значение реквизита Цена табличной части Товары (Товары/Цена), то получим только те строки табличной части, которые удовлетворяют заданному условию (листинг 1.108, 1.109).

Листинг 1.108. URL запроса

localhost/REST/odata/standard.odata/Document_ПоступлениеТоваров?$filter=Товары/Цена gt 3000&$format=json

Листинг 1.109. Содержимое ответа сервера

{

"odata.metadata": "http://localhost/REST/odata/standard.odata/$metadata#Document_ПоступлениеТоваров",

"value": [{

"Ref_Key": "34c5d79a-7636-11e9-88b7-642737df2048",

"DataVersion": "AAAABQAAAAA=",

"DeletionMark": false,

"Number": "000000001",

"Date": "2019-05-10T12:00:00",

"Posted": true,

"Поставщик_Key": "9cfabfb1-4cb2-11e9-9334-642737df2048",

"Товары": [

{

"Ref_Key": "34c5d79a-7636-11e9-88b7-642737df2048",

"LineNumber": "1",

"Товар_Key": "34c5d799-7636-11e9-88b7-642737df2048",

"Количество": 3,

"Цена": "5000",

"Сумма": "15000"

}

],

"Поставщик@navigationLinkUrl": "Document_ПоступлениеТоваров(guid'34c5d79a-7636-11e9-88b7-642737df2048')/Поставщик"

},{

"Ref_Key": "34c5d79b-7636-11e9-88b7-642737df2048",

"DataVersion": "AAAABgAAAAA=",

"DeletionMark": false,

"Number": "000000002",

"Date": "2019-05-13T12:00:00",

"Posted": true,

"Поставщик_Key": "9cfabfb0-4cb2-11e9-9334-642737df2048",

"Товары": [

{

"Ref_Key": "34c5d79b-7636-11e9-88b7-642737df2048",

"LineNumber": "1",

"Товар_Key": "34c5d799-7636-11e9-88b7-642737df2048",

"Количество": 3,

"Цена": "5500",

"Сумма": "16500"

},

{

"Ref_Key": "34c5d79b-7636-11e9-88b7-642737df2048",

"LineNumber": "2",

"Товар_Key": "34c5d797-7636-11e9-88b7-642737df2048",

"Количество": 3,

"Цена": "3300",

"Сумма": "9900"

}

],

"Поставщик@navigationLinkUrl": "Document_ПоступлениеТоваров(guid'34c5d79b-7636-11e9-88b7-642737df2048')/Поставщик"

}]

}

Назад: Получение данных из табличной части документа
Дальше: Получение данных регистра сведений