При получении данных через 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')/Поставщик"
}]
}