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