К статье
Практический материал

Отчеты и Аналитика · 9 мин

Как вычислить сумму в 1С: практическое руководство

Как посчитать сумму в 1С: итоги по колонкам, калькулятор, функция Сумма в запросах и СКД, формулы в табличных частях. Пошаговые инструкции и типичные ошибки.

Вычисление суммы — одна из самых частых операций в 1С: от быстрого подсчёта итога по документу до агрегирования данных в отчётах и запросах. В зависимости от задачи применяются разные инструменты: встроенный калькулятор, итоги по колонкам табличных частей, функция Сумма() в языке запросов, группировки в СКД и программные циклы в модуле.

Ошибка в выборе способа приводит не только к лишней работе, но и к неверным итогам: например, суммирование по отбору без учёта скрытых строк или округление промежуточных значений искажает результат. Ниже разобраны все рабочие сценарии — от простейшего до программного — с указанием условий, ограничений и способов проверки.

Быстрый подсчёт суммы по выделенным ячейкам

Самый простой способ узнать сумму в любой таблице 1С — журнале документов, табличной части или динамическом списке — выделить нужные ячейки числовой колонки. Платформа автоматически покажет сумму, количество, среднее, минимум и максимум выделенных значений в специальной панели.

Чтобы выделить весь столбец, кликните по заголовку колонки с зажатой клавишей Ctrl или выделите первую ячейку и протяните выделение мышью. Если панель итогов не отображается, проверьте настройки: в некоторых конфигурациях показ итогов выделенных ячеек включается через меню «Ещё» формы списка.

Ограничение способа: суммируются только видимые значения в том виде, в каком они отображены. Если в колонке стоит отбор или часть строк скрыта иерархией, скрытые строки в итог не попадут — это одновременно и преимущество (можно посчитать сумму по отфильтрованным данным), и источник ошибок.

Калькулятор и арифметика в полях ввода

В любое числовое поле 1С встроен мини-калькулятор: нажмите Ctrl+F2 (или кнопку калькулятора, если она есть), введите выражение вида 1500+2300*1.2 и нажмите Enter — результат сразу подставится в поле. Это удобно при ручном вводе сумм, цен и количеств.

Кроме того, простое арифметическое выражение можно ввести прямо в поле: например, набрать 100*3 и нажать Tab — платформа вычислит результат. Поддерживаются сложение, вычитание, умножение и деление; приоритет операций стандартный.

Для сложных расчётов с буфером обмена удобнее системный калькулятор Windows: скопируйте числа из 1С через Ctrl+C, сложите и вставьте итог обратно. Способ подходит для разовых проверок, но не для регулярной работы — в этом случае лучше настроить отчёт.

Сумма в табличной части документа

В типовых документах (реализация, поступление, счёт) сумма по табличной части обычно вычисляется автоматически: при изменении количества или цены пересчитывается сумма строки, а итог по документу отображается в подвале формы или в поле «Сумма документа».

Если итог не пересчитался, типичные причины: отключён автоматический пересчёт в настройках формы, сумма введена вручную и «залипла», либо в строке не заполнены ставка НДС или цена. Проверьте, что курсор стоит в изменённой строке и документ не открыт в режиме просмотра без возможности редактирования.

Программно итог по колонке табличной части получают методом Итог():

СуммаДокумента = Объект.Товары.Итог("Сумма");

СуммаНДС = Объект.Товары.Итог("СуммаНДС");

Метод Итог() работает быстрее цикла и не требует обхода строк. Цикл с накоплением оправдан только когда нужно суммировать по условию, которое нельзя выразить одной колонкой, например итог только по строкам с конкретной номенклатурной группой.

bsl
СуммаПоУсловию = 0;
Для Каждого Строка Из Объект.Товары Цикл
    Если Строка.Номенклатура.ВидНоменклатуры = НужныйВид Тогда
        СуммаПоУсловию = СуммаПоУсловию + Строка.Сумма;
    КонецЕсли;
КонецЦикла;

Агрегатная функция СУММА в запросах

Когда нужно посчитать сумму по данным информационной базы — обороты, остатки, итоги по документам за период — используется язык запросов с агрегатной функцией СУММА(). Она суммирует значения указанного поля по группировке или по всей выборке.

ВЫБРАТЬ

Продажи.Номенклатура КАК Номенклатура,

СУММА(Продажи.СуммаОборот) КАК СуммаПродаж

ИЗ

РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи

СГРУППИРОВАТЬ ПО

Продажи.Номенклатура

Ключевые правила: поле, по которому не идёт группировка, обязано быть агрегировано (СУММА, МИНИМУМ, МАКСИМУМ, КОЛИЧЕСТВО); предложение ИТОГИ ПО добавляет подитоги и общий итог по иерархии измерений. Для суммирования с условием применяйте конструкцию ВЫБОР КОГДА внутри СУММА — например, СУММА(ВЫБОР КОГДА ВидДвижения = &Приход ТОГДА Сумма ИНАЧЕ 0 КОНЕЦ).

Типичная ошибка — суммирование по соединённым таблицам, где одно значение дублируется из-за связи «один ко многим»: итог завышается кратно числу строк детализации. Перед СУММА убедитесь, что соединение не размножает строки, либо предварительно сверните данные во временной таблице.

Суммы и итоги в отчётах на СКД

В отчётах на системе компоновки данных суммирование настраивается без программирования: на вкладке «Ресурсы» выберите числовое поле и укажите выражение Сумма(СуммаОборот). Платформа автоматически рассчитает ресурс по каждой группировке и общий итог.

Если ресурс не выводится в итогах, проверьте три вещи: поле добавлено в ресурсы, для него задано выражение агрегирования, и в настройках группировки ресурс включён в выбранные поля (автополе «Итог» обычно добавляет ресурсы само, но при ручной настройке поле могло быть исключено).

Для нестандартных итогов — например, суммы только по строкам с определённым признаком — используйте вычисляемое поле с выражением ВЫБОР и суммируйте уже его. Процент от общего итога считается через функцию ВычислитьВыражение или через связь с родительской группировкой в выражении ресурса.

Как добавить сумму в отчёт СКД
  1. 1
    Откройте схему компоновки и перейдите на вкладку «Ресурсы»
  2. 2
    Добавьте числовое поле и задайте выражение Сумма(ИмяПоля)
  3. 3
    Убедитесь, что поле присутствует в выбранных полях группировки
  4. 4
    Сформируйте отчёт и сверьте итог с контрольным значением из исходных данных

Проверка результата и типичные ошибки

Любую вычисленную сумму стоит сверить независимым способом: итог запроса — с оборотно-сальдовой ведомостью или стандартным отчётом по тому же регистру, сумму документа — с ручным пересчётом нескольких строк. Совпадение двух независимых методов — надёжный признак корректности.

Обратите внимание на округление: если суммы строк округляются до копеек, а итог считается от неокругленных значений, возможны расхождения в копейках. В типовых конфигурациях порядок округления задан методикой учёта, и самостоятельно менять его в коде не следует — это приведёт к расхождениям с регистрами и отчётностью.

Типичные ошибки
01
Суммирование по запросу с соединением, размножающим строки — итог завышен в разы
02
Использование цикла вместо метода Итог() — лишний код и потеря производительности
03
Ручной ввод суммы документа без пересчёта строк — расхождение табличной части и шапки
04
Сравнение итога запроса с отчётом за разные периоды — ложный вывод об ошибке
Контрольные точки

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

Итог табличной части
Норма

Совпадает с полем «Сумма документа» и суммой по колонке при выделении

Тревожный признак

Итог отличается — есть строки с ручной правкой суммы

Сумма в запросе
Норма

Совпадает со стандартным отчётом по регистру за тот же период

Тревожный признак

Кратно завышена — проверить соединения и группировки

Ресурс в СКД
Норма

Выводится в каждой группировке и в общем итоге

Тревожный признак

Пустые итоги — ресурс не добавлен или исключён из выбранных полей

Частые вопросы

Как быстро посчитать сумму нескольких документов в журнале?

Выделите нужные строки в колонке «Сумма» с зажатой Ctrl или Shift — платформа покажет сумму выделенных значений в панели итогов. Если панель не видна, проверьте настройки формы списка через меню «Ещё».

Почему СУММА в запросе возвращает NULL?

Агрегатная функция возвращает NULL, когда в выборке нет ни одной строки либо все значения поля равны NULL. Оберните результат в ЕСТЬNULL(СУММА(Поле), 0), чтобы получить ноль вместо NULL.

Как посчитать сумму только по видимым (отфильтрованным) строкам?

Выделите колонку после применения отбора — итог по выделенным ячейкам посчитается по отображаемым строкам. Программно в динамическом списке это делается запросом с теми же отборами, что установлены в списке.

Чем Итог() отличается от обхода табличной части в цикле?

Итог("ИмяКолонки") — встроенный метод, который быстро возвращает сумму по одной колонке без написания цикла. Цикл нужен только для условного суммирования или когда параллельно требуется обработать каждую строку.

Как вывести общий итог в отчёте СКД, если он пропал?

В настройках отчёта на уровне самого отчёта (выше всех группировок) проверьте выбранные поля: ресурс должен присутствовать там. Также убедитесь, что на вкладке «Ресурсы» для поля задано выражение Сумма() и не ограничен расчёт только по конкретной группировке.

Можно ли суммировать время или строки в 1С?

Строки функцией СУММА не складываются — для них используется конкатенация в коде или функции соединения в СКД. Время и даты суммируются только через преобразование в числовое представление (например, секунды или часы) с последующим обратным переводом.

Итог

Что важно запомнить

Для разового подсчёта выделяйте ячейки или используйте встроенный калькулятор, для документов — метод Итог(), для аналитики — СУММА в запросах и ресурсы СКД. Любой итог сверяйте независимым способом и проверяйте запросы на размножение строк через соединения.