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

Функция «группировать»

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

Например, список позиций можно сгруппировать по категории. Все позиции категории «Техника» попадут в одну группу, а позиции категории «Мебель» — в другую.

Синтаксис

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

Например:

группировать(позиция из списокПозиций, позиция.категория)

В этом случае элементы с одинаковым значением поля категория будут объединены в одну группу.

Как работать с группами

Функция группировать возвращает список групп. Для каждой созданной группы Комбинатор автоматически предоставляет два свойства:

  • .Признак — значение, по которому сформирована группа;
  • .Список — элементы исходного списка, которые вошли в эту группу.

Например, если текущая группа называется группа, используются:

{группа.Признак}
{группа.Список}

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

.Признак и .Список — это не поля анкеты. Они создаются функцией группировать, поэтому их названия нельзя заменять своими.

Пример

Предположим, в анкете создан список списокПозиций с полями:

  • название;
  • категория;
  • цена.

Список содержит:

Монитор — Техника — 15000
Принтер — Техника — 12000
Стол — Мебель — 20000
Стул — Мебель — 5000

Нужно сгруппировать позиции по категории, вывести название каждой категории, а под ним — относящиеся к ней позиции.

Для этого используются два цикла:

{цикл(группа из группировать(позиция из списокПозиций, позиция.категория))}
{группа.Признак}

{цикл(позицияГруппы из группа.Список)}
{позицияГруппы.название} — {позицияГруппы.цена}
{/цикл}

{/цикл}

Какие имена используются в выражении

Из анкеты берутся:

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

Эти идентификаторы необходимо заменить на идентификаторы соответствующих полей из своей анкеты.

Самостоятельно задаются:

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

Эти имена можно выбрать самостоятельно. Они используются только для обращения к соответствующим элементам внутри выражения.

Комбинатор задаёт автоматически:

  • .Признак — значение, по которому сформирована текущая группа;
  • .Список — список элементов, вошедших в текущую группу.

Названия .Признак и .Список являются фиксированными — заменять их своими названиями нельзя.

Внешний цикл перебирает группы, созданные функцией группировать. {группа.Признак} выводит значение текущей группы, например Техника.

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

В результате данные будут выведены по группам:

Техника
Монитор — 15000
Принтер — 12000

Мебель
Стол — 20000
Стул — 5000