При работе с печатными формами в системе 1С:Предприятие разработчики иногда сталкиваются с крайне странным визуальным эффектом: все текстовые данные отображаются корректно, но символ номера № внезапно «ложится на бок», поворачиваясь ровно на 90 градусов. Визуально это делает его похожим на латинскую букву Z, что может вызвать недоумение у пользователей и привести к ложным предположениям о причинах такого поведения. В этой статье мы подробно разберем, почему это происходит, и найдем эффективные способы решения задачи.
Рассмотрим типичный сценарий. Программист создает печатную форму «с нуля». В макете всё настроено стандартно, ориентация текста в ячейках установлена в значение 0. Однако при выводе на печать или в режиме предварительного просмотра символ № отображается некорректно, в то время как соседние знаки препинания (например, восклицательный знак !) сохраняют правильную ориентацию. Это сразу дает нам понять, что проблема не в свойстве ячейки ОриентацияТекста, так как оно действует на всё содержимое ячейки целиком.
Проанализируем технические условия, при которых возникает данная ошибка:
@, например, @Arial Unicode MS.Разберем подробнее, что означает префикс @ перед названием шрифта в операционной системе Windows. Многие пользователи и даже опытные разработчики выбирают такие шрифты случайно, не подозревая об их истинном назначении.
Шрифты с префиксом @ (например, @Microsoft Sans Serif) — это так называемые вертикальные версии шрифтов. Они разработаны специально для реализации вертикального письма, принятого в восточноазиатских языках (китайский, японский, корейский). Согласно спецификациям OpenType и стандартам Unicode, в таких шрифтах определенные знаки пунктуации и специальные символы должны автоматически поворачиваться на 90 градусов, чтобы они выглядели естественно при чтении текста сверху вниз.
Символ № в некоторых системных таблицах интерпретируется как знак, подлежащий такому повороту. Долгое время платформа 1С могла игнорировать этот префикс при рендеринге печатных форм, но с развитием механизмов отображения текста (включая поддержку форматированных строк в ячейках табличного документа) система начала «честно» отрабатывать стандарт вертикального начертания. В итоге мы получаем перевернутый символ в обычном горизонтальном тексте.
Посмотрим на алгоритм действий, который поможет нам устранить этот визуальный дефект. Мы выделим несколько уровней решения: от ручной правки макета до программного контроля.
Самый надежный способ — это проверка свойств ячейки в макете табличного документа. Выполним следующие шаги:
Ctrl+A).@Arial Unicode MS выберем обычный Arial или Arial Unicode MS (без префикса).Иногда префикс @ попадает в макет скрытно, например, при копировании областей из внешних файлов Excel или из очень старых конфигураций 1С. В таких случаях визуально в свойствах может отображаться обычный шрифт, но система продолжает использовать старые метрики. Проанализируем ситуацию: если замена шрифта не помогает, попробуем полностью очистить форматирование ячейки через контекстное меню «Очистить — Всё» и задать оформление заново.
Если ваша печатная форма формируется полностью программно, необходимо проверить код, отвечающий за создание объектов шрифтов. Рассмотрим пример правильной установки шрифта, исключающий использование вертикальных версий:
// Неправильно: использование вертикального шрифта приведет к повороту знака №
ОбластьМакета.ТекущаяОбласть.Шрифт = Новый Шрифт("@Arial", 10);
// Правильно: используем стандартное начертание
ОбластьМакета.ТекущаяОбласть.Шрифт = Новый Шрифт("Arial", 10, Истина, Ложь);
Обратите внимание, что при использовании конструктора Новый Шрифт важно явно указывать имя гарнитуры без лишних символов в начале строки.
Интересно заметить, что эта проблема часто проявляется при определенных настройках System Locale (Язык программ, не поддерживающих Юникод). Если в системе установлена украинская локаль, Windows может подтягивать альтернативные таблицы символов для шрифтов с префиксом @, что и вызывает трансформацию № в Z. Это подтверждает, что корень проблемы лежит в системных шрифтах Windows, а 1С лишь добросовестно отображает то, что «просит» шрифт.
Подведем итоги нашего исследования. Мы выяснили, что «уставший и прилегший» символ номера — это не шутка разработчиков и не вирус, а техническая особенность функционирования вертикальных шрифтов в ОС Windows, которую стали учитывать современные версии платформы 1С. Для исправления ситуации достаточно просто отказаться от использования шрифтов с префиксом @ в макетах и программном коде. Теперь, когда мы понимаем механику этого процесса, решение подобных задач не будет занимать много времени.