Почему жирный текст в ДеревеЗначений смещается вправо и как это исправить?

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

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

Суть проблемы

Рассмотрим ситуацию, с которой столкнулись разработчики. Имеется ДеревоЗначений с колонкой "Комментарий". В соответствии с техническим заданием, определенные строки должны выделяться жирным шрифтом. Для реализации этого требования используется стандартный механизм платформы — Условное оформление.

Мы наблюдаем следующее поведение:

  1. Если текст в ячейке обычный (не жирный), он отображается корректно, с нормальным выравниванием.
  2. Если срабатывает условие и к тексту применяется Жирный шрифт, текст в этой же колонке начинается не с начала ячейки, а с заметным отступом вправо.

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

Анализ причин: шрифт и системные настройки

В ходе анализа выяснилось, что главной причиной такого поведения является тип используемого шрифта в настройках оформления. Платформа 1С тесно взаимодействует с графической подсистемой операционной системы (Windows).

Когда мы выбираем шрифт для элемента формы или условного оформления, у нас есть несколько вариантов:

Проблема со смещением текста ("прыгающий" отступ) чаще всего возникает именно при использовании Системного шрифта в сочетании с жирным начертанием.

Это происходит из-за особенностей рендеринга (отрисовки) интерфейса:

  1. Масштабирование (DPI): Если в операционной системе пользователя установлен масштаб экрана отличный от 100% (например, 125% или 150%), метрики системного шрифта изменяются.
  2. Расчет границ: При применении жирного начертания символы становятся шире. Если используется системный шрифт с нестандартным масштабированием, платформа может некорректно рассчитать область начала текста внутри ячейки ДеревоЗначений.
  3. Особенности Дерева: В отличие от ТаблицаЗначений, в дереве всегда резервируется место под иерархию (значки «плюс/минус»), даже если колонка не первая. Некорректный шрифт может заставить платформу ошибочно увеличить этот отступ.

Решение проблемы

Чтобы исправить некорректное отображение, необходимо изменить настройки шрифта в конфигураторе. Давайте рассмотрим пошаговый алгоритм действий.

Основное решение заключается в отказе от использования "Системного шрифта" в явном виде и переходе на шрифты стилей конфигурации или стандартные Windows-шрифты.

1. Проверка Условного оформления формы

Если вы настраиваете выделение через свойства формы, выполните следующие действия:

  1. Откройте форму в Конфигураторе.
  2. Перейдите на вкладку Условное оформление (внизу редактора формы).
  3. Найдите элемент оформления, который отвечает за установку жирного шрифта.
  4. В колонке "Оформление" найдите параметр Шрифт.
  5. Убедитесь, что там выбран не "Системный шрифт", а, например, Шрифт стиля: Шрифт текста или явно задан Arial.

2. Программная настройка оформления

Если условное оформление создается программно при создании формы, убедитесь, что вы правильно инициализируете объект Шрифт. Рассмотрим пример правильного кода.

Неправильный подход (который может вызвать ошибку, если полагаться на системные настройки по умолчанию в некоторых контекстах):


// Пример, который может вести себя непредсказуемо в зависимости от ОС
ЭлементОформления.Оформление.Шрифт.Значение = Новый Шрифт(,,Истина); 

Более надежный подход — использование шрифтов стиля:


// Создаем новый элемент условного оформления
Элемент = УсловноеОформление.Элементы.Добавить();

// Задаем оформляемые поля
ПолеОформления = Элемент.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ДеревоКомментарий");

// Устанавливаем отбор (условие)
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дерево.ЭтоВажнаяСтрока");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.ПравоеЗначение = Истина;

// Устанавливаем шрифт. 
// Важно: берем стандартный шрифт диалогов и делаем его жирным,
// вместо использования абстрактного системного шрифта.
СтандартныйШрифт = ШрифтыСтиля.ШрифтТекста;
ЖирныйШрифт = Новый Шрифт(СтандартныйШрифт, , , Истина); // Истина - это признак жирности

Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ЖирныйШрифт);

Дополнительные факторы: Иерархия и ширина колонок

Помимо шрифта, стоит учитывать еще один нюанс, связанный с природой объекта ДеревоЗначений.

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

Если смена шрифта не помогла полностью, обратите внимание на следующие настройки колонок в Конфигураторе:

  1. Ширина колонки: Если у колонки свойство ИзменениеРазмера установлено в Изменять, а ширина задана как 0 (авто), попробуйте задать фиксированную минимальную ширину. При жирном шрифте текст становится шире, и платформа может "дергать" границы ячейки при перерисовке.
  2. Положение в дереве: Помните, что первая колонка дерева всегда содержит отступ иерархии. Если ваш "Комментарий" является первой видимой колонкой, отступ неизбежен. Однако, если это не первая колонка, а отступ появляется только при жирном шрифте — возвращаемся к решению со сменой типа шрифта.

Резюме

Проблема "прыгающего" текста при выделении жирным в ДеревоЗначений носит визуальный характер и связана с конфликтом метрик системного шрифта Windows и алгоритмов отрисовки платформы 1С.

Для исправления ситуации:

  1. Измените настройки условного оформления.
  2. Вместо системного шрифта используйте Шрифт стиля или конкретный шрифт (например, Arial).
  3. Это стабилизирует расчет ширины символов и устранит паразитный отступ слева.

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

← На главную