Как сделать жирный и нежирный текст в одной ячейке табличного документа 1С

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

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

К сожалению, на уровне встроенного объекта ТабличныйДокумент платформа имеет жесткое ограничение: оформление (шрифт, цвет, жирность) задается целиком для всего объекта ОбластьЯчеекТабличногоДокумента. Мы не можем программно обратиться к отдельным символам внутри строки ячейки и изменить их начертание. Однако в сообществе 1С накоплено немало «хитростей» и обходных путей. Давайте подробно разберем каждый из них, проанализируем их плюсы и минусы, и выберем оптимальное решение для вашей задачи.

Метод 1. Комбинирование ячеек (Псевдо-разрыв)

Это самый стабильный и рекомендуемый метод, если структура вашего отчета позволяет манипулировать сеткой макета. Суть заключается в том, чтобы визуально «склеить» несколько колонок в одну.

Рассмотрим по шагам, как это реализовать:

  1. В макете отчета создаем две соседние колонки вместо одной широкой.
  2. Для левой ячейки устанавливаем жирный шрифт и выравнивание по правому краю.
  3. Для правой ячейки устанавливаем обычный шрифт и выравнивание по левому краю.
  4. Убираем границу (сетку) между этими ячейками, выбрав стиль линии "Нет линии".
  5. В параметрах или тексте ячеек выводим соответствующие части фразы.

Проанализируем ситуацию: визуально пользователь увидит единую строку с разным форматированием. Но помните, что если текст в первой части будет слишком длинным, он может «наехать» на вторую часть или обрезаться. Этот метод идеален для фиксированных заголовков типа "Дата: 01.01.2024".

Метод 2. Использование графических объектов (Текстовые поля)

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

Разберем этот процесс подробнее:

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


// Пример добавления текстового рисунка в табличный документ
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
Рисунок.Верх = 10;
Рисунок.Лево = 10;
Рисунок.Ширина = 50;
Рисунок.Высота = 5;
Рисунок.Текст = "Жирный текст";
Рисунок.Шрифт = Новый Шрифт(Рисунок.Шрифт, , , Истина); // Устанавливаем жирный

Главный риск здесь заключается в том, что при печати на разных принтерах или сохранении в PDF графические объекты могут незначительно смещаться (сообщение №7 на форуме подтверждает этот риск). Текст внутри такого поля также не всегда корректно ищется стандартным поиском 1С.

Метод 3. Поле HTML-документа (Для экранных форм)

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

Выясним причину популярности этого метода: он поддерживает стандартные теги <b> и <strong>. Вы можете сформировать строку следующим образом:


ТекстДляВывода = "<html><body>Это обычный текст, а это <b>жирный текст</b></body></html>";
ЭтаФорма.ПолеHTML = ТекстДляВывода;

Пользователь увидит идеально отформатированный текст. Минус здесь один: распечатать содержимое HTML-поля стандартными средствами 1С вместе с остальным отчетом крайне затруднительно.

Метод 4. Математические символы Unicode (Имитация жирности)

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

Рассмотрим пример: вместо символа "A" (U+0041) используется символ "𝐀" (U+1D400). Для платформы 1С это обычная строка, и она отобразит её в ячейке как «жирную», даже если шрифт ячейки установлен как обычный.

Важные нюансы:

Метод 5. Использование спец-шрифтов

Как упоминалось в сообщении №5, существует метод создания специального шрифта, где, например, заглавные буквы прорисованы как жирные, а строчные — как обычные. Это требует установки данного шрифта на все клиентские компьютеры, что в современных реалиях поддержки парка машин практически невозможно. Однако в закрытых корпоративных сетях это может стать «спасительным кругом».

Метод 6. Форматированная строка и её ограничения

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

Если вы попробуете выполнить код:


Область = Макет.ПолучитьОбласть("Строка");
ТекстЖирный = Новый ФорматированнаяСтрока("Жирный", Новый Шрифт(,,Истина));
Область.Параметры.Ячейка = ТекстЖирный; // Произойдет неявное приведение к типу Строка

Платформа принудительно преобразует объект в обычную строку "Жирный", и всё оформление будет безвозвратно утеряно. На текущих версиях платформы (8.3.24+) поддержка ФорматированнаяСтрока в ячейках табличного документа так и не реализована.

Метод 7. Вывод в Excel через COM-соединение

Если итогом вашей работы должен быть файл, а не просмотр на экране в 1С, вы можете формировать документ напрямую в Excel. В объектной модели Excel есть возможность управлять шрифтом каждого отдельного символа.

Посмотрим на пример кода:


Эксель = Новый COMОбъект("Excel.Application");
Книга = Эксель.Workbooks.Add();
Лист = Книга.Sheets(1);
Ячейка = Лист.Cells(1, 1);
Ячейка.Value = "Обычный Жирный";
// Делаем слово "Жирный" (с 9-го символа, длиной 6) жирным
Ячейка.Characters(9, 6).Font.Bold = Истина;
Эксель.Visible = Истина;

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

Резюме

Мы проанализировали ситуацию и выяснили: штатного способа сделать текст жирным и нежирным в одной ячейке табличного документа 1С «в один клик» не существует. Наиболее практичным и надежным методом остается комбинирование ячеек (Метод 1) с невидимыми границами. Если же вам нужна абсолютная гибкость и отчет только для просмотра — используйте HTML (Метод 3). При подготовке аналитических отчетов на базе проводок можно автоматически сверять данные в базах 1С для контроля точности результата.

← На главную