Почему символ номера № переворачивается на 90 градусов в печатных формах 1С и как это исправить?

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

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

Анализируем ситуацию: симптомы и контекст

Рассмотрим типичный сценарий. Программист создает печатную форму «с нуля». В макете всё настроено стандартно, ориентация текста в ячейках установлена в значение 0. Однако при выводе на печать или в режиме предварительного просмотра символ № отображается некорректно, в то время как соседние знаки препинания (например, восклицательный знак !) сохраняют правильную ориентацию. Это сразу дает нам понять, что проблема не в свойстве ячейки ОриентацияТекста, так как оно действует на всё содержимое ячейки целиком.

Проанализируем технические условия, при которых возникает данная ошибка:

  1. Версия платформы: Чаще всего проблема проявляется на новых версиях платформы 1С (начиная с 8.3.20 и выше), где был обновлен механизм работы с форматированными строками и отрисовкой текста.
  2. Выбор шрифта: В макете используется шрифт, название которого начинается со специального символа @, например, @Arial Unicode MS.
  3. Региональные настройки: Проблема часто коррелирует с определенной локалью системы (украинской или русской), где символ номера имеет специфическую кодировку.

Выясняем техническую причину: секрет символа @

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

Шрифты с префиксом @ (например, @Microsoft Sans Serif) — это так называемые вертикальные версии шрифтов. Они разработаны специально для реализации вертикального письма, принятого в восточноазиатских языках (китайский, японский, корейский). Согласно спецификациям OpenType и стандартам Unicode, в таких шрифтах определенные знаки пунктуации и специальные символы должны автоматически поворачиваться на 90 градусов, чтобы они выглядели естественно при чтении текста сверху вниз.

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

Разбираем способы решения проблемы

Посмотрим на алгоритм действий, который поможет нам устранить этот визуальный дефект. Мы выделим несколько уровней решения: от ручной правки макета до программного контроля.

Способ 1: Изменение шрифта в макете (самый простой)

Самый надежный способ — это проверка свойств ячейки в макете табличного документа. Выполним следующие шаги:

  1. Откроем макет печатной формы в конфигураторе.
  2. Выделим ячейку, в которой символ номера отображается некорректно (или выделим весь макет комбинацией клавиш Ctrl+A).
  3. Перейдем в палитру свойств и найдем поле Шрифт.
  4. Убедимся, что выбран шрифт без символа «собачки» в начале. Вместо @Arial Unicode MS выберем обычный Arial или Arial Unicode MS (без префикса).

Способ 2: Очистка форматирования

Иногда префикс @ попадает в макет скрытно, например, при копировании областей из внешних файлов Excel или из очень старых конфигураций 1С. В таких случаях визуально в свойствах может отображаться обычный шрифт, но система продолжает использовать старые метрики. Проанализируем ситуацию: если замена шрифта не помогает, попробуем полностью очистить форматирование ячейки через контекстное меню «Очистить — Всё» и задать оформление заново.

Способ 3: Программная установка шрифта

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


// Неправильно: использование вертикального шрифта приведет к повороту знака №
ОбластьМакета.ТекущаяОбласть.Шрифт = Новый Шрифт("@Arial", 10);

// Правильно: используем стандартное начертание
ОбластьМакета.ТекущаяОбласть.Шрифт = Новый Шрифт("Arial", 10, Истина, Ложь);

Обратите внимание, что при использовании конструктора Новый Шрифт важно явно указывать имя гарнитуры без лишних символов в начале строки.

Дополнительные сведения о локализации

Интересно заметить, что эта проблема часто проявляется при определенных настройках System Locale (Язык программ, не поддерживающих Юникод). Если в системе установлена украинская локаль, Windows может подтягивать альтернативные таблицы символов для шрифтов с префиксом @, что и вызывает трансформацию № в Z. Это подтверждает, что корень проблемы лежит в системных шрифтах Windows, а 1С лишь добросовестно отображает то, что «просит» шрифт.

Резюме

Подведем итоги нашего исследования. Мы выяснили, что «уставший и прилегший» символ номера — это не шутка разработчиков и не вирус, а техническая особенность функционирования вертикальных шрифтов в ОС Windows, которую стали учитывать современные версии платформы 1С. Для исправления ситуации достаточно просто отказаться от использования шрифтов с префиксом @ в макетах и программном коде. Теперь, когда мы понимаем механику этого процесса, решение подобных задач не будет занимать много времени.

← На главную