Как вывести надстрочный или подстрочный символ в макете 1С

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

При разработке печатных форм в 1С:Предприятие часто возникает задача отображения математических степеней, химических формул или сносок. В отличие от текстовых процессоров вроде Microsoft Word, табличный документ 1С не имеет прямой кнопки "сделать текст надстрочным". Однако существует несколько профессиональных способов добиться нужного визуального результата. В этой статье мы подробно разберем все доступные методы — от использования спецсимволов Unicode до программного управления графическими объектами. В качестве основы для создания собственных печатных бланков можно использовать шаблон внешней печатной формы на базе БСП.

Метод 1: Использование специальных символов Unicode

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

Для вывода надстрочных цифр (степеней) мы можем использовать следующие коды. Обратите внимание, что коды для цифр 1, 2 и 3 отличаются от остальных, так как они находятся в другом блоке Unicode:


// Пример формирования строки со степенью
ТекстСтепень = "Метры кубические (м" + Символ(179) + ")"; // Результат: м³
ТекстКвадрат = "Площадь (м" + Символ(178) + ")"; // Результат: м²

Для удобства работы составим таблицу соответствия для всех цифр верхнего регистра (надстрочных):

  1. Цифра 0: Символ(8304)
  2. Цифра 1: Символ(185)
  3. Цифра 2: Символ(178)
  4. Цифра 3: Символ(179)
  5. Цифра 4: Символ(8308)
  6. Цифра 5: Символ(8309)
  7. Цифра 6: Символ(8310)
  8. Цифра 7: Символ(8311)
  9. Цифра 8: Символ(8312)
  10. Цифра 9: Символ(8313)

Если же нам необходимо вывести подстрочные знаки (например, для химических формул типа H₂O), мы воспользуемся другим диапазоном Unicode:


// Пример формирования химической формулы
ФормулаВоды = "H" + Символ(8322) + "O"; // Результат: H₂O

Коды для подстрочных цифр (от 0 до 9) идут последовательно в диапазоне от Символ(8320) до Символ(8329). Проанализируем ситуацию с буквами: к сожалению, в стандартных шрифтах (Arial, Times New Roman) полноценный кириллический алфавит в виде индексов отсутствует, но латинские буквы доступны (например, Символ(8319) выведет маленькую "n").

Метод 2: Настройка свойств ячейки в макете

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

  1. Разделение ячеек: Разбейте одну колонку на две или используйте соседние ячейки. В одной ячейке пишется основной текст, в другой — индекс.
  2. Уменьшение шрифта: Для ячейки с индексом установите размер шрифта значительно меньше основного (например, 6 или 7 кегль при основном 10).
  3. Вертикальное выравнивание: Для надстрочного индекса установите в свойствах ячейки «Вертикальное положение» в значение Верх. Для подстрочного — в значение Низ.

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

Метод 3: Использование графических объектов (Рисунков)

Этот метод считается наиболее гибким, когда нужно разместить индекс в произвольном месте над текстом. Мы можем программно добавить объект типа «Текст» поверх сформированного табличного документа.

Разберем алгоритм реализации:

  1. В макете создаем область, где будет располагаться основной текст.
  2. Программно находим координаты нужной ячейки после вывода области.
  3. Добавляем в коллекцию Рисунки новый элемент типа ТипРисункаТабличногоДокумента.Текст.

Пример программного кода для добавления индекса:


Область = Макет.ПолучитьОбласть("Заголовок");
ТабДок.Вывести(Область);

// Добавляем индекс в виде рисунка
Индекс = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
Индекс.Текст = "1";
Индекс.Шрифт = Новый Шрифт(ТабДок.ТекущаяОбласть.Шрифт, , 7);
Индекс.ГраницаСверху = Ложь;
Индекс.ГраницаСнизу = Ложь;
Индекс.ГраницаСлева = Ложь;
Индекс.ГраницаСправа = Ложь;
// Устанавливаем положение (точные координаты подбираются опытным путем)
Индекс.Расположить(ТабДок.Область("R1C1")); 

Важный нюанс: У объекта «Рисунок» обязательно нужно установить прозрачный фон, чтобы он не перекрывал основной текст ячейки.

Метод 4: HTML-текст в ячейках (для современных платформ)

Начиная с современных версий платформы 8.3, в свойствах ячейки табличного документа появилась возможность интерпретации HTML. Это самый "чистый" способ с точки зрения верстки, аналогичный работе в веб-браузере.

Проанализируем, как это включить:

  1. В конфигураторе откройте свойства нужной ячейки макета.
  2. Найдите свойство Содержащий HTML и установите флаг.
  3. В качестве значения ячейки (или параметра) передайте строку с HTML-тегами.

Пример строки для передачи в параметр:

ПараметрЗначение = "Объем выручки составляет 100 м<sup>3</sup>";

Здесь тег <sup> отвечает за верхний индекс (superscript), а тег <sub> — за нижний (subscript). При выводе на печать 1С автоматически преобразует эти теги в корректно отформатированный текст. Это избавляет программиста от необходимости подбирать Unicode-коды или рисовать прозрачные блоки.

Метод 5: Выбор специализированного шрифта

Иногда проблему можно решить на уровне системных шрифтов. Существуют шрифты (например, @Arial Unicode MS), которые содержат более широкую таблицу символов. Если в ячейке установлен такой шрифт, вы можете просто скопировать нужный надстрочный символ из "Таблицы символов" Windows и вставить его прямо в текст макета в конфигураторе.

Рассмотрим, как это сделать быстро:

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

Заключение и рекомендации

Выбор метода зависит от сложности вашей задачи. Если вам нужны только простые степени (квадрат, куб) или стандартные цифры — используйте Метод 1 (Unicode), так как он самый производительный и не портит верстку макета. Если ваша платформа позволяет использовать HTML-содержимое в ячейках — Метод 4 будет самым современным и гибким решением. В случаях, когда требуется сложная математическая верстка с дробными индексами, наиболее надежным остается Метод 3 с использованием прозрачных текстовых рисунков.

← На главную