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