Подсчёт сумм и итогов в 1С 8.3: все рабочие способы
Содержание
Чтобы быстро увидеть сумму по колонке в любом списке 1С, выделите нужные числовые ячейки — итог появится в строке состояния внизу окна. Для документов сумму считает подвал табличной части, для отчётов — группировки и общие итоги, а для собственных расчётов — агрегатная функция СУММА в языке запросов.
Способ зависит от того, где вы считаете. В интерфейсе «Такси» (платформа 8.3) есть мгновенный подсчёт выделенного, автоматические итоги в документах, гибкие группировки в отчётах на СКД и четыре агрегатные функции в запросах. Ниже — каждый из этих способов с точными действиями и примерами чисел.
Мгновенный подсчёт выделенных ячеек в списках и журналах
Самый быстрый способ получить сумму — выделить ячейки прямо в списке. Работает в любом табличном поле: журнале документов, списке справочника, результате отчёта.
- Откройте нужный список (например,
Продажи → Реализация (акты, накладные)). - Щёлкните первую ячейку числового столбца — обычно это колонка «Сумма».
- Удерживая левую кнопку мыши, протяните выделение вниз. Или выделите диапазон клавишами: щёлкните первую ячейку и, зажав
Shift, щёлкните последнюю. - Посмотрите в строку состояния внизу окна — там появятся сразу несколько чисел: количество выделенных ячеек, сумма, среднее, минимум и максимум.
Выделять можно и несмежные ячейки: зажмите Ctrl и щёлкайте нужные строки по одной. Сумма в строке состояния пересчитается только по тому, что выделено. Это удобно, когда из двадцати документов нужно сложить, скажем, три за одну дату.
Если список отфильтрован (включён отбор по контрагенту или периоду), выделение и сумма учитывают только видимые строки. Так можно быстро получить оборот по одному партнёру, не строя отчёт.
Скопировать полученное значение из строки состояния напрямую нельзя — она служит для просмотра. Если сумма нужна в буфере обмена, выделите ячейки и нажмите Ctrl+C: в буфер попадут значения, которые затем складываются, например, в Excel.
Тот же приём работает и в уже сформированном отчёте. Результат отчёта — это табличный документ, и в нём ячейки тоже выделяются мышью. Выделите часть колонки с цифрами — строка состояния покажет сумму ровно выделенного фрагмента. Это выручает, когда готовый итог отчёта охватывает лишнее, а нужна сумма только по нескольким строкам.
Автоматические итоги в табличной части документа
В документах с табличной частью — накладных, актах, счетах — суммировать вручную не нужно. Итог по числовым колонкам 1С показывает в подвале табличной части: это нижняя строка под списком товаров или услуг.
Откройте любую реализацию или поступление. Под строками товаров видна итоговая строка, где просуммированы колонки «Сумма», «НДС» и «Всего». Значение пересчитывается на лету при добавлении, удалении или изменении строки — закрывать и открывать документ не нужно.
Если итог в подвале не отображается, причина почти всегда одна: это нетиповая форма или столбец, для которого вывод итога не включён разработчиком. В типовых конфигурациях (Бухгалтерия 3.0, Управление торговлей 11, ЗУП 3.1) подвал по денежным колонкам настроен изначально.
Итог в подвале — это сумма значений, уже записанных в строках. Если вы меняете количество или цену, но не вышли из ячейки (курсор всё ещё в поле), 1С пересчитывает строку только после подтверждения ввода — нажмите Enter или перейдите в другую ячейку, и подвал обновится.
Отдельно стоит задача — посчитать общий итог по нескольким документам сразу. В самом документе этого нет: там только его собственная сумма. Для свода по нескольким документам используйте список с выделением ячеек (способ выше) или отчёт.
Промежуточные и общие итоги в отчётах на СКД
Большинство типовых отчётов построено на системе компоновки данных (СКД). Суммы в них дают группировки: каждая группировка добавляет строку промежуточного итога, а поверх всего отчёта считается общий итог.
Порядок настройки на примере любого оборотного отчёта:
- Откройте отчёт и нажмите кнопку
Настройки(в простом режиме она может называтьсяПоказать настройки). - Перейдите к структуре отчёта — это раздел, где перечислены строки группировок (поля, по которым данные собираются в группы).
- Добавьте или измените группировку: например, сгруппируйте продажи по полю «Контрагент», а внутри — по «Номенклатура».
- Сформируйте отчёт. По каждому контрагенту появится строка с промежуточным итогом, а внизу — общий итог по всем строкам.
Сумма в СКД считается автоматически для всех числовых ресурсов отчёта — отдельно включать её не нужно. Если же поле показывается как текст и не суммируется, значит, оно не объявлено ресурсом в самой схеме отчёта (это уже доработка на уровне конфигурации).
Расположение общих итогов — сверху, снизу или и там, и там — задаётся в настройках отчёта. Для длинных выгрузок удобнее итог сверху: не нужно прокручивать до конца.
Группировки можно вкладывать одна в другую — тогда итоги считаются на каждом уровне. Например, группировка «Склад», внутри неё «Номенклатура»: отчёт даст сумму по каждой позиции, подытог по складу и общий итог внизу. Глубина вложенности не ограничена, но на практике больше трёх уровней делает отчёт нечитаемым.
Если детализация не нужна и важны только подытоги, у группировки меняют тип выводимых записей — вместо «Элементы и иерархия» оставляют только итоги. Отчёт тогда показывает лишь свёрнутые суммы, а детальные строки скрывает. Это основа сводных отчётов: продажи по менеджерам, остатки по складам, обороты по статьям затрат.
Сумму в отчёте легко сверить с источником. Постройте тот же отчёт без группировок (чистый список движений), выделите колонку суммы — значение в строке состояния должно совпасть с общим итогом сгруппированного отчёта. Расхождение означает, что в одном из вариантов стоит лишний отбор.
Агрегатные функции в языке запросов
Когда сумма нужна в своей обработке, печатной форме или нетиповом отчёте, её считают в запросе. За суммирование отвечает функция СУММА, а способов два — свёртка строк и иерархические итоги.
Первый способ — СГРУППИРОВАТЬ ПО. Строки сворачиваются: на каждую группу остаётся одна строка с посчитанной суммой.
ВЫБРАТЬ
Продажи.Контрагент КАК Контрагент,
СУММА(Продажи.Сумма) КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.Контрагент
Правило простое: все поля, которые не завёрнуты в агрегатную функцию, обязаны быть перечислены в СГРУППИРОВАТЬ ПО. Иначе платформа вернёт ошибку о том, что поле не входит в группировку.
Второй способ — конструкция ИТОГИ … ПО. Она не сворачивает детальные строки, а добавляет к ним строки-итоги по указанному полю:
ВЫБРАТЬ
Продажи.Контрагент КАК Контрагент,
Продажи.Номенклатура КАК Номенклатура,
Продажи.Сумма КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
ИТОГИ
СУММА(Сумма)
ПО
Контрагент
Здесь в результате останутся все исходные строки по каждой номенклатуре, а после строк каждого контрагента встанет строка с его суммой. Ключевое слово ОБЩИЕ вместо имени поля (ПО ОБЩИЕ) даёт один общий итог по всей выборке.
Разница между подходами в этом и состоит: СГРУППИРОВАТЬ ПО даёт только свёрнутый результат, ИТОГИ сохраняет детализацию и дополняет её итогами по уровням.
Обойти результат с итогами в коде можно через выборку по группировкам:
Результат = Запрос.Выполнить();
ВыборкаКонтрагент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаКонтрагент.Следующий() Цикл
Сообщить(ВыборкаКонтрагент.Контрагент + ": " + ВыборкаКонтрагент.Сумма);
КонецЦикла;
Конструкция ИТОГИ умеет считать суммы ещё и по периодам — это нужно, когда данные надо разложить по месяцам или кварталам. После имени поля с датой добавляют уточнение ПЕРИОДАМИ:
ИТОГИ
СУММА(Сумма)
ПО
ДатаДокумента ПЕРИОДАМИ(Месяц)
В результат попадут строки-итоги по каждому месяцу, причём даже по тем, где движений не было, — платформа добьёт пропущенные периоды нулями. Это удобно для помесячной динамики: ряд не рвётся, если в каком-то месяце продаж не случилось.
Если же сумма уже лежит в таблице значений, её считают без запроса — методом Итог:
ИтогоСумма = ТаблицаТоваров.Итог("Сумма");
Метод складывает все значения указанной колонки и возвращает число — быстрый способ получить сумму по уже загруженной таблице. Передав имя строки отбора, можно сузить расчёт, но чаще Итог применяют именно к колонке целиком.
Какие агрегатные функции есть в 1С
Кроме суммы, язык запросов и СКД поддерживают ещё несколько агрегатных функций. Все они работают по одному принципу: применяются к полю в связке с группировкой или итогами. Отдельного внимания стоит КОЛИЧЕСТВО(РАЗЛИЧНЫЕ …) — она считает не строки, а уникальные значения. Если нужно узнать, скольким разным контрагентам прошли отгрузки за месяц, а не сколько было самих отгрузок, берут именно её.
| Функция | Что считает | Пример |
|---|---|---|
СУММА | Сумму значений поля | СУММА(Сумма) — оборот |
КОЛИЧЕСТВО | Число строк (или непустых значений) | КОЛИЧЕСТВО(*) — сколько документов |
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ …) | Число уникальных значений | сколько разных контрагентов |
МАКСИМУМ | Наибольшее значение | самая крупная продажа |
МИНИМУМ | Наименьшее значение | самая мелкая продажа |
СРЕДНЕЕ | Среднее арифметическое | средний чек |
Функции можно комбинировать в одном запросе — и это самый практичный приём. В одной выборке получаете сразу несколько показателей:
ВЫБРАТЬ
Продажи.Контрагент КАК Контрагент,
СУММА(Продажи.Сумма) КАК Оборот,
КОЛИЧЕСТВО(*) КАК ЧислоСтрок,
СРЕДНЕЕ(Продажи.Сумма) КАК СреднийЧек
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.Контрагент
На выходе по каждому контрагенту встанут три числа. Если по партнёру прошло 4 продажи на 120 000 рублей, Оборот покажет 120 000, ЧислоСтрок — 4, СреднийЧек — 30 000. Среднее платформа считает сама: не нужно отдельно делить сумму на количество.
Те же функции доступны в ресурсах СКД — поэтому отчёт на компоновке умеет показывать рядом с суммой среднее, минимум или количество без единой строки кода. Ресурс настраивается на вкладке с одноимённым названием в схеме компоновки; для готового типового отчёта это уже сделано.
Частые ошибки при подсчёте сумм
Большинство проблем с итогами сводится к нескольким типовым ситуациям. Подберите симптом и проверьте причину.
СГРУППИРОВАТЬ ПО. Добавьте в группировку каждое поле, которое не обёрнуто в агрегатную функцию.Частые вопросы
Чем `ИТОГИ ПО` отличается от `СГРУППИРОВАТЬ ПО`?
СГРУППИРОВАТЬ ПО сворачивает строки: на каждую группу остаётся одна строка с суммой. ИТОГИ ПО оставляет все детальные строки и добавляет к ним отдельные строки-итоги по уровням. Для свода берут первое, для детализации с подытогами — второе.Считается ли сумма только по отфильтрованным строкам списка?
Как увидеть сумму, не выделяя каждую ячейку мышью?
Shift, щёлкните последнюю — выделится весь диапазон. Несмежные строки выделяются кликами с зажатым Ctrl.Почему в подвале документа итог есть, а в списке документов его нет?
Как получить сумму в обработке без построения отчёта?
ТаблицаЗначений.Итог("ИмяКолонки") — он вернёт сумму по колонке. Если данные берутся из базы, посчитайте их запросом с СУММА и СГРУППИРОВАТЬ ПО.