Почта: info@105.ooo
Телефон: 8-800-333-6-105
Адрес: Московская область, г. Дубна,
ул. Программистов, дом 4, стр.1

Расчет итогов по столбцам табличной части на форме с учетом отбора

Обработка итогов по столбцам в табличной части с учетом отборов
Для решения проблемы корректного отображения итогов по столбцам в табличной части формы, которая учитывает пользовательские отборы, была доработана стандартная функция "Итоги". Проблема заключалась в том, что стандартная функция не учитывает фильтры, установленные пользователем, что приводило к некорректным итогам.

Принцип решения
Чтобы итоги пересчитывались правильно при любом изменении на форме, обработчик был подвешен на событие "ПриАктивизацииСтроки" табличной части. Это позволяет учитывать отборы как внутри самой табличной части, так и из внешних элементов формы.

Особенности и нюансы
  1. Событие на другой закладке: Обработчик вызывается даже если табличная часть находится на другой закладке формы, поэтому в начале процедуры проверяется имя объекта, переданного в неё.
  2. Проверка строки: Функция "ПроверитьСтроку" может возвращать значение "Неопределено", что может вызвать ошибку преобразования к булевому значению. Поэтому нужно явно сравнивать результат с "Истина".
  3. Обновление отображения: После изменения заголовков элементов на форме требуется серверный вызов для обновления контекста формы и её элементов, так как метод "ОбновитьОтображениеДанных()" здесь не работает.
Код процедуры
&НаСервере
Процедура ОбновитьДанныеНаСервере()
 // Заглушка для перечитывания элементов формы
   // Вызывается из процедур пересчета итогов по таблицам для обновления отображения итогов на форме.
   // Без серверного вызова не происходит обновление отображения элементов на форме.
КонецПроцедуры
&НаКлиенте
Процедура ТабличнаяЧасть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. Проверка значения "Неопределено": Функция "ПроверитьСтроку" иногда может возвращать значение "Неопределено", поэтому необходимо явно указывать сравнение с булевым значением "Истина".
  2. Серверный вызов для обновления: после изменения заголовков элементов на форме обязательно требуется серверный вызов для обновления контекста формы и её элементов. Этот подход обеспечивает корректный пересчёт итогов в табличной части формы с учётом всех отборов и изменений, что делает работу с формами в 1С более удобной и надёжной.
НАШИ КОНТАКТЫ
info@105.ooo
Почта:
Московская область, г. Дубна, ул. Программистов, дом 4, стр. 1
Адрес:
Контакты генерального директора
Оводков Василий Юрьевич
Телефон/WhataApp:
vovodkov@koderline
8-800-333-6-105
Телефон:
Бесплатный звонок
+7 968 948-79-59
Почта: