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

Быстрый старт · 10 мин

Как в 1С суммировать строки в таблице и вывести итог

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

Задача просуммировать строки таблицы и вывести итог возникает в 1С постоянно: нужно посчитать общую сумму документа, количество товаров в накладной, сумму по выделенным строкам в списке или итог в отчёте. Способ решения зависит от того, где находятся данные: в табличной части документа, в динамическом списке, в отчёте на СКД или в таблице значений в коде.

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

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

Как посмотреть сумму по строкам без программирования

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

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

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

Сумма по выделенным строкам в списке
  1. 1
    Откройте журнал документов или список с числовой колонкой
  2. 2
    Выделите нужные строки через Ctrl или Shift
  3. 3
    Нажмите «Ещё» → «Вывести список» и отметьте колонку с суммой
  4. 4
    В табличном документе выделите ячейки колонки — сумма появится в строке состояния

Итоги в табличной части документа программно

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

Типичный пример для табличной части документа:

// Сумма по колонке "Сумма" табличной части "Товары"

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

// Итог по количеству

ОбщееКоличество = Объект.Товары.Итог("Количество");

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

Для таблицы значений, сформированной вручную, синтаксис тот же: ТаблицаТоваров.Итог("Сумма"). Это удобно, когда данные собраны из разных источников и требуется быстрый контрольный итог перед записью.

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

Суммирование с группировкой: метод Свернуть

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

// Копия таблицы, чтобы не менять исходные данные

Итоги = ТаблицаДанных.Скопировать();

Итоги.Свернуть("Контрагент", "Сумма, Количество");

Для Каждого Строка Из Итоги Цикл

Сообщить(Строка.Контрагент + ": " + Строка.Сумма);

КонецЦикла;

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

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

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

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

ВЫБРАТЬ

Продажи.Контрагент КАК Контрагент,

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

ИЗ

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

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

Продажи.Контрагент

Для вывода детальных строк вместе с итогами по группам и общим итогом применяется конструкция ИТОГИ ... ПО:

ИТОГИ

СУММА(Сумма)

ПО

ОБЩИЕ, Контрагент

Результат такого запроса обходится через ВыборкаПоГруппировкам: сначала обходятся итоговые записи, затем детальные. Тип записи определяется свойством ТипЗаписи(). Это стандартный способ построить отчёт «строки + подытоги + общий итог» без СКД.

Типичные ошибки в запросах
01
СУММА() без СГРУППИРОВАТЬ ПО при наличии неагрегатных полей — запрос выдаст ошибку
02
Использование ИТОГИ ПО ОБЩИЕ без обхода через ВыборкаПоГруппировкам — итоговые строки не попадут в результат
03
Суммирование полей с NULL: значение NULL игнорируется, что искажает контрольные сверки — применяйте ЕСТЬNULL(Поле, 0)

Итоги в отчётах на СКД

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

В пользовательском режиме итоги управляются через настройки отчёта: кнопка «Настройки» → закладка «Поля» или «Группировка». Добавьте группировку по нужному измерению (контрагент, номенклатура, период) — платформа автоматически посчитает суммы ресурсов на каждом уровне и в общем итоге.

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

Способы суммирования: что выбрать

Итог() в коде

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

СУММА() в запросе

Оптимально для данных в базе: сервер считает сам. Требует навыка написания запросов

Ресурсы СКД

Для отчётов без программирования, гибкая настройка пользователем. Не подходит для расчётов внутри документов

Свернуть()

Группировка таблицы значений в памяти. Уничтожает детальные строки, работайте с копией

Итоги в табличном документе и при печати

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

Типичный приём при построчном выводе: перед циклом объявить переменную ИтогоСумма = 0, в цикле прибавлять сумму каждой строки, после цикла вывести область итога с этим значением. Такой способ надёжен и позволяет одновременно считать несколько итогов (сумма, количество, сумма НДС).

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

Контрольные точки

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

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

Совпадает с полем «Всего» в шапке документа

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

Расхождение — проверьте, какая колонка суммируется (Сумма или СуммаСНДС)

Итог в отчёте СКД
Норма

Сумма по группам равна общему итогу

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

Итоги пустые — поле не добавлено в ресурсы

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

Контрольная сверка с данными регистра за период сходится

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

Заниженная сумма — вероятно, NULL-значения или неверный отбор виртуальной таблицы

Контроль ошибок и частые вопросы

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

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

Итог

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

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

Как посчитать сумму только по отобранным строкам табличной части?

Метод Итог() всегда суммирует все строки. Для выборочного расчёта используйте цикл с условием: «Если Строка.Отгружено Тогда ИтогоСумма = ИтогоСумма + Строка.Сумма». Либо выгрузите строки методом Выгрузить() с отбором и примените Итог() к полученной таблице.

Почему Итог() возвращает ноль, хотя в строках есть суммы?

Чаще всего указано неверное имя колонки или суммируемая колонка имеет нечисловой тип. Проверьте точное имя колонки в конфигураторе и убедитесь, что суммируете, например, «Сумма», а не «СуммаСтрокой». Также проверьте, что таблица вообще содержит строки.

Чем отличается СУММА в запросе от Итог() в коде?

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

Как вывести общий итог внизу списка документов?

В динамических списках автоматический подвал с итогами не предусмотрен. Варианты: вывести список в табличный документ через «Ещё» → «Вывести список» и посчитать сумму выделением, либо создать отчёт на СКД по тому же запросу с ресурсом-суммой и общим итогом.

Как суммировать время или количество с разными единицами измерения?

Числовые колонки суммируются напрямую, но если строки содержат разные единицы измерения (штуки, коробки), итог по количеству будет некорректным. Сначала приведите количество к базовой единице через коэффициент, затем суммируйте. Для времени храните длительность в секундах или часах числом — тогда Итог() работает штатно.

Можно ли посчитать итог без изменения конфигурации?

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