Можно ли изменить жирность части текста в одной ячейке макета 1С?

Программист IT и автоматизация бизнеса
← На главную

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

В этой статье мы подробно разберем, как обстоят дела с решением этой задачи на сегодняшний день. Мы изучим современный штатный механизм, появившийся в последних версиях платформы, а также детально проанализируем классические обходные пути («костыли»), которые выручат вас, если вы вынуждены работать на старых релизах или в режиме совместимости.

Современное штатное решение (для платформы 1С 8.3.24 и выше)

Начнем с отличных новостей. Начиная с версии платформы 8.3.24, разработчики 1С добавили полноценную встроенную поддержку объекта ФорматированнаяСтрока в ячейках и рисунках табличного документа.

Если ваша конфигурация работает на актуальной платформе и режим совместимости установлен в значение 8.3.24 или выше, вам больше не нужно изобретать сложные обходные пути. Теперь разнородное форматирование текста внутри одной ячейки доступно «из коробки».

Рассмотрим, как применить это решение на практике:

  1. Интерактивная настройка в Конфигураторе: Вы можете выделить часть текста жирным шрифтом непосредственно при редактировании макета. Для этого перейдите в режим редактирования ячейки, выделите нужный фрагмент текста мышью и примените к нему полужирное начертание через панель инструментов или свойства шрифта. Платформа автоматически преобразует содержимое ячейки в формат форматированной строки.
  2. Программное заполнение макета: Если текст формируется динамически, вы можете собрать его из частей и передать в параметр ячейки объект ФорматированнаяСтрока.

Давайте разберем пример программного вывода текста с выделением ключевого слова жирным шрифтом:


// Создаем массив для частей нашей будущей форматированной строки
МассивЧастей = Новый Массив;

// Добавляем обычный текст
МассивЧастей.Добавить("Уважаемый ");

// Создаем шрифт с установленным признаком "Полужирный"
ШрифтВыделения = Новый Шрифт(,, Истина); 

// Создаем форматированную часть текста (ФИО) с жирным шрифтом и синим цветом для наглядности
ВыделенныйТекст = Новый ФорматированнаяСтрока("Иванов Иван Иванович", ШрифтВыделения, WebЦвета.Синий);
МассивЧастей.Добавить(ВыделенныйТекст);

// Добавляем финальную часть обычного текста
МассивЧастей.Добавить(", уведомляем Вас о необходимости погасить задолженность.");

// Объединяем все части в одну форматированную строку
ИтоговаяСтрока = Новый ФорматированнаяСтрока(МассивЧастей);

// Заполняем параметр в области табличного документа
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаДанных");
ОбластьМакета.Параметры.ТекстПретензии = ИтоговаяСтрока;
ТабличныйДокумент.Вывести(ОбластьМакета);

Важное ограничение: Если вы попытаетесь вывести объект ФорматированнаяСтрока в базу данных или макет при включенном режиме совместимости ниже 8.3.24, система автоматически преобразует этот объект в обычную строку. При этом все оформление, включая жирность и цвет отдельных слов, будет безвозвратно утеряно. В таком случае придется использовать один из альтернативных методов.

Развитие технологии в версии 1С 8.3.27 (для отчетов СКД)

В более свежей версии платформы 8.3.27 возможности форматированных строк вышли на новый уровень. Теперь этот механизм поддерживается непосредственно в Системе компоновки данных (СКД):


Обходные пути для старых версий платформ и режимов совместимости

Что делать, если ваша база работает в режиме совместимости (например, со старыми версиями УПП или старыми релизами ERP) и перейти на версию 8.3.24 невозможно? Проанализируем самые популярные и жизнеспособные методы обхода ограничений.

Метод 1. Наложение графического рисунка типа «Текст» поверх ячейки

Этот прием пришел к нам еще со времен платформы 1С 7.7. Он часто применяется, когда нужно сымитировать подпись на документе или выделить конкретное слово поверх стандартного макета.

Суть метода по шагам:

  1. В макете поверх нужной ячейки создается графический объект рисунка. Для этого перейдите в меню Таблица -> Рисунки -> Текст.
  2. В свойствах созданного рисунка установите признак УзорЦвет в значение «Без цвета» (чтобы сделать его полностью прозрачным).
  3. Для самого рисунка задайте требуемый шрифт (например, Arial, 10pt, Полужирный).
  4. Поместите этот рисунок точно поверх той части ячейки, где должен находиться выделенный текст. В саму ячейку запишите остальную часть текста, оставив пробелами пустое место под накладываемый рисунок.

Недостатки метода: Этот способ крайне нестабилен в эксплуатации. Стоит пользователю изменить масштаб отображения документа на экране, отправить форму на печать на другой принтер или сохранить документ в формате PDF — текст на рисунке неизбежно сместится относительно базовой ячейки. В результате текст может либо наложиться друг на друга, либо разъехаться с образованием огромных пустых промежутков.

Метод 2. Использование специального «самодельного» шрифта (хак со шрифтами)

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

Принцип работы:

Берется бесплатный стандартный шрифт (например, Liberation Serif) и открывается в специальном редакторе шрифтов (например, FontForge). В этом шрифте находят неиспользуемые символы расширенной латиницы с диакритическими знаками (например, буквы вроде À, Á, Â, Ã) и заменяют их внутреннее графическое представление (глифы) на символы русской кириллицы, но отрисованные в полужирном начертании.

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

Пример схемы замены в коде:


Функция ПреобразоватьВЖирныйКириллический(ВходнаяСтрока)
    // Строим таблицу соответствия обычных русских букв спецсимволам измененного шрифта
    ТаблицаСоответствия = Новый Соответствие;
    ТаблицаСоответствия.Вставить("А", "À");
    ТаблицаСоответствия.Вставить("Б", "Á");
    ТаблицаСоответствия.Вставить("В", "Â");
    // ... и так далее для всего алфавита
    
    Результат = "";
    Для Индекс = 1 По СтрДлина(ВходнаяСтрока) Цикл
        Символ = Сред(ВходнаяСтрока, Индекс, 1);
        СпецСимвол = ТаблицаСоответствия.Получить(Символ);
        Если СпецСимвол <> Неопределено Тогда
            Результат = Результат + СпецСимвол;
        Иначе
            Результат = Результат + Символ;
        КонецЕсли;
    КонецЦикла;
    
    Возврат Результат;
КонецФункции

Недостатки метода:

Метод 3. Динамическое разделение текста по нескольким ячейкам

Самый простой и надежный с точки зрения стабильности вывода метод — разбиение одной логической строки на несколько физических ячеек табличного документа.

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

Недостатки метода: Этот способ отлично работает только для коротких однострочных записей. Если ваш текст занимает несколько строк и должен переноситься по словам, данный подход неприменим. Автоматический перенос длинного текста по словам внутри разрозненных ячеек настроить невозможно — текст получится «рваным» и некрасивым.

Метод 4. Переход на шаблоны документов HTML или MS Word (ActiveDocument)

Если требования заказчика к оформлению печатной формы жесткие, а версия платформы не позволяет использовать ФорматированнаяСтрока, лучшим решением будет полный отказ от классического табличного документа mxl.

Вместо этого мы рекомендуем использовать альтернативные макеты:

Подводя итог, можно сказать: эпоха неудобных «костылей» уходит в прошлое. Переход на современную платформу версии 8.3.24+ полностью закрывает эту старую проблему, позволяя разработчикам легко и красиво форматировать текст любой сложности с помощью штатных объектов встроенного языка 1С.

← На главную