При разработке управляемых форм в платформе 1С:Предприятие 8.3 разработчики часто сталкиваются со следующей ситуацией: в свойствах таблицы включен флажок Отображать в подвале (или Подвал), но подвал остается пустым. При попытке заполнить свойство колонки ПутьКДаннымПодвала в списке недоступны итоговые реквизиты вида Объект.ТабличнаяЧасть.ИтогИмяКолонки для вновь добавленных колонок.
Разберем подробнее причины такого поведения платформы и проанализируем доступные способы решения задачи.
Платформа 1С автоматически генерирует специальное итоговое поле вида ИтогИмяРеквизита только при соблюдении следующих жестких условий:
ТаблицаЗначений). Объект базы данных считывается при открытии формы полностью, что позволяет платформе моментально вычислять суммы.Число + Строка).ДинамическийСписок, а также для реквизитов, добавленных динамически во время работы формы через метод ИзменитьРеквизиты().Если вам необходимо выводить итог в подвал с помощью штатного свойства ПутьКДаннымПодвала, убедимся, что реквизит добавлен в объект метаданных, а не в форму.
Проанализируем порядок действий при работе в основной конфигурации или в расширении:
Число с необходимой точностью и длиной.ИтогИмяСозданногоРеквизита.ПутьКДаннымПодвала выберем путь Объект.ИмяТабличнойЧасти.ИтогИмяСозданногоРеквизита.Важное замечание при работе с расширениями: если реквизит был добавлен в табличную часть объекта внутри расширения, но не сразу отобразился в пути к данным подвала в редакторе формы, сохраните конфигурацию расширения и переоткройте форму.
Если колонка принадлежит реквизиту формы (например, таблице значений, не связанной напрямую с объектом), платформенное поле итога создано не будет. В этом случае применим программный расчет сумм с заполнением свойства ТекстПодвала у элемента таблицы.
Рассмотрим пошаговую реализацию программного вычисления:
1. Создадим процедуру пересчета итогов на клиенте:
&НаКлиенте
Процедура РассчитатьИтогиТаблицы()
// Получаем сумму по колонке с помощью метода Итог()
ВсегоКоличество = Объект.Товары.Итог("Количество");
ВсегоСумма = Объект.Товары.Итог("Сумма");
// Выводим отформатированный результат в подвал соответствующих колонок
Элементы.ТоварыКоличество.ТекстПодвала = Формат(ВсегоКоличество, "ЧДЦ=3; ЧГ=3,0");
Элементы.ТоварыСумма.ТекстПодвала = Формат(ВсегоСумма, "ЧДЦ=2; ЧГ=3,0");
КонецПроцедуры
2. Подключим процедуру пересчета к ключевым событиям формы и элементов таблицы, чтобы данные подвала своевременно обновлялись при любых изменениях:
ПриОткрытии — для первичного расчета при загрузке документа.ПриИзменении для колонок, влияющих на итоговый результат.ПослеУдаления — для обновления сумм при удалении строк пользователем.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
РассчитатьИтогиТаблицы();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
РассчитатьИтогиТаблицы();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПослеУдаления(Элемент)
РассчитатьИтогиТаблицы();
КонецПроцедуры
Для стандартных числовых реквизитов объектов базы данных используем автоматический механизм ПутьКДаннымПодвала. Для вычисляемых полей или произвольных таблиц формы применяем метод коллекции Итог() и явно записываем результат в свойство ТекстПодвала элемента формы.