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

Функция «фильтровать»

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

Исходный список в анкете при этом не изменяется. Функция создаёт его отфильтрованную копию, которую можно передать в цикл или табличный цикл вместо исходного списка.

Например, из списка позиций можно отобрать только позиции с ценой больше 1000 и вывести их в документ.

Синтаксис

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

Функция используется в выражении метки «Цикл» вместо исходного списка:

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

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

Пример

Предположим, список1 содержит следующие позиции:

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

Нужно вывести только позиции с ценой больше 1000.

Для этого в выражении метки «Цикл» вместо исходного списка используется функция фильтровать:

{цикл(отобраннаяПозиция из фильтровать(позиция из список1, позиция.цена > 1000))}
{отобраннаяПозиция.название} — {отобраннаяПозиция.цена}
{/цикл}

Здесь:

  • цикл — открывающая метка цикла;
  • отобраннаяПозиция — имя текущего элемента отфильтрованного списка. Оно используется в теле цикла для обращения к его полям;
  • фильтровать(...) — функция, которая создаёт отфильтрованную копию список1;
  • позиция — имя текущего элемента исходного списка, которое используется внутри функции фильтровать;
  • список1 — исходный список;
  • позиция.цена > 1000 — условие фильтрации. В отфильтрованную копию попадут только элементы, для которых это условие выполняется;
  • {отобраннаяПозиция.название} — выводит название текущей отобранной позиции;
  • {отобраннаяПозиция.цена} — выводит цену текущей отобранной позиции;
  • {/цикл} — закрывающая метка цикла.

В результате в документ будут выведены только позиции, цена которых больше 1000:

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

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

Использование в табличном цикле

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

Например:

{т_цикл(элТабл из фильтровать(...))}

Ошибки

Функция вернёт ошибку, если:

  • вместо списка передано значение другого типа;
  • условие записано некорректно;
  • условие не возвращает результат да или нет.