Отчеты и Аналитика · 9 мин
Как суммировать в 1С: все рабочие способы
Как суммировать в 1С: итоги по колонке в таблице, функция Сумма в запросе, группировки, ресурсы отчётов на СКД и формулы в табличных документах.
Задача суммирования встречается в 1С постоянно: нужно посчитать итог по колонке документа, свернуть данные в запросе, вывести сумму в отчёте или сложить значения в табличном документе. В зависимости от контекста применяются разные инструменты — от встроенной команды «Итоги» до агрегатной функции СУММА в языке запросов.
Ошибка в выборе способа приводит к типичным проблемам: итог не считается, сумма удваивается из-за дублирования строк, а в отчёте вместо числа выводится пустота. Ниже разобраны основные сценарии суммирования с конкретными действиями, ограничениями и способами проверки результата.
Быстрый итог по колонке таблицы
Самый простой способ суммировать числовую колонку — не открывая конфигуратор и не меняя настройки. В большинстве типовых конфигураций на платформе 1С:Предприятие 8.3 список документов, табличная часть или журнал поддерживают автоматический подсчёт итогов.
Выделите нужную колонку (щелчок по заголовку) и нажмите кнопку «Ещё» в командной панели таблицы, затем выберите пункт «Итоги» или «Вывести сумму». В некоторых формах достаточно установить курсор на числовую колонку — итог появится в строке состояния внизу окна. Если пункт меню отсутствует, значит разработчик формы отключил эту возможность, и придётся использовать другие способы.
- 1Откройте список или табличную часть с числовыми данными
- 2Выделите числовую колонку щелчком по её заголовку
- 3Откройте меню «Ещё» и выберите «Итоги» (или «Вывести сумму»)
- 4Проверьте результат в подвале таблицы или строке состояния
Учтите: итог считается по тем строкам, которые реально загружены в форму. Если список отфильтрован или данные подгружаются порциями, сумма отразит только видимую часть, а не всю таблицу базы.
Суммирование в запросе: функция СУММА
Для выборки итогов из базы данных используется язык запросов. Агрегатная функция СУММА складывает значения числового поля по группе строк. Без предложения СГРУППИРОВАТЬ ПО она вернёт одну строку — общий итог по всей выборке.
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
СУММА(Продажи.СуммаОборот) КАК СуммаОборот
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.Номенклатура
Ключевые правила: все неагрегатные поля в секции ВЫБРАТЬ обязаны присутствовать в предложении СГРУППИРОВАТЬ ПО, иначе запрос не выполнится. Если нужно получить и детальные строки, и итоги по ним, используйте предложение ИТОГИ ПО — оно добавит в результат группирующие записи без второго обращения к базе.
Отдельный случай — суммирование значений, которые могут быть NULL. Агрегатные функции игнорируют NULL, но если все значения в группе NULL, результат тоже будет NULL, а не ноль. Оборачивайте выражение в ЕСТЬNULL(СУММА(Поле), 0), если ноль критичен для дальнейших расчётов.
Итоги в отчётах на СКД
В системе компоновки данных суммирование настраивается без кода. Поле, которое нужно суммировать, добавляется на закладку «Ресурсы» с выражением Сумма(Поле). После этого отчёт автоматически выводит итоги по каждой группировке и общий итог.
Частая ситуация: ресурс добавлен, но итог в отчёте не выводится. Проверьте, что на закладке «Настройки» у группировки включён вывод итогов (в списке группировок у поля должно быть значение «Итоги» либо группировка не отключена), а в настройках самого отчёта присутствует элемент «Общий итог» по вертикали. Также убедитесь, что для ресурса указано выражение — пустое выражение даёт пустой итог.
Если сумма нужна не по всем группировкам, в свойствах ресурса задайте «Рассчитывать по» — перечислите группировки, для которых ресурс имеет смысл. Например, остаток на конец периода бессмысленно суммировать по месяцам — там нужна другая агрегатная функция.
Сумма в табличном документе и печатной форме
Табличный документ (макет, печатная форма, результат отчёта) поддерживает формулы, похожие на Excel. Встаньте в ячейку и введите формулу вида =Сумма(R5C3:R20C3) — она сложит значения диапазона. Адресация по умолчанию идёт в стиле R1C1: R — номер строки, C — номер колонки.
Чтобы ячейка воспринималась как формула, а не текст, в свойствах ячейки параметр «СодержитЗначение» должен быть включён, либо формула вводится непосредственно в строку формул при редактировании ячейки в режиме просмотра с разрешённым редактированием. В макетах печатных форм итог обычно вычисляют в коде — накапливают переменную при выводе строк и подставляют в секцию подвала.
ИтогоСумма = 0;
Для Каждого СтрокаТовары Из Документ.Товары Цикл
ИтогоСумма = ИтогоСумма + СтрокаТовары.Сумма;
КонецЦикла;
// или короче: ИтогоСумма = Документ.Товары.Итог("Сумма");Для табличной части объекта в коде проще всего использовать встроенный метод Итог("ИмяКолонки") — он возвращает сумму по числовой колонке без цикла и работает быстрее ручного перебора.
Итоги в динамических списках и формах
Если нужно, чтобы сумма по колонке отображалась постоянно — например, итог по табличной части документа в подвале формы — это настраивается в конфигураторе. У элемента формы «Таблица» включите свойство «Подвал», а у колонки с суммой установите «ПутьКДаннымПодвала» на реквизит, содержащий итог, или включите у колонки свойство «ОтображатьВПодвале» с функцией суммирования.
В управляемых формах типовых документов итог по табличной части обычно уже выведен в отдельное поле «Всего» — оно заполняется кодом при изменении строк. Если вы добавляете свою числовую колонку в расширении, потребуется программно пересчитывать итог в обработчиках ПриИзменении и ПослеУдаления строки.
Какой способ выбрать
Разовый подсчёт пользователем без доработок. Не работает, если разработчик отключил итоги в форме.
Выборки из базы, отчёты, обработки. Требует навыка языка запросов.
Настраиваемые отчёты с группировками. Не подходит для произвольных форм.
Табличные части документов и справочников. Только внутри кода модуля.
Типичные ошибки при суммировании
Наиболее частая причина неверного итога — задвоение строк при соединении таблиц в запросе. Второе место занимает попытка суммировать строковое поле: если сумма хранится как строка, СУММА вернёт ошибку или ноль, поэтому тип реквизита стоит проверить заранее. Третья типичная ситуация — округление: промежуточное округление каждой строки до двух знаков даёт расхождение с итогом, посчитанным по неокруглённым значениям.
Проверка результата
Любой рассчитанный итог стоит сверить независимым способом. Для запроса — выполнить тот же запрос в консоли запросов с детальными строками и сложить вручную на небольшом объёме. Для отчёта на СКД — сравнить с типовым отчётом по тому же регистру за тот же период. Для табличной части — перепроверить методом Итог() в отладчике.
Как проверить результат
Совпадает с итогом типового отчёта по тому же регистру и периоду
Расхождение кратно числу строк — признак задвоения при соединении
Общий итог равен сумме итогов группировок верхнего уровня
Итог пустой или отсутствует — не настроен ресурс или вывод итогов
Метод Итог() равен значению в поле «Всего» на форме
Поле на форме не обновляется после редактирования строк
Частые вопросы
Почему в меню «Ещё» нет пункта «Итоги»?
Разработчик формы отключил показ итогов для этой таблицы, либо колонка нечисловая. Проверьте, что выделена именно числовая колонка. Если пункт недоступен системно, итог можно получить через отчёт по тому же объекту или консоль запросов.
Как посчитать сумму с условием в запросе?
Используйте конструкцию ВЫБОР внутри агрегатной функции: СУММА(ВЫБОР КОГДА Условие ТОГДА Поле ИНАЧЕ 0 КОНЕЦ). Это позволяет в одном запросе получить несколько сумм по разным условиям без соединений.
Чем ИТОГИ ПО отличается от СГРУППИРОВАТЬ ПО?
СГРУППИРОВАТЬ ПО сворачивает результат до групп — детальные строки теряются. ИТОГИ ПО сохраняет детальные строки и добавляет к ним итоговые записи по указанным полям, что удобно для обхода результата в коде.
Почему СУММА вернула NULL вместо нуля?
Агрегатная функция возвращает NULL, если в группе нет ни одного непустого значения. Оберните результат в ЕСТЬNULL(СУММА(Поле), 0), чтобы гарантированно получить число.
Как вывести общий итог в отчёте СКД, если он пропал?
Откройте настройки отчёта, перейдите на уровень самого отчёта (не группировки) и проверьте наличие элемента «Общий итог» в структуре. Также убедитесь, что у ресурса задано выражение Сумма(Поле) на закладке «Ресурсы».
Можно ли суммировать время или даты?
Напрямую — нет, агрегатная СУММА работает только с числами. Даты и время сначала преобразуют в числовое представление (например, разность дат в секундах через РАЗНОСТЬДАТ), суммируют, а затем при необходимости конвертируют обратно.
Что важно запомнить
Для разового подсчёта достаточно команды «Ещё → Итоги», для выборок из базы — запроса с СУММА и группировкой, для отчётов — ресурсов СКД, для табличных частей — метода Итог(). Главные риски: задвоение строк при соединениях, значения NULL и суммирование нечисловых полей. Итог всегда сверяйте независимым способом.