Рассмотрим два способа в 1с свернуть таблицу значений. Для первого воспользуемся методом таблицы значений Свернуть, для второго используем Запрос.
Свернуть с использованием метода таблицы значений
У таблицы значений существует специальный метод Свернуть. Он позволяет группировать строки по полям, указанным в первом параметре и суммировать значения полей, указанных во втором параметре.
Свернуть(<КолонкиГруппировок>, <КолонкиСуммирования>)
Пример 1. Пусть у нас существует таблица значений с колонками Номенклатура, Цена, Количество, Сумма. Необходимо в 1с свернуть таблицу значений по колонкам Номенклатура и Цена, просуммировав при этом данные в колонках Количество и Сумма.
Таблица.Свернуть("Номенклатура, Цена", "Количество, Сумма");
Также стоит отметить следующие особенности метода Свернуть:
- Работает только НаСервере (как и любые действия с таблицами значений);
- Прост в реализации;
- Может суммировать значения, но не может получать минимум, максимум, среднее и т.д.
Свернуть таблицу значений при помощи запроса
Если для вашей задачи недостаточно метода Свернуть, то можно воспользоваться возможностями языка запросов, для свертки таблицы значений. Например, вам необходимо получить среднее или максимум, по значениям колонки.
Для свертки таблицы значений запросом необходимо:
- Таблицу значений передать параметром в запрос;
- Сгруппировать по нужным полям,
- Применить агрегатные функции к нужным полям (сумма, максимум, минимум, среднее);
- Выгрузить результат запроса в таблицу значений.
Пример 2. Пусть у нас существует таблица значений с колонками Номенклатура, Цена, Количество, Сумма. Необходимо в 1с свернуть таблицу значений по колонке Номенклатура, по колонке Цена получить среднее значение, просуммировать данные в колонках Количество и Сумма.
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Таблица", Таблица);
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Цена КАК Цена,
| Таблица.Количество КАК Количество,
| Таблица.Сумма КАК Сумма
|ПОМЕСТИТЬ Таблица
|ИЗ
| &Таблица КАК Таблица
|;
|
|///////////////////////////////////////////
|ВЫБРАТЬ
| Таблица.Номенклатура КАК Номенклатура,
| СРЕДНЕЕ(Таблица.Цена) КАК Цена,
| СУММА(Таблица.Количество) КАК Количество,
| СУММА(Таблица.Сумма) КАК Сумма
|ИЗ
| Таблица КАК Таблица
|
|СГРУППИРОВАТЬ ПО
| Таблица.Номенклатура";
Таблица = Запрос.Выполнить().Выгрузить();
Особенности данного метода:
- Работает только НаСервере (как и любые действия с таблицами значений и запросами);
- Более сложен в реализации;
- Более универсален, в сравнении с предыдущим.
Скачать обработку с двумя этими примерами можно: Здесь
Добавить комментарий