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

Как при открытии фо...
 

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

Управляемая форма
При открытии формы пересчитать Итоги в подвале табличной части програмно



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

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/



   
ОтветитьЦитата