ТаблицаЗначений.Свернуть

Методы · GroupBy

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

Синтаксис

Свернуть(<КолонкиГруппировок>, <КолонкиСуммирования>)

Примеры платформы

ТаблицаЦен.Свернуть("Товар, Валюта", "Цена");
Полное описание, параметры и ограничения

ТаблицаЗначений.Свернуть (ValueTable.GroupBy)

ТаблицаЗначений (ValueTable)

Свернуть (GroupBy)

Доступен, начиная с версии 8.0.

Синтаксис:
Свернуть(<КолонкиГруппировок>, <КолонкиСуммирования>)
Параметры:

<КолонкиГруппировок> (обязательный)
Тип: Строка.
Имена колонок, разделенные запятыми, по которым необходимо группировать строки таблицы значений.

<КолонкиСуммирования> (необязательный)
Тип: Строка.
Имена колонок, разделенные запятыми, по которым необходимо суммировать значения в строках таблицы значений.
Описание:

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

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

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

ТаблицаЦен.Свернуть("Товар, Валюта", "Цена");

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Сгруппировать одинаковые товары и посчитать общий объём

Три исходные строки превращаются в две агрегированные. Исходная таблица сохраняется благодаря Скопировать; сворачивание выполняется над копией.

Где и как запускать

Серверная процедура или функция без контекста формы, либо толстый клиент. Не размещайте ТаблицаЗначений в клиентском коде тонкого клиента.

Подготовка

  1. В управляемой форме подготовьте серверную процедуру с директивой &НаСервереБезКонтекста и вызовите её из клиентской команды.

  2. Вставьте фрагмент внутрь серверной процедуры. Таблица и все строки создаются в памяти.

Товары = Новый ТаблицаЗначений;
Товары.Колонки.Добавить("Название");
Товары.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
СтрокаТовара = Товары.Добавить();
СтрокаТовара.Название = "Книга";
СтрокаТовара.Количество = 3;
СтрокаТовара = Товары.Добавить();
СтрокаТовара.Название = "Книга";
СтрокаТовара.Количество = 2;
СтрокаТовара = Товары.Добавить();
СтрокаТовара.Название = "Тетрадь";
СтрокаТовара.Количество = 4;
Итоги = Товары.Скопировать();
Итоги.Свернуть("Название", "Количество");
Итоги.Сортировать("Название");
Для Каждого СтрокаИтога Из Итоги Цикл
    Сообщить(СтрШаблон("%1: %2", СтрокаИтога.Название, СтрокаИтога.Количество));
КонецЦикла;
Сообщить(Итоги.Итог("Количество"));
Сообщить(Товары.Количество());

Разбор по шагам

  1. Создаём таблицу с текстовым названием и числовым количеством.

  2. Добавляем две строки книги и одну строку тетради.

  3. Скопировать создаёт отдельную таблицу, чтобы исходные три строки не изменились.

  4. Свернуть объединяет строки по Название и суммирует Количество; колонки вне списка группировки и суммирования не сохраняются.

  5. Сортировать задаёт порядок вывода, Итог суммирует количество всех товаров.

Как проверить результат

  1. Итоги содержат Книга: 5 и Тетрадь: 4; общий объём — 9.

  2. Исходная таблица Товары по-прежнему содержит 3 строки.

  3. Добавьте ещё одну строку книги с количеством 1: итог книги должен увеличиться на 1, число групп не изменится.

Ожидаемый результат

Агрегированная таблица содержит две строки и общий объём 9, исходные данные не потеряны.

На что обратить внимание

  1. Свернуть изменяет таблицу, на которой вызван метод. Без копии вы потеряете исходные строки и лишние колонки.

  2. Для суммирования используйте числовую колонку, а не строки с числами.

  3. Таблица в памяти не является таблицей базы данных; никакие документы этим кодом не записываются.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.