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

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

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

Анализ стандартных возможностей платформы

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

  1. Стандарты графических интерфейсов: Платформа ориентирована на использование стандартных контролов операционных систем и веб-браузеров. В классических UI-фреймворках вертикальный текст в шапках таблиц не является типовым поведением.
  2. Кроссплатформенность: Отрисовка повернутого текста в Тонком клиенте под Windows, Linux и в различных веб-браузерах (Web-клиент) требует сложной унификации алгоритмов расчета высоты строки и сглаживания шрифтов.
  3. Юзабилити: Существует мнение, что чтение вертикального текста замедляет восприятие информации пользователем, хотя в учетных системах (например, графиках смен или табелях) это зачастую единственный способ избежать бесконечного горизонтального скролла.

Таким образом, мы должны констатировать: стандартного свойства для поворота текста в заголовке колонки таблицы формы не существует.

Решение 1: Программная генерация картинок для шапки

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

Идея заключается в использовании невидимого объекта ТабличныйДокумент в качестве графического движка. Мы записываем в него нужный текст, поворачиваем его штатными средствами и преобразуем область ячеек в картинку.


// Пример функции для получения картинки с вертикальным текстом
Функция ПолучитьКартинкуЗаголовка(ТекстЗаголовка)
    
    ТабДок = Новый ТабличныйДокумент;
    Область = ТабДок.Область(1, 1);
    Область.Текст = ТекстЗаголовка;
    
    // Устанавливаем вертикальную ориентацию (90 градусов)
    Область.ОриентацияТекста = 90;
    
    // Настраиваем шрифт и выравнивание для красоты
    Область.Шрифт = Новый Шрифт("Arial", 10);
    Область.АвтоВысотаСтроки = Истина;
    Область.ШиринаКолонки = 5; // Узкая колонка
    
    // Получаем картинку из области
    Картинка = ТабДок.ПолучитьКартинку(ТабДок.Область(1, 1, 1, 1));
    Возврат Картинка;
    
КонецФункции

После получения картинки ее можно назначить свойству КартинкаШапки соответствующего элемента формы. Однако у этого метода есть существенные недостатки:

Решение 2: Использование Поля HTML-документа

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

Рассмотрим пример CSS-свойства, которое позволяет добиться нужного эффекта в заголовках <th>:


/* CSS для вертикального текста */
.vertical-header {
    writing-mode: vertical-rl;
    transform: rotate(180deg);
    white-space: nowrap;
    padding: 10px;
    text-align: center;
}

Разберем плюсы и минусы данного подхода:

  1. Плюсы: Идеальный внешний вид, возможность использования любых шрифтов, полная поддержка браузерами в веб-клиенте.
  2. Минусы: Вы теряете все стандартные "фишки" 1С. Сортировку по клику, условное оформление, контекстное меню и поиск придется реализовывать самостоятельно на языке JavaScript и через обработку событий ПриНажатии в 1С.

Решение 3: Проектирование интерфейса через группы колонок

Если вышеописанные методы кажутся слишком радикальными ("БДСМ-развлечениями", как выразился автор темы), рассмотрим стандартные приемы компоновки UI, которые помогают решить проблему нехватки места:

1. Использование иерархии групп колонок. Мы можем объединить несколько узких колонок под одним общим заголовком. Для самих узких колонок можно использовать короткие аббревиатуры или индексы (1, 2, 3...), а полную расшифровку выводить в подсказке (свойство Подсказка) или в отдельной информационной надписи под таблицей.

2. Свойство "Автомаксимальная ширина". Установите для колонок минимально возможную ширину и включите РастягиватьПоГоризонтали = Ложь. Это позволит максимально плотно упаковать данные.

3. Использование перечислений с картинками. Если колонки содержат логические значения (Да/Нет), вместо текста в заголовке можно использовать иконки, которые интуитивно понятны пользователю и занимают гораздо меньше места.

Выводы и рекомендации

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

Если вам критически важно иметь именно вертикальный текст в интерактивной форме, и вы готовы пожертвовать типовым функционалом 1С (сортировки, отборы), то ваш выбор — Поле HTML-документа. Это обеспечит наиболее профессиональный визуальный результат.

Если же задача стоит в рамках типовой конфигурации и требует минимальных затрат, мы рекомендуем пересмотреть дизайн формы. Использование групп колонок в сочетании с краткими заголовками и подробными подсказками — это "путь наименьшего сопротивления", который сохранит стабильность системы и будет понятен пользователям. Платформа 1С развивается, и, возможно, в будущих версиях 8.3.x или 1С:Элемент мы увидим долгожданный флаг ориентации текста, но на данный момент разработчикам приходится полагаться на свою смекалку и знание альтернативных технологий.

← На главную