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

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

В процессе разработки на платформе 1С:Предприятие часто возникает ситуация, когда структура таблицы в форме определяется динамически, исходя из результатов запроса. Одной из типичных задач в этом контексте является управление визуальным представлением шапки таблицы. Например, когда нам нужно скрыть текст заголовка для служебной колонки с пометками (флажками) или заменить стандартное техническое имя на более понятное пользователю описание. Рассмотрим подробно, как это реализовать, используя возможности встроенного языка.

Суть проблемы при динамическом создании колонок

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

Проанализируем типичный фрагмент кода, создающий такую таблицу:


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|    ЛОЖЬ КАК Отметка,
|    РезервРЦ.ПоДокументу.Ссылка КАК ПоДокументу
|ИЗ
|    РегистрСведений.РезервРЦ КАК РезервРЦ
|ГДЕ
|    РезервРЦ.ПоДокументу.Дата МЕЖДУ &ДатаНач И &ДатаКон
|УПОРЯДОЧИТЬ ПО
|    ПоДокументу";

ТП1 = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.ТП1.СоздатьКолонки();

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

Способ 1: Прямое обращение по имени или индексу

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

Рассмотрим пример кода для изменения текста конкретной колонки:


// Обращение по имени колонки (псевдониму из запроса)
ЭлементыФормы.ТП1.Колонки.Отметка.ТекстШапки = "";

// Или более универсальный способ через строковое имя
ЭлементыФормы.ТП1.Колонки["ПоДокументу"].ТекстШапки = "Документ-основание резерва";

Преимущества этого подхода:

  1. Минимальное количество строк кода.
  2. Высокая скорость выполнения (прямое обращение к объекту).
  3. Прозрачность логики: мы четко видим, какую колонку редактируем.

Способ 2: Перебор всех колонок в цикле

Иногда требуется массовая обработка заголовков или мы работаем в условиях, когда точный состав колонок может меняться. В таких случаях целесообразно использовать цикл Для Каждого. Проанализируем ситуацию, когда нам нужно очистить заголовки у всех колонок, содержащих определенное слово.


Для Каждого Колонка Из ЭлементыФормы.ТП1.Колонки Цикл
    Если Колонка.Имя = "Отметка" Тогда 
        Колонка.ТекстШапки = "";
    ИначеЕсли Колонка.ТекстШапки = "ПоДокументу" Тогда
        Колонка.ТекстШапки = "Документ";
    КонецЕсли;
КонецЦикла;

Этот метод более гибкий, так как позволяет проверять не только имя (свойство Имя), но и текущее значение заголовка (свойство ТекстШапки) или даже тип данных в колонке.

Улучшение визуального восприятия: Картинки и подсказки

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

1. Использование картинок в шапке. Вместо текста можно вывести пиктограмму. Для этого используется свойство КартинкаШапки. Рассмотрим, как установить стандартную картинку флажка в заголовок:


КолонкаОтметка = ЭлементыФормы.ТП1.Колонки.Отметка;
КолонкаОтметка.ТекстШапки = ""; // Убираем текст
КолонкаОтметка.КартинкаШапки = БиблиотекаКартинок.Флажок; // Устанавливаем иконку
КолонкаОтметка.ОтображатьВШапке = Истина;

2. Подсказки. Даже если шапка пустая, при наведении курсора пользователь должен видеть пояснение. За это отвечает свойство ПодсказкаШапки.

КолонкаОтметка.ПодсказкаШапки = "Отметьте строки для обработки";

Работа с поиском колонки по связанным данным

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


ИскомаяКолонка = ЭлементыФормы.ТП1.Колонки.Найти("Отметка");
Если ИскомаяКолонка <> Неопределено Тогда
    ИскомаяКолонка.ТекстШапки = "";
КонецЕсли;

Использование проверки на Неопределено является хорошим тоном программирования, так как предотвращает аварийное завершение работы программы при изменении структуры запроса в будущем.

Нюансы для различных типов форм

Важно помнить, что рассмотренные выше примеры относятся к Обычным формам (платформа 8.2 или режим совместимости в 8.3). Рассмотрим кратко, в чем отличие, если вы столкнетесь с Управляемыми формами (интерфейс "Такси").

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

  1. Вместо ЭлементыФормы используется коллекция Элементы.
  2. Вместо свойства ТекстШапки используется свойство Заголовок.
  3. Колонки чаще всего являются подчиненными элементами самой таблицы в дереве элементов.

Пример для управляемых форм:

Элементы.ТП1Отметка.Заголовок = ""; // Где ТП1Отметка - имя элемента колонки

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

Мы проанализировали основные способы программного управления заголовками таблиц в 1С. Посмотрим еще раз на ключевые правила:

  1. Всегда меняйте заголовки после выполнения СоздатьКолонки().
  2. Используйте прямое обращение через Колонки["Имя"] для быстрого доступа.
  3. Не забывайте про ПодсказкаШапки для улучшения юзабилити, если основной текст скрыт.
  4. Для массовой настройки или при динамическом составе полей применяйте обход коллекции в цикле Для Каждого.

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

← На главную