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

Учебные задачи

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

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

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

Подготовка

  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С» и не аффилирован с ней.