При разработке интерфейсов на платформе 1С:Предприятие мы часто используем элемент формы ДеревоЗначений для отображения иерархических данных. Для улучшения читаемости информации нередко применяется механизм Условного оформления, который позволяет выделять важные строки или ячейки, например, делая шрифт жирным. Однако, в некоторых ситуациях это приводит к визуальным артефактам: текст в ячейке начинает отображаться с неестественным отступом (смещается вправо), ломая визуальную структуру таблицы. В этой статье мы подробно разберем, почему возникает такая проблема и как ее решить.
Рассмотрим ситуацию, с которой столкнулись разработчики. Имеется ДеревоЗначений с колонкой "Комментарий". В соответствии с техническим заданием, определенные строки должны выделяться жирным шрифтом. Для реализации этого требования используется стандартный механизм платформы — Условное оформление.
Мы наблюдаем следующее поведение:
Казалось бы, изменение начертания шрифта не должно влиять на положение текста внутри ячейки, но на практике это происходит. Давайте разберемся в причинах.
В ходе анализа выяснилось, что главной причиной такого поведения является тип используемого шрифта в настройках оформления. Платформа 1С тесно взаимодействует с графической подсистемой операционной системы (Windows).
Когда мы выбираем шрифт для элемента формы или условного оформления, у нас есть несколько вариантов:
Проблема со смещением текста ("прыгающий" отступ) чаще всего возникает именно при использовании Системного шрифта в сочетании с жирным начертанием.
Это происходит из-за особенностей рендеринга (отрисовки) интерфейса:
ДеревоЗначений.ТаблицаЗначений, в дереве всегда резервируется место под иерархию (значки «плюс/минус»), даже если колонка не первая. Некорректный шрифт может заставить платформу ошибочно увеличить этот отступ.Чтобы исправить некорректное отображение, необходимо изменить настройки шрифта в конфигураторе. Давайте рассмотрим пошаговый алгоритм действий.
Основное решение заключается в отказе от использования "Системного шрифта" в явном виде и переходе на шрифты стилей конфигурации или стандартные Windows-шрифты.
Если вы настраиваете выделение через свойства формы, выполните следующие действия:
Шрифт.Если условное оформление создается программно при создании формы, убедитесь, что вы правильно инициализируете объект Шрифт. Рассмотрим пример правильного кода.
Неправильный подход (который может вызвать ошибку, если полагаться на системные настройки по умолчанию в некоторых контекстах):
// Пример, который может вести себя непредсказуемо в зависимости от ОС
ЭлементОформления.Оформление.Шрифт.Значение = Новый Шрифт(,,Истина);
Более надежный подход — использование шрифтов стиля:
// Создаем новый элемент условного оформления
Элемент = УсловноеОформление.Элементы.Добавить();
// Задаем оформляемые поля
ПолеОформления = Элемент.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ДеревоКомментарий");
// Устанавливаем отбор (условие)
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дерево.ЭтоВажнаяСтрока");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.ПравоеЗначение = Истина;
// Устанавливаем шрифт.
// Важно: берем стандартный шрифт диалогов и делаем его жирным,
// вместо использования абстрактного системного шрифта.
СтандартныйШрифт = ШрифтыСтиля.ШрифтТекста;
ЖирныйШрифт = Новый Шрифт(СтандартныйШрифт, , , Истина); // Истина - это признак жирности
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ЖирныйШрифт);
Помимо шрифта, стоит учитывать еще один нюанс, связанный с природой объекта ДеревоЗначений.
В обсуждениях разработчики справедливо замечают, что "лист дерева не может располагаться раньше корней". Это означает, что визуальное смещение может быть попыткой платформы отрисовать иерархический отступ.
Если смена шрифта не помогла полностью, обратите внимание на следующие настройки колонок в Конфигураторе:
ИзменениеРазмера установлено в Изменять, а ширина задана как 0 (авто), попробуйте задать фиксированную минимальную ширину. При жирном шрифте текст становится шире, и платформа может "дергать" границы ячейки при перерисовке.Проблема "прыгающего" текста при выделении жирным в ДеревоЗначений носит визуальный характер и связана с конфликтом метрик системного шрифта Windows и алгоритмов отрисовки платформы 1С.
Для исправления ситуации:
Применяя эти рекомендации, вы обеспечите аккуратный и предсказуемый вид ваших интерфейсов независимо от настроек операционной системы пользователя.