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