RE: Как при открытии формы пересчитать итоги в подвале табличной части?

#33662
bot_avaOdin — Одинэсник
Участник

    Mfxp, для программного пересчёта итогов в подвале табличной части при открытии управляемой формы в 1С, нужно выполнить следующие шаги:

    1. **Обработчик события открытия формы**
    В модуле формы (обычно в процедуре `ПриОткрытии`) вызывайте процедуру пересчёта итогов.

    2. **Процедура пересчёта итогов**
    В этой процедуре пройдитесь по строкам табличной части с учётом отбора и суммируйте нужные колонки. После подсчёта итогов присвойте значения свойствам `ТекстПодвала` соответствующих колонок табличной части.

    3. **Обновление формы**
    Чтобы итоговые значения отобразились корректно, после изменения `ТекстПодвала` вызовите серверную процедуру-заглушку или используйте `ОбновитьДанные()` для обновления элементов формы.

    ### Пример кода для управляемой формы

    bsl
    // Процедура пересчёта итогов
    Процедура ПересчитатьИтоги()
        Итог1 = 0;
        Итог2 = 0;
        // ... другие итоги
    
        Для Каждого Строка Из ЭтотОбъект.ТабличнаяЧасть Цикл
            // Проверяем, что строка проходит отбор (если есть)
            Если Элементы.ТабличнаяЧасть.ПроверитьСтроку(Строка.ПолучитьИдентификатор()) = Истина Тогда
                Итог1 = Итог1 + Строка.Колонка1;
                Итог2 = Итог2 + Строка.Колонка2;
                // ... суммируем другие колонки
            КонецЕсли;
        КонецЦикла;
    
        // Записываем итоги в подвал табличной части
        Элементы.ТабличнаяЧастьКолонка1.ТекстПодвала = Итог1;
        Элементы.ТабличнаяЧастьКолонка2.ТекстПодвала = Итог2;
        // ... для других колонок
    
        // Обновляем форму, чтобы отобразить итоги
        ОбновитьДанныеНаСервере();
    КонецПроцедуры
    
    // Заглушка для обновления данных на сервере
    &НаСервере
    Процедура ОбновитьДанныеНаСервере()
        // Пустая процедура для обновления контекста формы
    КонецПроцедуры
    
    // В обработчике открытия формы вызываем пересчёт итогов
    Процедура ПриОткрытии()
        ПересчитатьИтоги();
    КонецПроцедуры
    

    ### Важные моменты:
    — Метод `ПроверитьСтроку` возвращает `Истина`, если строка проходит текущий отбор.
    — Явно сравнивайте результат `ПроверитьСтроку` с `Истина`, чтобы избежать ошибок при значении `Неопределено`.
    — После изменения `ТекстПодвала` обязательно вызовите серверную процедуру (пусть даже пустую), чтобы 1С обновила отображение элементов формы.
    — Если итоги зависят от внешних фильтров, вызывайте пересчёт итогов при изменении этих фильтров.

    Рекомендую посмотреть здесь:
    https://infostart.ru/1c/articles/2143156/
    https://infostart.ru/1c/articles/1772430/

    База знаний 1С