Предлагаю вариант, как быстро сделать итоги в динамическом списке, например в форме списка журнала документов.
Итак, мне необходимо вставить итог по колонке СуммаКОплате в динамическом списке формы списка журнала документов. Для этого в модуле формы списка журнала документов создаем новую процедуру, я назвал ее РассчитатьИтоги(), и вставляем в неё такой код:
Процедура РассчитатьИтоги()
Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
ЭтотОбъект.ЭтаФорма.Элементы.СуммаКОплате.ТекстПодвала = "Итого: " + Формат(Результат.Итог("СуммаКОплате"),"ЧДЦ=2; ЧН=-");
КонецПроцедуры
Затем делаем вставку вызова этой процедуры в любом обработчике событий, например СписокПриАктивизацииСтроки()
На этом всё, должно работать. Проверялась на релизах 8.3.10.2667, 8.3.11.2899.




Было же
(1) Здесь намного короче
Но лучше так не делать, хотя заказчику это бывает трудно объяснить. Правда потом он сам всё понимает, когда перелистывание страниц дин.списка превращается в диафильм.
(3) Далее можно этот алгоритм совершенствовать. Если это нужно.
(4) а если сделать не в СписокПриАктивизацииСтроки(), а через ПодключитьОбработчикОжидания?
(5) Не пробовал. Скорее всего тоже можно.
(6) Если у вас есть доступ к ИТС, тогда в вы получите объяснение почему в вашем случае надо использовать «Подключить обработчик ожидания».
(7) Я понимаю, о чём Вы. Более расширенное представление об этом в , где можно и подключить обработчик ожидания, и ограничить используемые в обработке ресурсы в структуре СКД. Но я уже ранее сказал, дальше можно совершенствовать алгоритм…
(8)
Имеется ввиду в убрать из Схемы все поля, по которым не нужно получать итог?
И это тоже. Если использовать процедуру ПодключитьОбработчикОжидания, тогда надо сделать так:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания(«ПриИзменении»,1);
КонецПроцедуры
&НаКлиенте
Процедура ПриИзменении()
РассчитатьИтоги();
КонецПроцедуры
&НаСервере
Процедура РассчитатьИтоги()
Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема,
Настройки,,,Тип(«ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений»));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый
ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
ЭтотОбъект.ЭтаФорма.Элементы.СуммаКОплате.ТекстПодвала = «Итого: » + Формат(Результат.Итог(«СуммаКОплате»),»ЧДЦ=2; ЧН=-«);
КонецПроцедуры
Работает.
Ещё промежуточные итоги можно в запросе получить. Не сильно бьет по производительности и проблем с перемоткой не будет. А общие итоги лучше выводить как Вы написали, но есть у дин списка «путь к данным подвала»
По моему для системы лучше сделать на форме кнопку или пункт меню обновить итоги и пусть пользователь сам их получает. А то такие вызовы даже с промежутком в 1 сек да еще и с тасканием формы на сервер… Слишком затратно
(13) Разработчик сам решает, каким событием воспользоваться. Моя задача была показать путь быстрого и правильного решения, с использованием СКД. Одними запросами здесь проблему не решить, потому что пользователь может использовать фильтры, поиск и так далее… Ну а частота пересчета итогов и на какое событие повесить этот пересчет — это на усмотрение разработчика, вариантов множество.
{Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(46)}: В обработчике ТаблицаОплатПриАктивизацииСтрокиПосле используется вызов контекстного серверного метода формыИ как обойти? Конечно же работа на тонком клиенте, ибо облачно вокруг.
(15) Процедура РассчитатьИтоги должна выполняться на сервере, т.е. перед ней должна стоять строка &НаСервере. А вот вызвать эту процедуру можно из Вашей процедуры, которая априори должна выполняться на клиенте.
Было бы не плохо если отображало итоги по выделенным строкам 🙂
Ставлю +