Как вывести итоги по новым числовым колонкам в подвал таблицы управляемой формы 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке управляемых форм в платформе 1С:Предприятие 8.3 разработчики часто сталкиваются со следующей ситуацией: в свойствах таблицы включен флажок Отображать в подвале (или Подвал), но подвал остается пустым. При попытке заполнить свойство колонки ПутьКДаннымПодвала в списке недоступны итоговые реквизиты вида Объект.ТабличнаяЧасть.ИтогИмяКолонки для вновь добавленных колонок.

Разберем подробнее причины такого поведения платформы и проанализируем доступные способы решения задачи.

Почему платформенные итоги не формируются автоматически

Платформа 1С автоматически генерирует специальное итоговое поле вида ИтогИмяРеквизита только при соблюдении следующих жестких условий:

  1. Реквизит принадлежит объекту БД. Поле создано непосредственно в табличной части объекта метаданных (документа или справочника), а не является изолированным реквизитом самой формы (например, типом ТаблицаЗначений). Объект базы данных считывается при открытии формы полностью, что позволяет платформе моментально вычислять суммы.
  2. Строгий тип данных — Число. Автоматический расчет не поддерживается для составных типов данных (например, Число + Строка).
  3. Не используется Динамический список или программное создание. Итоговые пути не создаются платформой для таблиц на базе ДинамическийСписок, а также для реквизитов, добавленных динамически во время работы формы через метод ИзменитьРеквизиты().

Вариант 1. Использование встроенного механизма платформы (через метаданные или расширение)

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

Проанализируем порядок действий при работе в основной конфигурации или в расширении:

  1. Откроем нужный документ или справочник в дереве конфигурации (или добавьте его в расширение).
  2. Перейдем в раздел Табличные части и откроем необходимую табличную часть.
  3. Добавим реквизит и установим ему тип данных Число с необходимой точностью и длиной.
  4. Перейдем к редактору формы. В дереве реквизитов формы в составе табличной части объекта автоматически появится виртуальное поле ИтогИмяСозданногоРеквизита.
  5. В свойствах соответствующего элемента формы (колонки таблицы) установим флажок ОтображатьВПодвале.
  6. В поле ПутьКДаннымПодвала выберем путь Объект.ИмяТабличнойЧасти.ИтогИмяСозданногоРеквизита.

Важное замечание при работе с расширениями: если реквизит был добавлен в табличную часть объекта внутри расширения, но не сразу отобразился в пути к данным подвала в редакторе формы, сохраните конфигурацию расширения и переоткройте форму.

Вариант 2. Программный расчет итогов для реквизитов формы

Если колонка принадлежит реквизиту формы (например, таблице значений, не связанной напрямую с объектом), платформенное поле итога создано не будет. В этом случае применим программный расчет сумм с заполнением свойства ТекстПодвала у элемента таблицы.

Рассмотрим пошаговую реализацию программного вычисления:

1. Создадим процедуру пересчета итогов на клиенте:


&НаКлиенте
Процедура РассчитатьИтогиТаблицы()

	// Получаем сумму по колонке с помощью метода Итог()
	ВсегоКоличество = Объект.Товары.Итог("Количество");
	ВсегоСумма = Объект.Товары.Итог("Сумма");

	// Выводим отформатированный результат в подвал соответствующих колонок
	Элементы.ТоварыКоличество.ТекстПодвала = Формат(ВсегоКоличество, "ЧДЦ=3; ЧГ=3,0");
	Элементы.ТоварыСумма.ТекстПодвала = Формат(ВсегоСумма, "ЧДЦ=2; ЧГ=3,0");

КонецПроцедуры

2. Подключим процедуру пересчета к ключевым событиям формы и элементов таблицы, чтобы данные подвала своевременно обновлялись при любых изменениях:

  1. В обработчике события формы ПриОткрытии — для первичного расчета при загрузке документа.
  2. В обработчиках событий ПриИзменении для колонок, влияющих на итоговый результат.
  3. В обработчике события таблицы ПослеУдаления — для обновления сумм при удалении строк пользователем.

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	РассчитатьИтогиТаблицы();
КонецПроцедуры

&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
	РассчитатьИтогиТаблицы();
КонецПроцедуры

&НаКлиенте
Процедура ТоварыПослеУдаления(Элемент)
	РассчитатьИтогиТаблицы();
КонецПроцедуры

Резюме

Для стандартных числовых реквизитов объектов базы данных используем автоматический механизм ПутьКДаннымПодвала. Для вычисляемых полей или произвольных таблиц формы применяем метод коллекции Итог() и явно записываем результат в свойство ТекстПодвала элемента формы.

← На главную