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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как при открытии формы пересчитать итоги в подвале табличной части?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33661
      Телеграм группа https://t.me/odineskiOdineski
      Участник

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

      • #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 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С