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

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

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

Как вывести итог в подвале табличной части в 1С: настройка формы, свойство ПутьКДаннымПодвала, ИтогиКолонок, расчёт в коде и типичные ошибки.

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

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

Ниже разобраны оба способа, программный расчёт итогов, вывод нескольких итогов одновременно, а также типичные ситуации, когда подвал отображается пустым. Инструкции применимы к типовым конфигурациям на управляемых формах — Бухгалтерии, Управлению торговлей, ERP — и к самописным решениям.

Как платформа считает итоги табличной части

Табличная часть документа на форме отображается элементом «ТаблицаФормы». У этого элемента есть свойство «Подвал», которое включает область итогов под строками. Сам по себе подвал пуст: платформе нужно указать, какое значение выводить в каждой колонке. Для числовых колонок, связанных с реквизитами табличной части, платформа умеет суммировать значения автоматически.

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

Вывод итога в управляемой форме через конфигуратор

Откройте конфигуратор, найдите нужный документ и откройте его основную форму. В дереве элементов формы выберите таблицу, соответствующую табличной части (обычно называется «Товары», «Услуги», «Материалы»). В палитре свойств установите флажок «Подвал» в значение «Истина». После этого под таблицей появится строка итогов.

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

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

Автоматический итог без кода

Во многих случаях код не нужен вовсе. Если у таблицы включён подвал и колонка связана с числовым реквизитом табличной части, платформа суммирует значения по всем строкам сама и пересчитывает итог при добавлении, удалении и редактировании строк. Это работает и в тонком клиенте, и в веб-клиенте.

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

Программный расчёт итога в коде формы

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

&НаКлиенте

Процедура ПересчитатьИтоги()

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

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

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

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

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

1c
ИтогоПоУсловию = 0;
Для Каждого Строка Из Объект.Товары Цикл
    Если Строка.УчитыватьВИтоге Тогда
        ИтогоПоУсловию = ИтогоПоУсловию + Строка.Сумма;
    КонецЕсли;
КонецЦикла;

Итоги в обычных формах (режим обычного приложения)

В старых конфигурациях на обычных формах механизм отличается. У колонки табличного поля есть свойство «ИтогиКолонок» и флажок отображения итогов в подвале; часто достаточно в свойствах колонки включить «ОтображатьИтогиВПодвале». Платформа обычного приложения сама суммирует числовые колонки без дополнительного кода.

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

Как вывести несколько итогов и подписи

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

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

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Включён подвал, но у колонки не задан «ПутьКДаннымПодвала» и колонка не числовая — ячейка остаётся пустой
02
Пересчёт вызывается только в «ПриИзменении», но не в «ПослеУдаления» — итог завышен после удаления строки
03
Реквизит формы для итога имеет строковый тип — сумма не считается или выводится без форматирования
04
Итог считается на клиенте циклом по тысячам строк — форма подвисает при каждом редактировании
05
Ожидание, что итог сохранится в базе — подвал хранит только отображаемое значение
Контрольные точки

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

Подвал виден под таблицей
Норма

Строка итогов отображается сразу под последней строкой

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

Подвала нет — проверьте свойство «Подвал» таблицы

Значение итога
Норма

Совпадает с ручной суммой по строкам

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

Пусто или ноль — проверьте путь к данным и тип реквизита

Пересчёт при изменениях
Норма

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

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

Итог устаревает — не все события вызывают пересчёт

Часто задаваемые вопросы

Почему подвал табличной части пустой, хотя он включён?

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

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

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

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

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

Итог считается, но без копеек или с лишними знаками. Что делать?

Проверьте квалификатор числа реквизита формы (точность после запятой) и свойство «Формат» у колонки подвала. Задайте формат вида «ЧДЦ=2», чтобы вывод соответствовал денежному формату.

Тормозит форма при пересчёте итога на большой таблице. Как ускорить?

Замените клиентский цикл на метод Итог() таблицы значений, а при очень больших объёмах перенесите расчёт в серверную процедуру с директивой &НаСервереБезКонтекста, передавая только необходимые данные. Также не вызывайте пересчёт чаще, чем реально меняются данные.

Нужно ли сохранять итог подвала в реквизит документа?

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

Итог

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

Включите у таблицы свойство «Подвал», привяжите колонки к числовым реквизитам формы через «ПутьКДаннымПодвала» и пересчитывайте итоги во всех событиях изменения таблицы. Автоматическая сумма работает для простых случаев, условия и формулы требуют кода. Итог подвала не хранится в базе — для отчётов используйте отдельный реквизит документа.