Функция «группировать»
Функция группировать объединяет элементы списка в группы по одинаковому значению выбранного поля.
Например, список позиций можно сгруппировать по категории. Все позиции категории «Техника» попадут в одну группу, а позиции категории «Мебель» — в другую.
Синтаксис
группировать(элемент из список, элемент.поле)
элемент— имя текущего элемента списка;список— список, который необходимо сгруппировать;элемент.поле— поле, по значению которого выполняется группировка.
Например:
группировать(позиция из списокПозиций, позиция.категория)
В этом случае элементы с одинаковым значением поля категория будут объединены в одну группу.
Как работать с группами
Функция группировать возвращает список групп. Для каждой созданной группы Комбинатор автоматически предоставляет два свойства:
.Признак— значение, по которому сформирована группа;.Список— элементы исходного списка, которые вошли в эту группу.
Например, если текущая группа называется группа, используются:
{группа.Признак}
{группа.Список}
Имя группа можно задать самостоятельно, а .Признак и .Список всегда указываются именно в таком виде.
.Признаки.Список— это не поля анкеты. Они создаются функциейгруппировать, поэтому их названия нельзя заменять своими.
Пример
Предположим, в анкете создан список списокПозиций с полями:
название;категория;цена.
Список содержит:
Монитор — Техника — 15000
Принтер — Техника — 12000
Стол — Мебель — 20000
Стул — Мебель — 5000
Нужно сгруппировать позиции по категории, вывести название каждой категории, а под ним — относящиеся к ней позиции.
Для этого используются два цикла:
{цикл(группа из группировать(позиция из списокПозиций, позиция.категория))}
{группа.Признак}
{цикл(позицияГруппы из группа.Список)}
{позицияГруппы.название} — {позицияГруппы.цена}
{/цикл}
{/цикл}
Какие имена используются в выражении
Из анкеты берутся:
списокПозиций— идентификатор исходного списка;категория— идентификатор поля, по которому выполняется группировка;название— идентификатор поля с названием позиции;цена— идентификатор поля с ценой позиции.
Эти идентификаторы необходимо заменить на идентификаторы соответствующих полей из своей анкеты.
Самостоятельно задаются:
позиция— имя текущего элемента исходного списка внутри функциигруппировать;группа— имя текущей группы во внешнем цикле;позицияГруппы— имя текущего элемента внутри группы.
Эти имена можно выбрать самостоятельно. Они используются только для обращения к соответствующим элементам внутри выражения.
Комбинатор задаёт автоматически:
.Признак— значение, по которому сформирована текущая группа;.Список— список элементов, вошедших в текущую группу.
Названия .Признак и .Список являются фиксированными — заменять их своими названиями нельзя.
Внешний цикл перебирает группы, созданные функцией группировать. {группа.Признак} выводит значение текущей группы, например Техника.
Внутренний цикл перебирает элементы из группа.Список. В его теле можно обращаться к обычным полям исходного списка, например название и цена.
В результате данные будут выведены по группам:
Техника
Монитор — 15000
Принтер — 12000
Мебель
Стол — 20000
Стул — 5000