При разработке интерфейсов или печатных форм в 1С программисты часто сталкиваются с задачей: вывести длинную строку текста, в которой только одно слово или значение переменной должно быть выделено жирным шрифтом. Обычная конкатенация строк через оператор + здесь не поможет, так как стандартная переменная типа Строка не содержит информации об оформлении — она хранит только символы.
В этой статье мы подробно разберем, как обойти это ограничение, проанализируем различные механизмы платформы 1С 8.3 и выясним, какой способ лучше всего подходит для управляемых форм и табличных документов.
Рассмотрим ситуацию, описанную в вопросе. Автор пытается собрать строку следующим образом:
FIO = "Иванов Иван Иванович";
TekstZapolneniy = "" + FIO + " -" + RabotnikDolgnost + "(таб. № " + NomerTabely + ");
В данном случае переменная TekstZapolneniy — это примитивный тип данных Строка. В 1С оформление (цвет, шрифт, начертание) — это свойство не самой строки, а того элемента управления, который эту строку отображает (например, Поле ввода или Ячейка таблицы). Если мы установим свойство шрифта "Жирный" для ячейки, то жирным станет весь текст внутри нее.
Чтобы выделить только часть текста, нам нужно использовать специальные объекты-контейнеры, которые умеют хранить внутри себя фрагменты с разным оформлением.
Это самый современный и рекомендуемый метод для управляемых форм 1С 8.3. Объект ФорматированнаяСтрока позволяет собрать текст из нескольких фрагментов, каждому из которых можно назначить свой шрифт или цвет. При необходимости можно изучить материал о преобразовании произвольного текста в форматированную строку с помощью форматированного документа.
Давайте разберем по шагам, как это реализовать программно:
Посмотрим на пример кода:
// 1. Создаем шрифт: (ИмяШрифта, Размер, Жирный, Наклонный)
ЖирныйШрифт = Новый Шрифт(,, Истина);
// 2. Формируем массив фрагментов
МассивРезультат = Новый Массив;
МассивРезультат.Добавить(Новый ФорматированнаяСтрока(FIO, ЖирныйШрифт));
МассивРезультат.Добавить(" - " + RabotnikDolgnost + " (таб. № " + NomerTabely + ")");
// 3. Создаем итоговую форматированную строку
ИтоговаяСтрока = Новый ФорматированнаяСтрока(МассивРезультат);
// 4. Присваиваем результат реквизиту формы, который выведен как "Поле надписи"
Элементы.ДекорацияТекст.Заголовок = ИтоговаяСтрока;
Важное примечание: Чтобы этот текст отобразился корректно на форме, используйте элемент типа Декорация (вид — Надпись). Обычные поля ввода не всегда корректно поддерживают отображение ФорматированнаяСтрока.
Если задача стоит в выделении текста внутри ячейки печатной формы, у нас есть два пути. Рассмотрим их подробнее.
Вариант А: Использование шаблона (ограниченный способ).
В свойствах ячейки табличного документа можно установить тип Шаблон. Если написать в ячейке [FIO] - [RabotnikDolgnost], 1С подставит значения. Однако программно сделать жирным только [FIO] внутри одной ячейки через свойства шаблона невозможно.
Вариант Б: Программное заполнение через ФорматированнуюСтроку.
Мы можем программно передать в ячейку объект, созданный в первом способе. Это единственный путь сохранить разное форматирование в рамках одной клетки таблицы.
Проанализируем пример для печатной формы:
Область = Макет.ПолучитьОбласть("Строка");
Ячейка = Область.Области.ТекстИнформации;
// Формируем оформленный текст
Жирный = Новый Шрифт(,, Истина);
ТекстДляЯчейки = Новый ФорматированнаяСтрока(FIO, Жирный, , " - " + Должность);
// Устанавливаем значение в ячейку
Ячейка.СодержитЗначение = Ложь; // Убеждаемся, что тип - текст
Ячейка.Текст = ТекстДляЯчейки;
ТабДок.Вывести(Область);
Если вам требуется очень сложное форматирование (разные цвета, шрифты, гиперссылки в одном блоке), выясним, как это сделать через HTML. Этот метод упоминался в дискуссии на форуме как один из самых гибких.
Разберем алгоритм настройки:
Строка (неограниченной длины).Поле HTML-документа.<b> для жирности.Пример формирования текста:
ТекстHTML = "<html><body>";
ТекстHTML = ТекстHTML + "<b>" + FIO + "</b>"; // Жирный текст
ТекстHTML = ТекстHTML + " - " + RabotnikDolgnost;
ТекстHTML = ТекстHTML + "</body></html>";
РеквизитТекстНаФорме = ТекстHTML;
Этот способ идеален, если текст должен выглядеть как динамическая справка или сложная пояснительная надпись. Чтобы упростить подготовку такой разметки без ручного набора кода, можно использовать редактор форматированного HTML-текста для управляемых форм.
Рассмотрим ситуацию, если вы работаете в устаревших конфигурациях. Там объект ФорматированнаяСтрока отсутствует. В таких случаях программисты применяли "хитрости":
FIO, во второй (обычный шрифт) — остальной текст.ActiveX (например, Rich Text), но это требовало наличия установленных библиотек Windows на каждом компьютере пользователя.Подведем итог: Для современных конфигураций на платформе 8.3 лучшим выбором будет использование ФорматированнаяСтрока. Она поддерживается как в интерфейсе пользователя, так и при формировании печатных форм, обеспечивая чистоту кода и высокую производительность.