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

поискпоз

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

Синтаксис

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

Параметры:

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

Список с составным элементом

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

Например:

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

Здесь:

  • товар — имя текущего элемента списка;
  • товары — идентификатор списка;
  • товар.стоимость — поле стоимость внутри составного элемента.

Имя текущего элемента используется только внутри выражения функции. Например, вместо товар можно указать элемент, позиция, _1 или другое допустимое имя:

поискпоз(
    позиция из товары,
    позиция.стоимость > 5000
)

Список с простым элементом

Если список содержит простые значения — например, текст или числа, — условие применяется непосредственно к текущему элементу.

Например, для списка чисел:

поискпоз(
    число из числа,
    число >= 5
)

функция найдёт позицию первого значения, которое больше или равно 5.

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

Функция возвращает целое число — позицию первого элемента списка, для которого выполняется условие.

Нумерация элементов начинается с 1.

Если подходящих элементов нет, функция не возвращает позицию.

Особенности

Поиск выполняется с начала списка. Если условию соответствуют несколько элементов, возвращается позиция только первого из них.

Функция возвращает именно позицию элемента, а не сам элемент или значение его поля.

Примеры

Поиск первого товара дороже 5 000 рублей

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

товары

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

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

Например, список содержит:

Позиция наименование стоимость
1 Стул 3500
2 Стол 7500
3 Шкаф 12000

Нужно найти позицию первого товара, стоимость которого больше 5000.

Для обращения к текущему элементу списка в функции зададим имя:

товар

Это имя не является идентификатором поля шаблона. Оно задаётся непосредственно в выражении и используется только внутри функции поискпоз.

Выражение:

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

Здесь:

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

Функция последовательно проверит элементы списка:

3500 > 5000 → нет
7500 > 5000 → да

Первым условию соответствует второй элемент списка, поэтому функция вернёт:

2

Поиск значения в списке чисел

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

числа

Список содержит значения:

2
4
7
9

Нужно найти позицию первого значения, которое больше или равно 5.

Для текущего элемента списка зададим имя:

число

Выражение:

поискпоз(
    число из числа,
    число >= 5
)

Здесь:

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

Функция проверит значения по порядку:

2 >= 5 → нет
4 >= 5 → нет
7 >= 5 → да

Первое подходящее значение находится на третьей позиции, поэтому функция вернёт:

3

Ошибки

Параметр условие должен содержать логическое выражение, результатом которого является да или нет.

Для составного элемента к вложенным полям необходимо обращаться через имя текущего элемента:

товар.стоимость

Связь с другими функциями

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

Например, если нужно вывести наименование первого товара дороже 5 000 рублей:

индекс(
    товары,
    поискпоз(
        товар из товары,
        товар.стоимость > 5000
    )
).наименование

Для списка:

Позиция Наименование Стоимость
1 Стул 3 500
2 Стол 7 500
3 Шкаф 12 000

выражение вернёт:

Стол

Сначала поискпоз определяет позицию первого подходящего элемента, после чего индекс получает значение поля наименование из найденной строки.