В процессе разработки на платформе 1С:Предприятие часто возникает ситуация, когда структура таблицы в форме определяется динамически, исходя из результатов запроса. Одной из типичных задач в этом контексте является управление визуальным представлением шапки таблицы. Например, когда нам нужно скрыть текст заголовка для служебной колонки с пометками (флажками) или заменить стандартное техническое имя на более понятное пользователю описание. Рассмотрим подробно, как это реализовать, используя возможности встроенного языка.
Разберем ситуацию: программист использует метод СоздатьКолонки() для автоматического формирования структуры ТабличногоПоля на основании выгрузки из Запрос. По умолчанию система подставляет в заголовки имена полей или псевдонимы, указанные в тексте запроса. Однако синтаксис языка запросов не позволяет задать пустой псевдоним или использовать в нем спецсимволы. В итоге мы получаем в шапке технические заголовки типа "Отметка" или "ПоДокументу", которые могут загромождать интерфейс.
Проанализируем типичный фрагмент кода, создающий такую таблицу:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЛОЖЬ КАК Отметка,
| РезервРЦ.ПоДокументу.Ссылка КАК ПоДокументу
|ИЗ
| РегистрСведений.РезервРЦ КАК РезервРЦ
|ГДЕ
| РезервРЦ.ПоДокументу.Дата МЕЖДУ &ДатаНач И &ДатаКон
|УПОРЯДОЧИТЬ ПО
| ПоДокументу";
ТП1 = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.ТП1.СоздатьКолонки();
Важно понимать, что метод СоздатьКолонки() полностью пересоздает коллекцию колонок. Это означает, что любые настройки, заданные в конфигураторе, будут утеряны. Поэтому все манипуляции с заголовками мы должны выполнять строго после вызова этого метода.
Если мы точно знаем имя колонки, которое было определено в запросе (псевдоним), мы можем обратиться к ней напрямую через коллекцию Колонки объекта ТабличноеПоле. Выясним, как это сделать наиболее эффективно.
Рассмотрим пример кода для изменения текста конкретной колонки:
// Обращение по имени колонки (псевдониму из запроса)
ЭлементыФормы.ТП1.Колонки.Отметка.ТекстШапки = "";
// Или более универсальный способ через строковое имя
ЭлементыФормы.ТП1.Колонки["ПоДокументу"].ТекстШапки = "Документ-основание резерва";
Преимущества этого подхода:
Иногда требуется массовая обработка заголовков или мы работаем в условиях, когда точный состав колонок может меняться. В таких случаях целесообразно использовать цикл Для Каждого. Проанализируем ситуацию, когда нам нужно очистить заголовки у всех колонок, содержащих определенное слово.
Для Каждого Колонка Из ЭлементыФормы.ТП1.Колонки Цикл
Если Колонка.Имя = "Отметка" Тогда
Колонка.ТекстШапки = "";
ИначеЕсли Колонка.ТекстШапки = "ПоДокументу" Тогда
Колонка.ТекстШапки = "Документ";
КонецЕсли;
КонецЦикла;
Этот метод более гибкий, так как позволяет проверять не только имя (свойство Имя), но и текущее значение заголовка (свойство ТекстШапки) или даже тип данных в колонке.
Если мы полностью удаляем ТекстШапки (например, для колонки с флажком "Выбрать"), пользователю может быть непонятно назначение этой области. Выясним, как сделать интерфейс более дружелюбным.
1. Использование картинок в шапке. Вместо текста можно вывести пиктограмму. Для этого используется свойство КартинкаШапки. Рассмотрим, как установить стандартную картинку флажка в заголовок:
КолонкаОтметка = ЭлементыФормы.ТП1.Колонки.Отметка;
КолонкаОтметка.ТекстШапки = ""; // Убираем текст
КолонкаОтметка.КартинкаШапки = БиблиотекаКартинок.Флажок; // Устанавливаем иконку
КолонкаОтметка.ОтображатьВШапке = Истина;
2. Подсказки. Даже если шапка пустая, при наведении курсора пользователь должен видеть пояснение. За это отвечает свойство ПодсказкаШапки.
КолонкаОтметка.ПодсказкаШапки = "Отметьте строки для обработки";
В сложных формах имя элемента (колонки) может не совпадать с именем поля в источнике данных. В таких случаях надежнее всего использовать метод Найти() по коллекции колонок. Разберем безопасный алгоритм поиска:
ИскомаяКолонка = ЭлементыФормы.ТП1.Колонки.Найти("Отметка");
Если ИскомаяКолонка <> Неопределено Тогда
ИскомаяКолонка.ТекстШапки = "";
КонецЕсли;
Использование проверки на Неопределено является хорошим тоном программирования, так как предотвращает аварийное завершение работы программы при изменении структуры запроса в будущем.
Важно помнить, что рассмотренные выше примеры относятся к Обычным формам (платформа 8.2 или режим совместимости в 8.3). Рассмотрим кратко, в чем отличие, если вы столкнетесь с Управляемыми формами (интерфейс "Такси").
В управляемом интерфейсе вместо объекта ТабличноеПоле мы работаем с элементом ТаблицаФормы. Свойства также имеют другие названия:
ЭлементыФормы используется коллекция Элементы.ТекстШапки используется свойство Заголовок.Пример для управляемых форм:
Элементы.ТП1Отметка.Заголовок = ""; // Где ТП1Отметка - имя элемента колонки
Мы проанализировали основные способы программного управления заголовками таблиц в 1С. Посмотрим еще раз на ключевые правила:
СоздатьКолонки().Колонки["Имя"] для быстрого доступа.ПодсказкаШапки для улучшения юзабилити, если основной текст скрыт.Для Каждого.Применяя эти подходы, мы создадим гибкий и интуитивно понятный интерфейс для конечного пользователя, даже если структура данных формируется "на лету" сложными запросами.