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

Разработка и Конфигурация · 8 мин

Как вывести итог по колонке табличной части в 1С

Способы вывести итог по колонке табличной части 1С: итог в подвале формы, расчет в запросе, суммирование в коде и вывод в печатной форме.

Итог по колонке табличной части — одна из самых частых задач при работе с документами и справочниками в 1С. Классический пример: в документе «Реализация товаров и услуг» есть табличная часть «Товары» с колонками «Количество», «Цена», «Сумма», и пользователь хочет видеть общую сумму документа, не складывая строки вручную.

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

Вывод итога в подвале таблицы на форме документа

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

Для колонки, по которой нужен итог (например, «Сумма»), укажите свойство ПутьКДаннымПодвала (FooterDataPath). Оно должно ссылаться на реквизит формы, в котором будет храниться итоговое значение. Обычно создают реквизит формы типа «Число» с именем вроде «ТоварыИтогСумма» и привязывают к нему колонку.

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

Порядок действий на форме
  1. 1
    Откройте форму документа в конфигураторе
  2. 2
    Создайте реквизит формы типа Число для хранения итога
  3. 3
    У таблицы включите свойство Подвал
  4. 4
    У нужной колонки задайте ПутьКДаннымПодвала на созданный реквизит
  5. 5
    Сохраните форму и проверьте пересчет при добавлении строки

Расчет итога программно: метод Итог()

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

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

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

Объект.СуммаДокумента = ИтогСумма;

Метод доступен и на клиенте, и на сервере. В управляемых формах часто итог пересчитывают в обработчиках ПриИзменении, ПослеУдаления и ПриОкончанииРедактирования табличной части, чтобы реквизит шапки всегда был актуален.

&НаКлиенте

Процедура ТоварыСуммаПриИзменении(Элемент)

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

КонецПроцедуры

Учет НДС и смешанных колонок

Частая задача — вывести не просто сумму, а сумму с НДС или сумму НДС отдельно. Если в табличной части есть колонка «СуммаНДС», её итог считается так же: Объект.Товары.Итог("СуммаНДС"). Если такой колонки нет, НДС придется считать построчно с учетом ставки каждой строки.

ИтогНДС = 0;

Для Каждого Строка Из Объект.Товары Цикл

Если Строка.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда

ИтогНДС = ИтогНДС + Строка.Сумма * 20 / 120;

КонецЕсли;

КонецЦикла;

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

Итог по колонке в запросе

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

ВЫБРАТЬ

Товары.Ссылка КАК Документ,

СУММА(Товары.Сумма) КАК СуммаИтог,

СУММА(Товары.Количество) КАК КоличествоИтог

ИЗ

Документ.РеализацияТоваровУслуг.Товары КАК Товары

ГДЕ

Товары.Ссылка = &Ссылка

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

Товары.Ссылка

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

Сравнение способов

Подвал формы

Наглядно для пользователя, без кода. Ограничение: итог виден только на форме, недоступен в логике

Метод Итог()

Простой вызов в коде, работает везде. Ограничение: суммирует всю колонку без условий

Запрос с СУММА()

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

Вывод итога в печатной форме

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

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

ОбластьПодвал.Параметры.ИтогоСумма = Объект.Товары.Итог("Сумма");

ТабДок.Вывести(ОбластьПодвал);

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

Частые ошибки и проверка результата

Типичная ошибка — итог в подвале формы не обновляется после редактирования строки. Причина чаще всего в том, что реквизит подвала заполняется только при открытии формы, а обработчики изменения табличной части его не пересчитывают. Решение — вызывать пересчет в событиях ПриИзменении и ПослеУдаления.

Вторая распространенная проблема — расхождение итога табличной части с реквизитом шапки «Сумма документа». Такое бывает, когда сумма шапки заполняется в одном месте кода, а строки редактируются в другом. Проверить расхождение можно простым сравнением: Если Объект.СуммаДокумента <> Объект.Товары.Итог("Сумма") Тогда ....

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

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

Подвал таблицы на форме
Норма

Итог меняется сразу после добавления, удаления и редактирования строк

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

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

Совпадение с шапкой
Норма

СуммаДокумента равна Итог("Сумма") по табличной части

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

Есть расхождение в копейках или рублях

Печатная форма
Норма

Строка «Итого» совпадает с подвалом формы

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

В печати другая сумма — проверяйте параметры области подвала макета

FAQ

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

Метод Итог() так не умеет. Получите выделенные строки через Элементы.Товары.ВыделенныеСтроки и просуммируйте нужную колонку в цикле по этим строкам.

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

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

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

Чаще всего имя колонки указано с ошибкой или колонка имеет нечисловой тип. Также проверьте, что суммируете именно табличную часть объекта, а не пустую копию таблицы значений.

Как посчитать итог в обычных формах (не управляемых)?

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

Что быстрее: Итог() или запрос?

Для одного открытого документа разницы практически нет — используйте Итог(). Запрос выигрывает при обработке сотен и тысяч документов, когда агрегация выполняется на стороне СУБД одним обращением.

Итог

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

Для подвала формы настройте ПутьКДаннымПодвала у колонки, в коде используйте ТабличнаяЧасть.Итог("Колонка"), в запросах — СУММА(), в печати — область подвала макета. Не забывайте пересчитывать итог при каждом изменении строк и проверять совпадение с суммой шапки документа.