При разработке и редактировании форм бюджетирования или сложных отчетов на обычных формах 1С часто возникает необходимость выводить итоговые суммы по колонкам в подвале табличного поля. Однако стандартные механизмы автоматического подсчета итогов могут не срабатывать для составных или динамически формируемых колонок (например, итоговых столбцов, данные в которых рассчитываются алгоритмически).
Разберем по шагам, как устроена работа с подвалом табличного поля в обычных формах 1С, и проанализируем варианты решения задачи — от простой настройки свойств элементов формы до программного пересчета значений.
Если колонка связана с числовым полем источника данных (например, реквизитом ТаблицаЗначений), платформа 1С умеет автоматически суммировать данные по столбцу. Для этого достаточно настроить соответствующее свойство колонки табличного поля.
Выясним условия, необходимые для автоматического расчета:
ЭлементыФормы.тпБюджетныеОперации.Подвал = Истина;ОписаниеТипов).ОтображатьИтогиВПодвале в значение Истина.Посмотрим на пример включения итогов при программном формировании колонок:
// Включаем отображение подвала у самого табличного поля
ЭлементыФормы.тпБюджетныеОперации.Подвал = Истина;
// Для нужной числовой колонки включаем автоматический подсчет
Колонка = ЭлементыФормы.тпБюджетныеОперации.Колонки.Найти("Данные_Сумма");
Если Колонка <> Неопределено Тогда
Колонка.ОтображатьИтогиВПодвале = Истина;
Колонка.ГоризонтальноеПоложениеВПодвале = ГоризонтальноеПоложение.Право;
КонецЕсли;
Обратите внимание: свойство ОтображатьИтогиВПодвале доступно только для колонок, имеющих числовой тип данных. Если тип колонки составной или неопределенный, свойство выдаст ошибку или не даст желаемого результата.
В случаях, когда колонки формируются динамически на лету (например, вычисляемая колонка ДанныеИТОГО_..., куда складываются горизонтальные данные за несколько интервалов или по разным ЦФО), стандартный автоматический подсчет платформы может не подойти или выводить неактуальные данные.
В такой ситуации проанализируем подход с ручным заполнением свойства ТекстПодвала. Алгоритм состоит из двух шагов: сначала рассчитываем значения в строках таблицы, а затем суммируем колонку и присваиваем отформатированный результат подвалу.
Рассмотрим пример процедуры обновления подвала:
Процедура мОбновитьИтогиВПодвале()
// Включаем отображение подвала у элемента управления
ЭлементыФормы.тпБюджетныеОперации.Подвал = Истина;
Для Каждого Колонка Из ЭлементыФормы.тпБюджетныеОперации.Колонки Цикл
// Пропускаем служебные колонки и текстовые аналитики
Если Найти(Колонка.Имя, "Аналитика_") <> 0 Или Найти(Колонка.Имя, "НомерСтроки") <> 0 Тогда
Продолжить;
КонецЕсли;
// Проверяем, относится ли колонка к числовым данным или итогам
Если Найти(Колонка.Имя, "Данные_") <> 0 Или Найти(Колонка.Имя, "ДанныеИТОГО_") <> 0 Тогда
// Исключаем колонки с ценами, если по ним не нужно выводить сумму
Если Найти(Колонка.Имя, "Цена") > 0 Тогда
Продолжить;
КонецЕсли;
// Рассчитываем сумму по колонке в источнике данных (Таблице Значений)
ИтогПоКолонке = тпБюджетныеОперации.Итог(Колонка.Имя);
// Задаем явный текст подвала с учетом формата колонки
Если Не ПустаяСтрока(Колонка.Формат) Тогда
Колонка.ТекстПодвала = Формат(ИтогПоКолонке, Колонка.Формат);
Иначе
Колонка.ТекстПодвала = Формат(ИтогПоКолонке, "ЧДЦ=2; ЧРГ=' '");
КонецЕсли;
Колонка.ГоризонтальноеПоложениеВПодвале = ГоризонтальноеПоложение.Право;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Если в вашей форме суммы по горизонтали (из месячных колонок в общую колонку ДанныеИТОГО_...) рассчитываются программным кодом в обработчиках ПриИзменении или при пересчете таблицы, важно соблюдать правильный порядок вызовов:
СтрокаТП["ДанныеИТОГО_..."]).тпБюджетныеОперации.Итог("ДанныеИТОГО_...") и записывает ее в ТекстПодвала.Соблюдение этого порядка гарантирует, что в подвале колонки «ИТОГО» всегда будут отображаться корректные и актуальные суммарные данные.