При разработке интерфейсов управляемых форм часто возникает необходимость вывести информирующий текст, в котором отдельные ключевые показатели (суммы, даты, проценты скидок) должны выделяться жирным шрифтом или определенным цветом. Например: «Скидка: 15%, минимальная скидка: 10%».
Рассмотрим распространенное заблуждение: размещение отдельных элементов декорации в горизонтальной группе. Такой подход неприменим для динамических и длинных текстов, поскольку платформа 1С не умеет выполнять автоматический перенос слов (Word Wrap) с одной надписи на другую при изменении ширины формы. Разберем наиболее эффективные и правильные способы решения этой задачи.
Объект ФорматированнаяСтрока позволяет объединять фрагменты текста с разным оформлением в единое целое. Вопреки распространенному мнению, шрифт и цвет задаются не для всей строки целиком, а для каждого составного элемента отдельно.
Проанализируем программный пример формирования такой строки вручную через составной массив:
МассивФрагментов = Новый Массив;
МассивФрагментов.Добавить("Скидка: ");
МассивФрагментов.Добавить(Новый ФорматированнаяСтрока("15%", Новый Шрифт(,, Истина)));
МассивФрагментов.Добавить(", минимальная скидка: ");
МассивФрагментов.Добавить(Новый ФорматированнаяСтрока("10%", Новый Шрифт(,, Истина)));
РезультатСтрока = Новый ФорматированнаяСтрока(МассивФрагментов);
Элементы.НадписьСкидка.Заголовок = РезультатСтрока;
Если в конфигурации используется Библиотека Стандартных Подсистем (БСП), процесс можно существенно упростить. Выясним, как применить функцию СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(), которая автоматически преобразует простой HTML-подобный текст с тегами в объект ФорматированнаяСтрока:
ТекстСРазметкой = "Скидка: <b>15%</b>, минимальная скидка: <b>10%</b>";
Элементы.НадписьСкидка.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(ТекстСРазметкой);
Преимущества метода: Высокая скорость работы, отсутствие внешних зависимостей, нативная поддержка переноса строк платформой 1С.
Если текст имеет сложную структуру, содержит динамические таблицы или требует специфического выравнивания и стилей, целесообразно использовать элемент формы Поле браузера (вид Поле HTML).
Посмотрим на пример формирования содержимого для реквизита формы с типом Строка, связанного с полем HTML:
ТекстHTML = "
|<html>
|<head>
| <style>
| body { font-family: Arial, sans-serif; font-size: 12px; margin: 0; padding: 2px; }
| .bold-text { font-weight: bold; color: #000000; }
| </style>
|</head>
|<body>
| <span>Скидка: <span class='bold-text'>15%</span>, минимальная скидка: <span class='bold-text'>10%</span></span>
|</body>
|</html>";
РеквизитПолеHTML = ТекстHTML;
Особенности применения: При работе с Полем HTML важно учитывать накладные расходы платформы на инициализацию встроенного браузерного движка, а также заранее отключать ненужные полосы прокрутки и настраивать отступы через CSS-стили.
Для отображения и редактирования сложных форматированных текстов на форме также доступен реквизит с типом ФорматированныйДокумент и соответствующий ему элемент формы Поле форматированного документа. Этот объект позволяет программно менять параметры шрифта и цвета для определенных областей выделения.
Декорация для каждой части предложения крайне не рекомендуется из-за проблем с перепостроением интерфейса при переносе строк.