Отображение суммарных показателей в нижней строке (подвале) таблицы — типовая задача при разработке интерфейсов в среде 1С:Предприятие 8.3 (Управляемые формы). Способ реализации напрямую зависит от типа источника данных: является ли таблица стандартной табличной частью прикладного объекта (документа, справочника) или произвольной таблицей формы (коллекцией значений).
Разберем по шагам все возможные сценарии и способы вывода итогов.
Для табличных частей прикладных объектов платформа 1С автоматически генерирует специальные реквизиты итогов для всех числовых колонок. Настройка выполняется исключительно в свойствах элементов формы.
Рассмотрим порядок действий:
Подвал в значение Истина.Сумма).ПутьКДаннымПодвала.Объект.Товары.ИтогСумма.При таком подходе платформа берет на себя весь автоматический пересчет и обновление значений при любом редактировании, добавлении или удалении строк.
Если таблица на форме связана не с табличной частью объекта, а с реквизитом формы с типом ТаблицаЗначений, автоматические реквизиты итогов платформой не формируются. В этом случае подсчет настраивается вручную.
Проанализируем ключевой момент: у объекта ДанныеФормыКоллекция на тонком клиенте доступен метод Итог("ИмяКолонки"). Это означает, что пересчет выполняется быстро прямо в контексте &НаКлиенте без лишних серверных вызовов.
Вывести результат можно двумя способами:
Способ А. Через свойство «ТекстПодвала» колонки
В свойствах таблицы включаем отображение подвала (свойство Подвал = Истина), а свойство ПутьКДаннымПодвала у колонки оставляем пустым. Значение передаем программно в виде отформатированной строки:
&НаКлиенте
Процедура ПересчитатьИтогиТаблицы()
СуммаИтог = ТаблицаФормы.Итог("Сумма");
Элементы.ТаблицаФормыСумма.ТекстПодвала = Формат(СуммаИтог, "ЧДЦ=2; ЧН=0,00");
КонецПроцедуры
Способ Б. Через вспомогательный реквизит формы
ИтогСуммаТаблицы с типом Число).ПутьКДаннымПодвала укажем созданный реквизит ИтогСуммаТаблицы.
&НаКлиенте
Процедура ПересчитатьИтогиТаблицы()
ИтогСуммаТаблицы = ТаблицаФормы.Итог("Сумма");
КонецПроцедуры
Чтобы итоговая сумма в подвале всегда оставалась актуальной при действиях пользователя, вызов процедуры ПересчитатьИтогиТаблицы() необходимо назначить на следующие события формы и таблицы:
Посмотрим на пример комплексной привязки обработчиков:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПересчитатьИтогиТаблицы();
КонецПроцедуры
&НаКлиенте
Процедура ТаблицаФормыСуммаПриИзменении(Элемент)
ПересчитатьИтогиТаблицы();
КонецПроцедуры
&НаКлиенте
Процедура ТаблицаФормыПослеУдаления(Элемент)
ПересчитатьИтогиТаблицы();
КонецПроцедуры
&НаКлиенте
Процедура ТаблицаФормыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если Не ОтменаРедактирования Тогда
ПересчитатьИтогиТаблицы();
КонецЕсли;
КонецПроцедуры
Если таблица отображает Динамический список, метод Итог() к нему неприменим, так как данные считываются платформой порциями. В этом случае подсчет общего итога по списку выполняется исключительно запросом к базе данных на сервере, а результат записывается в свойство Элементы.ИмяКолонки.ТекстПодвала.