Как обеспечить корректное отображение Unicode-символов в табличных документах 1С (MXL)

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

Часто при разработке красивых и информативных отчетов в 1С программисты сталкиваются с неприятной ситуацией: вместо ожидаемых иконок, стрелочек или спецсимволов (например, знака молнии ⚡ или различных закрашенных фигур) в табличном документе отображаются пустые прямоугольники, так называемые «тофу». Это происходит потому, что стандартные шрифты не всегда содержат необходимые глифы для отрисовки специфических символов Юникода. Рассмотрим подробнее, как работает механизм вывода символов в 1С и как добиться их корректного отображения.

Почему вместо символов появляются «квадраты»?

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

Проанализируем ситуацию с технической стороны. Существует несколько ключевых факторов, влияющих на этот процесс:

  1. Ограниченность стандартных шрифтов: Популярные шрифты типа Arial, Verdana или Times New Roman содержат только наиболее востребованные наборы символов (латиница, кириллица, базовые знаки пунктуации). Специфические символы из расширенных плоскостей Юникода в них просто отсутствуют.
  2. Механизм Font Fallback: В современных браузерах и текстовых редакторах работает система «подмены»: если в текущем шрифте символа нет, система ищет его в других установленных шрифтах. Однако в табличном документе 1С (MXL) этот механизм может работать некорректно или отсутствовать вовсе, особенно при жестком задании шрифта для области.
  3. Библиотека ICU: Платформа 1С использует библиотеку International Components for Unicode. Версия этой библиотеки в платформе напрямую влияет на то, как программный код обрабатывает сложные символы (например, суррогатные пары).

Выбор подходящего шрифта для Unicode

Выясним, какие шрифты лучше всего подходят для вывода пиктограмм текстом. Если мы хотим минимизировать проблемы, нам нужно использовать шрифты с максимально полным покрытием таблиц Unicode. Рассмотрим наиболее надежные варианты:

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


// Создадим область и выведем в нее символ молнии (высокое напряжение)
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ЯчейкаИконки = ОбластьМакета.Область("R1C1");

// Код символа молнии в Unicode - U+26A1
ЯчейкаИконки.Текст = Символ(9889); 

// Устанавливаем шрифт, гарантированно поддерживающий этот символ
ЯчейкаИконки.Шрифт = Новый Шрифт("Lucida Sans Unicode", 10, Истина);

ТабДок.Вывести(ОбластьМакета);

Инструменты для поиска и проверки символов

Для того чтобы понять, сможет ли выбранный шрифт отобразить нужный символ, проанализируем доступные инструменты:

  1. Таблица символов Windows (charmap.exe): Это самый надежный способ. Запустите программу, выберите нужный шрифт (например, Arial) и пролистайте список. Если вы не видите там нужного знака, значит, 1С его тоже не выведет этим шрифтом.
  2. Онлайн-сервисы: Ресурсы вроде unicode-table.com позволяют быстро найти код символа, но помните, что наличие символа на сайте не гарантирует его наличие в шрифтах на компьютере пользователя.

Нюансы вывода в различных клиентах и при экспорте

Важно помнить, что отображение в конфигураторе или тонком клиенте на вашем компьютере — это только половина дела. Проанализируем риски, возникающие при эксплуатации отчета:

Веб-клиент: Здесь отрисовкой занимается браузер. Браузеры (Chrome, Firefox, Edge) обычно гораздо лучше справляются с подбором шрифтов (fallback). Поэтому в веб-клиенте символ может отображаться корректно, даже если в тонком клиенте на той же машине виден квадрат.

Экспорт в PDF: При сохранении табличного документа в PDF платформа 1С пытается внедрить (embed) используемые шрифты в файл. Если вы используете редкий Unicode-шрифт, будьте готовы к тому, что размер PDF-файла значительно увеличится. Кроме того, старые версии платформы могут некорректно обрабатывать внедрение символов из дополнительных плоскостей.

Linux-клиенты: Если часть ваших пользователей работает под Linux, шрифты Arial или Lucida Sans Unicode могут отсутствовать. В этом случае система заменит их на аналоги (например, из семейства Liberation), где набор символов может отличаться. В таких случаях рекомендуется использовать стандартные шрифты Java или устанавливать пакеты шрифтов Microsoft в систему.

Рекомендации по проектированию интерфейсов с пиктограммами

Если ваша задача — создать матрицу прав или сложный визуальный отчет (как обсуждалось в теме форума), придерживайтесь следующих правил:

Рассмотрим, как можно реализовать выбор символа в зависимости от условий, используя системные шрифты:


Если ПравоРедактирования Тогда
    // Используем закрашенный круг
    ТекстСтатуса = Символ(9679); 
ИначеЕсли ПравоЧтения Тогда
    // Используем пустой круг
    ТекстСтатуса = Символ(9675); 
Иначе
    // Используем крестик
    ТекстСтатуса = Символ(10006); 
КонецЕсли;

Область.Текст = ТекстСтатуса;
Область.Шрифт = Новый Шрифт("Arial Unicode MS", 12);

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

← На главную