Как вывести итоги в подвал формы списка в 1С:Предприятие 8 на обычных формах?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе в среде 1С:Предприятие на обычных формах часто возникает необходимость отобразить сумму значений по колонке в подвале списка. Стандартные инструменты не всегда позволяют сделать это «одной галочкой», особенно если список динамический и имеет сложную систему отборов. Давайте разберем, как реализовать эту задачу наиболее эффективно.

Почему использование ПостроителяЗапроса — лучший выбор?

Когда вы работаете с журналом документов или списком, важно понимать, что данные в нем отображаются не просто так, а с учетом всех фильтров, установленных пользователем. Если просто пробежаться по всей базе, вы получите неверную сумму. Использование ПостроительЗапроса позволяет связать текущий ИсточникДанных вашего списка с запросом, что гарантирует точное соответствие итогов тому, что видит пользователь на экране.

Реализация расчета итогов по шагам

Для начала разберем алгоритм получения данных из списка. Нам нужно извлечь данные с учетом наложенных отборов, а затем просуммировать их. Рассмотрим пример кода, который делает это корректно:


Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ЖурналДокументовСписок);
Результат = Построитель.Результат;
ТаблицаДокументов = Результат.Выгрузить();
ИтоговаяСумма = ТаблицаДокументов.Итог("СуммаДокумента");
ЭлементыФормы.ЖурналДокументовСписок.Колонки.СуммаДокумента.ТекстПодвала = Формат(ИтоговаяСумма, "ЧЦ=15; ЧДЦ=2");

В этом коде мы создаем ПостроительЗапроса, передаем ему наш список (например, ЖурналДокументовСписок), выгружаем результат в ТаблицаЗначений и используем метод Итог(). Это самый надежный способ.

Суммирование нескольких колонок

Часто требуется не просто вывести одну сумму, а сложить показатели из разных колонок. Давайте посмотрим, как это сделать. Мы можем рассчитать итоги для каждой колонки отдельно, а затем сложить их перед выводом в подвал.


Сумма1 = ТаблицаДокументов.Итог("СуммаОплатаБС");
Сумма2 = ТаблицаДокументов.Итог("СуммаОплата");
ОбщаяСумма = Сумма1 + Сумма2;
ЭлементыФормы.ЖурналДокументовСписок.Колонки.ИмяКолонки.ТекстПодвала = "=" + Формат(ОбщаяСумма, "ЧЦ=15; ЧДЦ=2");

Обратите внимание на использование символа = в свойстве ТекстПодвала. Это позволяет 1С корректно отобразить вычисленное значение как итог. Также мы применяем функцию Формат(), чтобы число выглядело аккуратно и содержало нужное количество знаков после запятой.

Важные рекомендации по производительности

  1. Не злоупотребляйте вычислениями. Помните, что расчет итогов при каждом обновлении списка может замедлить работу интерфейса. Лучше вызывать процедуру пересчета по нажатию кнопки «Рассчитать итоги» или при явном изменении отбора пользователем.
  2. Избегайте события ПриВыводеСтроки. Это событие срабатывает при отрисовке каждой строки списка. Попытка вычислять итоги внутри этого события приведет к значительным тормозам.
  3. Форматируйте выводимые данные. Всегда приводите итоговое число к строковому формату, используя Формат(), чтобы избежать проблем с отображением длинных чисел или лишних нулей.

Заключение

Использование ПостроительЗапроса является профессиональным стандартом для решения подобных задач на обычных формах. Этот метод позволяет гибко управлять данными, не создавая лишних запросов к базе данных и обеспечивая высокую точность расчетов. Если вы планируете продолжать разработку на обычных формах, обязательно освойте работу с этим объектом — он сэкономит вам массу времени.

Развивайтесь в программировании 1С, пробуйте предложенные подходы на практике, и со временем решение даже самых «сложных» задач, таких как работа с итогами в журналах, будет занимать у вас считанные минуты!

← На главную