Периодически сталкиваюсь с задачей подсчета итогов по выделенным строкам табличной части.
Казалось бы решение известно - устанавливаем режим выделения: множественный, далее событие "ПриАктивизацииЯчейки", в нем получаем массив выделенных строк, в цикле подбиваем итоги, выводим на форму и все хорошо. Или не все?
На самом деле не всё.
- Событие Ctrl+A никак не отлавливается.
С этим можно мириться, просто выведя итоги в подвале ТЧ. Если нужны итоги по всем строкам - вот они и есть. - При снятии выделения со строки при множественном выделении - в массив выделенных строк ПриАктивизацииЯчейки - приходят строки ДО снятия выделения!
Предлагаю такое решение:
Заводим отдельную процедуру подсчета итогов
&НаКлиенте
Процедура Подсчет();
мсвВыдСтроки = Элементы.ТЧ.ВыделенныеСтроки;
Сообщить("Выделено "+мсвВыдСтроки.Количество()+" строк") ;
ВсегоВес = 0;
Для Каждого ИдСтроки из мсвВыдСтроки Цикл
Данные = ТЧ.НайтиПоИдентификатору(ИдСтроки);
ВсегоВес = ВсегоВес + Данные.Вес;
КонецЦикла;
ИтоговаяСтрока = ""+ВсегоВес+ ", кг."; // ИтоговаяСтрока - Это реквизит формы
КонецПроцедуры
А в событии ПриАктивизацииЯчейки - Взводим однократный таймер, срабатывающий с задержкой
&НаКлиенте
Процедура ТЧПриАктивизацииЯчейки(Элемент)
ПодключитьОбработчикОжидания("Подсчет",0.1,Истина);
КонецПроцедуры
Задержка подбирается по вкусу. У меня 0.1 секунды и это работает.
Во вложении - внешняя обработка, которая иллюстрирует подобный подход. Открывается через Файл - Открыть.
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.18.64