При разработке интерфейсов в 1С:Предприятие часто возникает задача вывода произвольной информации в подвале (футере) табличной части или табличного поля. Это может быть сумма по колонке, количество заполненных строк или любой другой текст, рассчитанный по сложной логике. Однако разработчики нередко сталкиваются с ситуацией: программно установленный текст в подвале загадочным образом исчезает или очищается сразу после заполнения таблицы данными. Рассмотрим, почему это происходит и как правильно настроить поведение элементов формы.
Проанализируем типичную ситуацию, описанную в обсуждении. Программист пытается заполнить колонку строковыми значениями в цикле и одновременно установить итог в подвал этой колонки, используя данные из другой таблицы. Код выглядит примерно так:
Н = 10;
Для каждого СтрокаТаблицы из Таблица Цикл
Н = Н * 3; // Условный расчет значения
СтрокаТаблицы.Количество = Строка(Н) + " ед.";
КонецЦикла;
// Попытка установить текст в подвал
ЭлементыФормы.Таблица.Колонки.Количество.ТекстПодвала = ДругаяТаблица.Итог("Количество");
На первый взгляд, код логичен. Однако на практике после выполнения этого фрагмента подвал колонки остается пустым. Выясним причину такого поведения. В платформе 1С (особенно это характерно для Обычных форм) за отображение итогов отвечают два механизма:
ТекстПодвала.Важный момент: Системный механизм автоматического расчета итогов имеет приоритет. Если у колонки включено свойство "Отображать итоги в подвале", платформа будет пытаться рассчитать сумму при каждом обновлении таблицы. Если тип данных колонки — Строка, сумма математически не может быть вычислена, и система записывает в подвал пустое значение (или 0), полностью затирая то, что вы написали программно.
Разберем, как исправить эту ситуацию в конфигурациях на обычных формах (например, УПП 1.3 или КА 1.1). Основная задача — отключить автоматическое управление подвалом со стороны платформы.
Шаг 1. Проверка свойств колонки в конфигураторе.
Откройте форму, выберите нужный элемент (Табличное поле). Зайдите в свойства колонки, в которой должен отображаться текст. Найдите группу свойств "Подвал". Проверьте флаг ОтображатьИтогиВПодвале. Если он установлен, его необходимо снять. Именно этот флаг заставляет систему игнорировать ваш программный текст.
Шаг 2. Настройка типа данных.
Если вы выводите в колонку текст (например, "100 шт." или "Итого: 500"), убедитесь, что тип значения колонки в метаданных или в описании типов таблицы значений соответствует строке. Если ранее колонка была числовой, а затем вы изменили её на строку, старые настройки отображения итогов могли сохраниться "в наследство", что и приводит к конфликту.
Шаг 3. Программная установка значения.
После того как автоматические итоги отключены, ваш код начнет работать корректно. Однако помните о производительности. Посмотрим на оптимизированный пример:
// Вычисляем итог заранее, чтобы не обращаться к методу Итог() внутри цикла
ЗначениеДляПодвала = ДругаяТаблица.Итог("Количество");
Для каждого СтрокаТаблицы из Таблица Цикл
// Логика заполнения строк
СтрокаТаблицы.Количество = "Значение " + НомерСтроки;
КонецЦикла;
// Устанавливаем текст один раз после завершения всех операций с данными
ЭлементыФормы.Таблица.Колонки.Количество.ТекстПодвала = Строка(ЗначениеДляПодвала);
Хотя в исходном вопросе речь шла об ЭлементыФормы (Обычные формы), современные версии 1С на Управляемых формах работают по несколько иным принципам. В них управление подвалом стало более гибким и декларативным.
Проанализируем основные отличия:
ПутьКДаннымПодвала. Вместо того чтобы писать код присвоения текста, вы можете создать реквизит формы (например, ИтогПоКолонке типа Строка) и указать его в этом свойстве. Как только вы измените значение реквизита в коде, подвал обновится автоматически.ПриИзменении таблицы.Рассмотрим несколько полезных техник, которые позволяют сделать подвалы более информативными:
Многострочный текст в подвале.
Вы можете выводить в подвал одной колонки сразу несколько показателей, используя символы переноса строки. Это особенно полезно, когда ширина таблицы ограничена.
Текст = "Всего строк: " + Таблица.Количество() + Символы.ПС + "Итого сумма: " + Формат(ИтоговаяСумма, "ЧДЦ=2");
ЭлементыФормы.Таблица.Колонки.ИмяКолонки.ТекстПодвала = Текст;
Визуальное выделение.
В обычных формах программно можно менять не только текст, но и оформление подвала. Для этого используются свойства ШрифтПодвала, ЦветФонаПодвала и ЦветТекстаПодвала. Рассмотрим пример выделения отрицательного итога красным цветом:
ИтогЗначение = Таблица.Итог("Сумма");
Колонка = ЭлементыФормы.Таблица.Колонки.Сумма;
Колонка.ТекстПодвала = ИтогЗначение;
Если ИтогЗначение < 0 Тогда
Колонка.ЦветТекстаПодвала = ЦветаСтиля.ОтрицательныйИтог;
Иначе
Колонка.ЦветТекстаПодвала = ЦветаСтиля.ТекстФормы;
КонецЕсли;
Подведем итоги. Если вы столкнулись с тем, что ТекстПодвала очищается:
Соблюдение этих простых правил позволит вам создавать информативные и стабильно работающие интерфейсы, в которых итоговая информация всегда будет отображаться корректно, независимо от типа данных в колонках.