поискпоз
Функция поискпоз находит первый элемент списка, который соответствует заданному условию, и возвращает его позицию.
Синтаксис
поискпоз(элемент из список, условие)
Параметры:
элемент— текущий элемент списка, который используется в условии;список— список, в котором выполняется поиск;условие— логическое выражение, определяющее, подходит ли текущий элемент. Условие должно возвращатьдаилинет.
Список с составным элементом
Если элементом списка является составное поле, для текущего элемента можно задать произвольное допустимое имя и через него обращаться к вложенным полям.
Например:
поискпоз(
товар из товары,
товар.стоимость > 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 |
выражение вернёт:
Стол
Сначала поискпоз определяет позицию первого подходящего элемента, после чего индекс получает значение поля наименование из найденной строки.