Как программно изменить заголовок колонки таблицы на форме 1С?

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

При разработке на платформе 1С:Предприятие 8.3 (особенно на управляемых формах) программисты часто сталкиваются с задачей динамического построения интерфейса. Одна из классических проблем — ситуация, когда мы программно создаем таблицу, меняем заголовки её колонок в объекте ТаблицаЗначений, но на экране пользователя по-прежнему отображаются технические имена вроде "П1", "П2" или "Колонка1".

В этой статье мы подробно разберем, почему так происходит, и научимся правильно управлять визуальным представлением данных в динамических таблицах.

Разделение данных и представления: в чем корень проблемы?

Проанализируем ситуацию: когда мы пишем код ТЗ.Колонки.Добавить("Товар"), мы создаем структуру в оперативной памяти сервера. Объект ТаблицаЗначений — это чисто программный контейнер для данных. У него действительно есть свойство Заголовок у каждой колонки, но оно предназначено в основном для построителя отчетов или автоматической генерации форм.

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

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

Пошаговое решение: программное создание таблицы с правильными заголовками

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

Шаг 1. Создание реквизитов формы

Сначала нам нужно добавить саму таблицу и её колонки в состав реквизитов формы. Обратите внимание, что уже на этом этапе мы можем заложить заголовок в метаданные реквизита.


// Создаем массив для новых реквизитов
МассивРеквизитов = Новый Массив;

// 1. Добавляем саму таблицу
МассивРеквизитов.Добавить(Новый РеквизитФормы("ДинамическаяТЗ", Новый ОписаниеТипов("ТаблицаЗначений")));

// 2. Добавляем колонки в массив
// Четвертый параметр конструктора РеквизитФормы — это и есть Заголовок
МассивРеквизитов.Добавить(Новый РеквизитФормы("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"), "ДинамическаяТЗ", "Наименование товара"));
МассивРеквизитов.Добавить(Новый РеквизитФормы("Количество", Новый ОписаниеТипов("Число"), "ДинамическаяТЗ", "Остаток на складе"));

// Фиксируем изменения на форме
ИзменитьРеквизиты(МассивРеквизитов);

Шаг 2. Создание визуального элемента таблицы

Теперь добавим саму таблицу на форму. Выясним причину, по которой это делается отдельно: элемент ТаблицаФормы является лишь «рамкой», в которой будут отображаться наши данные.


ТаблицаНаФорме = Элементы.Добавить("ВизуальнаяТаблица", Тип("ТаблицаФормы"), ЭтаФорма);
ТаблицаНаФорме.ПутьКДанным = "ДинамическаяТЗ";
ТаблицаНаФорме.Отображение = ОтображениеТаблицы.Список;

Шаг 3. Создание колонок (решение основной проблемы)

А вот теперь самый ответственный момент. При переборе колонок нашей таблицы (или массива описаний), мы должны явно назначить свойство Заголовок каждому элементу формы. Посмотрим на примере цикла:


// Предположим, у нас есть программная ТЗ, из которой мы берем структуру
Для Каждого КолонкаТЗ Из ОбъектТЗ.Колонки Цикл
    
    // Добавляем элемент формы типа ПолеФормы
    НоваяКолонка = Элементы.Добавить("Колонка_" + КолонкаТЗ.Имя, Тип("ПолеФормы"), ТаблицаНаФорме);
    НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
    
    // Указываем путь к данным: ИмяТаблицы.ИмяКолонки
    НоваяКолонка.ПутьКДанным = "ДинамическаяТЗ." + КолонкаТЗ.Имя;
    
    // УСТАНАВЛИВАЕМ ЗАГОЛОВОК ЯВНО
    // Если мы не сделаем это, пользователь увидит техническое имя
    НоваяКолонка.Заголовок = КолонкаТЗ.Заголовок; 
    
    // Дополнительные настройки внешнего вида
    НоваяКолонка.Ширина = 15;
КонецЦикла;

Дополнительные возможности оформления заголовков

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

  1. Многострочные заголовки. Если название колонки длинное, например "Количество товара в резерве на основном складе", можно принудительно перенести текст. Для этого используйте Символы.ПС. Однако помните: чтобы это сработало, у самой ТаблицыФормы свойство ВысотаШапки должно быть больше 1.
  2. Подсказки (Tooltip). Вы можете задать свойство Подсказка для колонки. При наведении на заголовок пользователь увидит расшифровку. Это отличный способ разгрузить интерфейс от длинных текстов.
  3. Группировка колонок. Если у вас много колонок (например, продажи по месяцам), их можно объединить под общим заголовком. Для этого сначала добавьте элемент формы с типом ГруппаФормы и видом ГруппаКолонок, а затем создавайте колонки, указывая эту группу в качестве родителя.

Типичные ошибки при динамической смене заголовков

Рассмотрим подробнее ошибки, которые часто допускают разработчики:

Ошибка №1: Попытка изменить заголовок через объект вместо элемента. Как мы уже выяснили, код ЭтаФорма.РеквизитТЗ.Колонки[0].Заголовок = "Новый" изменит только структуру данных в памяти, но не то, что видит пользователь на экране.

Ошибка №2: Забытое удаление старых элементов. Если ваша процедура вызывается повторно (например, при нажатии кнопки "Обновить структуру"), вы получите ошибку "Имя не уникально". Перед созданием новых колонок всегда проверяйте наличие старых и удаляйте их:


// Пример очистки старых колонок перед созданием новых
МассивДляУдаления = Новый Массив;
Для Каждого Элемент Из Элементы.ВизуальнаяТаблица.ПодчиненныеЭлементы Цикл
    МассивДляУдаления.Добавить(Элемент);
КонецЦикла;

Для Каждого ЭлементДляУдаления Из МассивДляУдаления Цикл
    Элементы.Удалить(ЭлементДляУдаления);
КонецЦикла;

Подведем итоги

Для того чтобы визуально изменить название колонки таблицы в 1С, необходимо работать именно с Элементами формы. Порядок действий всегда один: определили структуру данных -> создали реквизиты -> добавили визуальные элементы -> явно прописали свойство Заголовок для каждого ПоляФормы.

Следуя этим правилам, вы сможете создавать гибкие и понятные интерфейсы, которые будут подстраиваться под любые требования бизнеса.

← На главную