При разработке печатных форм в 1С:Предприятие часто возникает задача отображения математических степеней, химических формул или сносок. В отличие от текстовых процессоров вроде Microsoft Word, табличный документ 1С не имеет прямой кнопки "сделать текст надстрочным". Однако существует несколько профессиональных способов добиться нужного визуального результата. В этой статье мы подробно разберем все доступные методы — от использования спецсимволов Unicode до программного управления графическими объектами. В качестве основы для создания собственных печатных бланков можно использовать шаблон внешней печатной формы на базе БСП.
Самый простой и эффективный способ, не требующий изменения структуры макета, — это использование встроенной функции Символ(). В стандарте Unicode зарезервированы специальные коды для цифр и некоторых букв, которые изначально отрисовываются как индексы. Давайте рассмотрим, как это реализовать программно.
Для вывода надстрочных цифр (степеней) мы можем использовать следующие коды. Обратите внимание, что коды для цифр 1, 2 и 3 отличаются от остальных, так как они находятся в другом блоке Unicode:
// Пример формирования строки со степенью
ТекстСтепень = "Метры кубические (м" + Символ(179) + ")"; // Результат: м³
ТекстКвадрат = "Площадь (м" + Символ(178) + ")"; // Результат: м²
Для удобства работы составим таблицу соответствия для всех цифр верхнего регистра (надстрочных):
Символ(8304)Символ(185)Символ(178)Символ(179)Символ(8308)Символ(8309)Символ(8310)Символ(8311)Символ(8312)Символ(8313)Если же нам необходимо вывести подстрочные знаки (например, для химических формул типа H₂O), мы воспользуемся другим диапазоном Unicode:
// Пример формирования химической формулы
ФормулаВоды = "H" + Символ(8322) + "O"; // Результат: H₂O
Коды для подстрочных цифр (от 0 до 9) идут последовательно в диапазоне от Символ(8320) до Символ(8329). Проанализируем ситуацию с буквами: к сожалению, в стандартных шрифтах (Arial, Times New Roman) полноценный кириллический алфавит в виде индексов отсутствует, но латинские буквы доступны (например, Символ(8319) выведет маленькую "n").
Если использование Unicode невозможно (например, нужен специфический символ, которого нет в таблице), мы можем прибегнуть к визуальному форматированию макета. Рассмотрим этот метод по шагам:
Верх. Для подстрочного — в значение Низ.Этот способ надежен, но требует кропотливой настройки сетки макета, чтобы визуально текст казался единым целым. Важно следить за свойством РазмещениеТекста, чтобы текст не обрезался при печати. Для освоения пользовательской настройки макетов в типовых конфигурациях пригодится инструкция по редактированию печатных форм в программах 1С.
Этот метод считается наиболее гибким, когда нужно разместить индекс в произвольном месте над текстом. Мы можем программно добавить объект типа «Текст» поверх сформированного табличного документа.
Разберем алгоритм реализации:
Рисунки новый элемент типа ТипРисункаТабличногоДокумента.Текст.Пример программного кода для добавления индекса:
Область = Макет.ПолучитьОбласть("Заголовок");
ТабДок.Вывести(Область);
// Добавляем индекс в виде рисунка
Индекс = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
Индекс.Текст = "1";
Индекс.Шрифт = Новый Шрифт(ТабДок.ТекущаяОбласть.Шрифт, , 7);
Индекс.ГраницаСверху = Ложь;
Индекс.ГраницаСнизу = Ложь;
Индекс.ГраницаСлева = Ложь;
Индекс.ГраницаСправа = Ложь;
// Устанавливаем положение (точные координаты подбираются опытным путем)
Индекс.Расположить(ТабДок.Область("R1C1"));
Важный нюанс: У объекта «Рисунок» обязательно нужно установить прозрачный фон, чтобы он не перекрывал основной текст ячейки.
Начиная с современных версий платформы 8.3, в свойствах ячейки табличного документа появилась возможность интерпретации HTML. Это самый "чистый" способ с точки зрения верстки, аналогичный работе в веб-браузере.
Проанализируем, как это включить:
Пример строки для передачи в параметр:
ПараметрЗначение = "Объем выручки составляет 100 м<sup>3</sup>";
Здесь тег <sup> отвечает за верхний индекс (superscript), а тег <sub> — за нижний (subscript). При выводе на печать 1С автоматически преобразует эти теги в корректно отформатированный текст. Это избавляет программиста от необходимости подбирать Unicode-коды или рисовать прозрачные блоки.
Иногда проблему можно решить на уровне системных шрифтов. Существуют шрифты (например, @Arial Unicode MS), которые содержат более широкую таблицу символов. Если в ячейке установлен такой шрифт, вы можете просто скопировать нужный надстрочный символ из "Таблицы символов" Windows и вставить его прямо в текст макета в конфигураторе.
Рассмотрим, как это сделать быстро:
Arial или Calibri.Внимание: При использовании этого метода убедитесь, что данный шрифт установлен на сервере 1С (если печать идет на стороне сервера) и на рабочих местах всех пользователей, иначе вместо индексов они увидят пустые квадраты.
Выбор метода зависит от сложности вашей задачи. Если вам нужны только простые степени (квадрат, куб) или стандартные цифры — используйте Метод 1 (Unicode), так как он самый производительный и не портит верстку макета. Если ваша платформа позволяет использовать HTML-содержимое в ячейках — Метод 4 будет самым современным и гибким решением. В случаях, когда требуется сложная математическая верстка с дробными индексами, наиболее надежным остается Метод 3 с использованием прозрачных текстовых рисунков.