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