При разработке печатных форм или сложных аналитических отчетов в среде 1С:Предприятие 8.3 программисты часто сталкиваются с эстетической и функциональной задачей: необходимо выделить часть текста в ячейке жирным шрифтом, оставив остальную часть обычной. Например, это требуется для оформления договоров, где жирным выделяются ключевые реквизиты, или в товарных накладных для акцентирования внимания на артикулах. А для ускорения ввода данных в 1С:Бухгалтерии 3.0 можно автоматизировать создание договоров и счетов напрямую по письмам с заказами.
К сожалению, на уровне встроенного объекта ТабличныйДокумент платформа имеет жесткое ограничение: оформление (шрифт, цвет, жирность) задается целиком для всего объекта ОбластьЯчеекТабличногоДокумента. Мы не можем программно обратиться к отдельным символам внутри строки ячейки и изменить их начертание. Однако в сообществе 1С накоплено немало «хитростей» и обходных путей. Давайте подробно разберем каждый из них, проанализируем их плюсы и минусы, и выберем оптимальное решение для вашей задачи.
Это самый стабильный и рекомендуемый метод, если структура вашего отчета позволяет манипулировать сеткой макета. Суть заключается в том, чтобы визуально «склеить» несколько колонок в одну.
Рассмотрим по шагам, как это реализовать:
Проанализируем ситуацию: визуально пользователь увидит единую строку с разным форматированием. Но помните, что если текст в первой части будет слишком длинным, он может «наехать» на вторую часть или обрезаться. Этот метод идеален для фиксированных заголовков типа "Дата: 01.01.2024".
Если нам нужно разместить форматированный текст в произвольном месте документа, где сетка ячеек не позволяет выполнить разбиение, мы можем воспользоваться объектом РисунокТабличногоДокумента с типом Текст.
Разберем этот процесс подробнее:
В табличном документе можно разместить текстовое поле поверх основной сетки. Хотя встроенное текстовое поле также ограничено одним шрифтом, мы можем создать несколько таких полей и расположить их вплотную друг к другу. Однако есть более продвинутый вариант — программная генерация картинки с текстом.
// Пример добавления текстового рисунка в табличный документ
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
Рисунок.Верх = 10;
Рисунок.Лево = 10;
Рисунок.Ширина = 50;
Рисунок.Высота = 5;
Рисунок.Текст = "Жирный текст";
Рисунок.Шрифт = Новый Шрифт(Рисунок.Шрифт, , , Истина); // Устанавливаем жирный
Главный риск здесь заключается в том, что при печати на разных принтерах или сохранении в PDF графические объекты могут незначительно смещаться (сообщение №7 на форуме подтверждает этот риск). Текст внутри такого поля также не всегда корректно ищется стандартным поиском 1С.
Если ваша задача — не печатная форма, а отображение данных в управляемой форме, забудьте про табличный документ и используйте ПолеHTMLДокумента. HTML позволяет творить любые чудеса с версткой.
Выясним причину популярности этого метода: он поддерживает стандартные теги <b> и <strong>. Вы можете сформировать строку следующим образом:
ТекстДляВывода = "<html><body>Это обычный текст, а это <b>жирный текст</b></body></html>";
ЭтаФорма.ПолеHTML = ТекстДляВывода;
Пользователь увидит идеально отформатированный текст. Минус здесь один: распечатать содержимое HTML-поля стандартными средствами 1С вместе с остальным отчетом крайне затруднительно.
Это экзотический, но рабочий метод для латинских символов и цифр. В стандарте Unicode существуют специальные блоки символов, которые выглядят как жирные, но технически являются другими кодами символов.
Рассмотрим пример: вместо символа "A" (U+0041) используется символ "𝐀" (U+1D400). Для платформы 1С это обычная строка, и она отобразит её в ячейке как «жирную», даже если шрифт ячейки установлен как обычный.
Важные нюансы:
Как упоминалось в сообщении №5, существует метод создания специального шрифта, где, например, заглавные буквы прорисованы как жирные, а строчные — как обычные. Это требует установки данного шрифта на все клиентские компьютеры, что в современных реалиях поддержки парка машин практически невозможно. Однако в закрытых корпоративных сетях это может стать «спасительным кругом».
Многие начинающие разработчики пытаются использовать объект ФорматированнаяСтрока. Давайте проанализируем, почему это не работает в отчетах. ФорматированнаяСтрока — это специальный тип данных 1С, который понимает оформление, но его поддерживают только элементы формы типа "Декорация" или окна сообщений.
Если вы попробуете выполнить код:
Область = Макет.ПолучитьОбласть("Строка");
ТекстЖирный = Новый ФорматированнаяСтрока("Жирный", Новый Шрифт(,,Истина));
Область.Параметры.Ячейка = ТекстЖирный; // Произойдет неявное приведение к типу Строка
Платформа принудительно преобразует объект в обычную строку "Жирный", и всё оформление будет безвозвратно утеряно. На текущих версиях платформы (8.3.24+) поддержка ФорматированнаяСтрока в ячейках табличного документа так и не реализована.
Если итогом вашей работы должен быть файл, а не просмотр на экране в 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С для контроля точности результата.