При попытке вставки арабского текста в печатные формы ТабличныйДокумент многие разработчики сталкиваются с критической проблемой: нарушается направление письма (RTL — Right-to-Left), слова «зеркалятся», а цифры и знаки препинания теряют свой естественный порядок. Давайте разберем, почему это происходит и как мы можем решить эту задачу, учитывая текущие ограничения платформы 1С.
Важно понимать, что движок табличного документа 1С исторически настроен на обработку символов в режиме LTR (слева направо). Он не поддерживает полноценный алгоритм Unicode Bidirectional Algorithm. При копировании текста из внешних источников (Excel, Word, браузеры) метаданные, отвечающие за направление текста, либо теряются, либо игнорируются при вставке в ячейку макета 1С.
Рассмотрим самый надежный способ, который избавляет от проблем с рендерингом. Так как Excel нативно поддерживает двунаправленный текст, мы можем перенести логику формирования печатной формы из макета 1С непосредственно в файл Excel.
Excel (файл .xlsx) с уже настроенным направлением ячеек «Справа налево».COMОбъект для работы с Excel.Application.Лист.Cells(row, col).Value = Значение.Этот метод гарантирует, что арабский текст будет отображен корректно, так как визуализацию берет на себя движок Microsoft Office.
Если нам необходимо отображать текст непосредственно в интерфейсе 1С или формировать отчеты, которые должны корректно обрабатывать арабскую вязь, проанализируем использование ПолеHTMLДокумента. Это наиболее современный и гибкий подход.
Вместо стандартного ТабличныйДокумент мы формируем HTML-строку, где задаем стили через CSS:
// Пример формирования HTML-строки для вывода
HTMLТекст = "
<html>
<body style='direction: rtl; text-align: right; font-family: Arial;'>
<div>" + АрабскийТекст + "</div>
</body>
</html>";
ЭлементыФормы.ПолеHTML.УстановитьТекст(HTMLТекст);
Использование свойства direction: rtl; заставляет браузерный движок 1С правильно интерпретировать направление текста.
Иногда возникают ситуации, когда проблема кроется в настройках операционной системы. Рассмотрим шаг, который стоит предпринять для проверки:
Если другие варианты не подходят, можно попробовать внедрить управляющие символы Unicode. Однако, стоит помнить, что это решение не является гарантированным для всех версий платформы. Мы можем попробовать добавить символ U+202B (Right-to-Left Embedding) в начало строки:
Функция ПодготовитьАрабскийТекст(ИсходнаяСтрока)
// Символ RLE (Right-to-Left Embedding)
RLE = Символ(8235);
Возврат RLE + ИсходнаяСтрока;
КонецФункции
При этом, если в строке присутствуют цифры, они могут потребовать дополнительного контроля. В таких случаях мы используем LTR-маркер (U+200E) после каждой группы цифр, чтобы зафиксировать их ориентацию.
Проанализировав проблему, мы приходим к выводу: нативный ТабличныйДокумент не предназначен для полноценной работы с RTL-языками. Если проект требует высокого качества отображения арабского текста, мы рекомендуем либо переносить формирование печатных форм в Excel, либо переходить на использование HTML или PDF-генераторов. Это позволит избежать «танцев с бубном» и обеспечит профессиональный вид ваших документов.