Как настроить расчет и отображение итогов в подвале таблицы на управляемой форме 1С 8.3

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Отображение суммарных показателей в нижней строке (подвале) таблицы — типовая задача при разработке интерфейсов в среде 1С:Предприятие 8.3 (Управляемые формы). Способ реализации напрямую зависит от типа источника данных: является ли таблица стандартной табличной частью прикладного объекта (документа, справочника) или произвольной таблицей формы (коллекцией значений).

Разберем по шагам все возможные сценарии и способы вывода итогов.

Вариант 1. Стандартная табличная часть объекта (без написания кода)

Для табличных частей прикладных объектов платформа 1С автоматически генерирует специальные реквизиты итогов для всех числовых колонок. Настройка выполняется исключительно в свойствах элементов формы.

Рассмотрим порядок действий:

  1. Выделим элемент формы Таблица (табличную часть) и в палитре свойств установим флаг Подвал в значение Истина.
  2. Выделим нужную числовую колонку внутри таблицы (например, Сумма).
  3. В палитре свойств колонки найдем свойство ПутьКДаннымПодвала.
  4. Выберем автоматически сформированный платформой итоговый реквизит вида Объект.Товары.ИтогСумма.

При таком подходе платформа берет на себя весь автоматический пересчет и обновление значений при любом редактировании, добавлении или удалении строк.

Вариант 2. Произвольная таблица формы (ДанныеФормыКоллекция)

Если таблица на форме связана не с табличной частью объекта, а с реквизитом формы с типом ТаблицаЗначений, автоматические реквизиты итогов платформой не формируются. В этом случае подсчет настраивается вручную.

Проанализируем ключевой момент: у объекта ДанныеФормыКоллекция на тонком клиенте доступен метод Итог("ИмяКолонки"). Это означает, что пересчет выполняется быстро прямо в контексте &НаКлиенте без лишних серверных вызовов.

Вывести результат можно двумя способами:

Способ А. Через свойство «ТекстПодвала» колонки

В свойствах таблицы включаем отображение подвала (свойство Подвал = Истина), а свойство ПутьКДаннымПодвала у колонки оставляем пустым. Значение передаем программно в виде отформатированной строки:


&НаКлиенте
Процедура ПересчитатьИтогиТаблицы()
    
    СуммаИтог = ТаблицаФормы.Итог("Сумма");
    Элементы.ТаблицаФормыСумма.ТекстПодвала = Формат(СуммаИтог, "ЧДЦ=2; ЧН=0,00");
    
КонецПроцедуры

Способ Б. Через вспомогательный реквизит формы

  1. Создадим на форме реквизит (например, ИтогСуммаТаблицы с типом Число).
  2. В свойстве числовой колонки ПутьКДаннымПодвала укажем созданный реквизит ИтогСуммаТаблицы.
  3. В коде будем обновлять значение этого реквизита:

&НаКлиенте
Процедура ПересчитатьИтогиТаблицы()
    
    ИтогСуммаТаблицы = ТаблицаФормы.Итог("Сумма");
    
КонецПроцедуры

Где вызывать процедуру пересчета итогов

Чтобы итоговая сумма в подвале всегда оставалась актуальной при действиях пользователя, вызов процедуры ПересчитатьИтогиТаблицы() необходимо назначить на следующие события формы и таблицы:

  1. Событие поля ввода «ПриИзменении» — у соответствующей числовой колонки, чтобы сумма пересчитывалась сразу после ввода значения пользователем.
  2. Событие таблицы «ПослеУдаления» — для корректного уменьшения итога при удалении строки.
  3. Событие таблицы «ПриОкончанииРедактирования» — для отслеживания добавления новых строк.
  4. События «ПриСозданииНаСервере» / «ПриОткрытии» — для первичного расчета итога при загрузке формы.
  5. Событие «ОбработкаВыбора» — если в таблицу добавляются строки пакетно через форму подбора.

Посмотрим на пример комплексной привязки обработчиков:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПересчитатьИтогиТаблицы();
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаФормыСуммаПриИзменении(Элемент)
    ПересчитатьИтогиТаблицы();
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаФормыПослеУдаления(Элемент)
    ПересчитатьИтогиТаблицы();
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаФормыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    Если Не ОтменаРедактирования Тогда
        ПересчитатьИтогиТаблицы();
    КонецЕсли;
КонецПроцедуры

Особенности работы с Динамическими списками

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

← На главную