Перейти к содержанию

фильтровать

Функция фильтровать отбирает из списка элементы, которые соответствуют заданному условию.

Синтаксис

фильтровать(элемент из список, условие)

Параметры:

  • элемент — имя текущего элемента списка. Задаётся непосредственно в функции и используется в условии;
  • список — идентификатор спискового поля;
  • условие — логическое выражение, по которому определяется, должен ли элемент попасть в результат.

Имя текущего элемента можно выбрать самостоятельно. Оно используется только внутри функции.

Например:

фильтровать(товар из товары, товар.стоимость > 5000)

Здесь:

  • товары — идентификатор спискового поля;
  • товар — имя текущего элемента, заданное внутри функции;
  • стоимость — идентификатор вложенного поля;
  • товар.стоимость > 5000 — условие отбора.

В результат попадут только товары стоимостью больше 5000.

Возвращаемое значение

Функция возвращает новый список, содержащий только элементы, для которых условие выполняется.

Исходный список при этом не изменяется.

Результат фильтровать(...) можно использовать вместо исходного списка:

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

Это позволяет сначала отобрать нужные элементы, а затем выполнить расчёт только по ним.

Примеры

Вывод только подходящих элементов списка

Допустим, в шаблоне есть списковое поле:

товары

Каждый элемент содержит:

  • наименование — название товара;
  • стоимость — стоимость товара.

Исходный список:

наименование стоимость
Монитор 15000
Клавиатура 800
Принтер 12000
Мышь 600

Нужно вывести только товары стоимостью больше 5000.

{цикл(позиция из фильтровать(товар из товары, товар.стоимость > 5000))}
{позиция.наименование} — {позиция.стоимость}
{/цикл}

Здесь:

  • товары — идентификатор исходного спискового поля;
  • товар — имя текущего элемента внутри функции фильтровать;
  • товар.стоимость > 5000 — условие отбора;
  • фильтровать(...) — возвращает новый список только с подходящими товарами;
  • позиция — имя текущего элемента отфильтрованного списка внутри цикла.

Результат:

Монитор — 15000
Принтер — 12000

Исходный список товары остаётся без изменений.

Расчёт суммы по отфильтрованному списку

Результат функции фильтровать можно передать непосредственно в агрегатную функцию.

Допустим, список товары содержит:

наименование стоимость количество
Монитор 15000 2
Клавиатура 800 5
Принтер 12000 1
Мышь 600 10

Нужно рассчитать общую стоимость только тех товаров, стоимость одной единицы которых больше 5000.

Сначала функция фильтровать отбирает подходящие элементы:

фильтровать(товар из товары, товар.стоимость > 5000)

В результате остаются:

наименование стоимость количество
Монитор 15000 2
Принтер 12000 1

Полученный список можно сразу передать в функцию сумм:

сумм(позиция из фильтровать(товар из товары, товар.стоимость > 5000), позиция.стоимость * позиция.количество)

Здесь:

  • товар — имя элемента исходного списка внутри функции фильтровать;
  • фильтровать(...) — возвращает список товаров стоимостью больше 5000;
  • позиция — имя элемента уже отфильтрованного списка внутри функции сумм;
  • позиция.стоимость * позиция.количество — стоимость каждой позиции, которая участвует в суммировании.

Для расчёта используются:

15000 × 2 = 30000
12000 × 1 = 12000

Функция вернёт:

42000

Таким же способом отфильтрованный список можно передать в счет, срзнач, мин или макс, если расчёт нужно выполнить только по элементам, соответствующим условию.