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