В современной разработке интерфейсов на платформе 1С:Предприятие всё чаще встает вопрос эстетического оформления данных. Одной из тонких, но важных деталей является использование правильных пробелов. Согласно правилам типографики, группы разрядов в больших числах (например, миллионы или тысячи) должны отделяться не обычным межсловным пробелом, а узким неразрывным пробелом (Thin Space). Это позволяет числу выглядеть цельным, но при этом легко читаемым. Однако разработчики часто сталкиваются с тем, что 1С игнорирует спецсимволы Unicode, превращая изящную «тонкую шпацию» в стандартный широкий отступ.
В этой статье мы подробно разберем, почему так происходит, проанализируем внутренние механизмы платформы и выясним, какими способами можно добиться желаемого визуального результата в экранных формах и печатных документах.
Для начала выясним причину, по которой обычная вставка символа через Символ(8201) (U+2009, Thin Space) не всегда дает результат. Проблема кроется в том, что графический движок 1С (особенно в тонком клиенте) при отрисовке стандартных элементов управления, таких как ПолеНадписи или ПолеВвода, выполняет автоматическую нормализацию текста. Платформа стремится обеспечить максимальную кроссплатформенность и предсказуемость верстки, поэтому многие «экзотические» символы пробелов принудительно подменяются стандартным пробелом U+0020 или неразрывным пробелом U+00A0.
Кроме того, важную роль играет используемый шрифт. Если в шрифте, назначенном элементу формы (например, Tahoma или MS Shell Dlg), не прописана конкретная ширина для узкого пробела, Windows API или внутренняя библиотека 1С подставит глиф стандартного пробела. В итоге, даже если программно в строке содержится нужный код, на экране мы видим обычную широкую пустоту.
Самый простой и очевидный путь — это использование функции СтрЗаменить() совместно с функцией Символ(). Рассмотрим ситуацию, когда нам нужно отформатировать числовое значение вручную перед выводом на форму. Мы можем получить строковое представление числа с помощью функции Формат(), а затем заменить стандартные разделители на узкие.
Разберем пример кода:
// Получаем число в строковом формате с пробелом в качестве разделителя
ИсходноеЧисло = 125256;
СтрокаЧисла = Формат(ИсходноеЧисло, "ЧГ=3,0"); // Результат: "125 256" (с обычным пробелом)
// Код узкого пробела (Thin Space) - 8201 (U+2009)
УзкийПробел = Символ(8201);
// Выполняем замену стандартного неразрывного пробела (160) или обычного (32)
// Платформа 1С в функции Формат() часто использует неразрывный пробел (Символ(160))
Результат = СтрЗаменить(СтрокаЧисла, Символ(160), УзкийПробел);
Результат = СтрЗаменить(Результат, Символ(32), УзкийПробел);
// Устанавливаем текст в элемент формы
Элементы.НадписьСумма.Заголовок = Результат + " ₽";
Важное примечание: Как показывает практика, в некоторых версиях платформы 1С (особенно на Windows 10/11) этот метод может не сработать для обычных полей надписей, так как отрисовщик всё равно «схлопывает» ширину до стандартной. Однако этот метод отлично работает при подготовке данных для выгрузки во внешние системы или при формировании сложных текстовых строк.
Если задача стоит в отображении узких пробелов в отчетах, мы можем задействовать механизмы СКД. Поскольку форматная строка в настройках поля может не поддерживать передачу спецсимволов Unicode напрямую, оптимальным решением будет вызов экспортной функции общего модуля.
Проанализируем шаги реализации:
Пример функции в общем модуле:
Функция ФорматироватьЧислоСУзкимПробелом(Значение) Экспорт
Если ТипЗнч(Значение) <> Тип("Число") Тогда
Возврат Значение;
КонецЕсли;
// Форматируем число, убирая стандартную группировку
СтрокаРезультат = Формат(Значение, "ЧДЦ=2; ЧГ=0");
// Самостоятельно разбиваем на триады и вставляем Символ(8201)
// Либо используем регулярные выражения или циклическую обработку
// Для упрощения воспользуемся обратной заменой после стандартного формата
СтрокаРезультат = Формат(Значение, "ЧЦ=15; ЧДЦ=2; ЧГ=3,0");
Возврат СтрЗаменить(СтрокаРезультат, Символ(160), Символ(8201));
КонецФункции
В СКД для поля «Сумма» в выражении представления мы напишем: ОбщийМодульТипографика.ФорматироватьЧислоСУзкимПробелом(Сумма). Это позволит отчету выводить данные именно в том виде, который требуется правилами оформления.
Рассмотрим ситуацию, когда стандартные элементы формы 1С:Предприятия категорически отказываются отображать разницу в ширине пробелов. Если эстетика интерфейса критически важна (например, в дашбордах руководителя или презентационных панелях), мы можем использовать Поле HTML-документа.
Браузерные движки (WebKit/Blink), на которых базируется отображение HTML в 1С, гораздо лучше справляются с Unicode-типографикой, чем нативные элементы управления Windows. В HTML мы можем использовать сущности, которые гарантированно интерпретируются корректно:
  — узкий пробел (Thin Space, U+2009). — стандартный неразрывный пробел (U+00A0).  — волосяной пробел (Hair Space, U+200A), еще более узкий.Пример формирования текста для HTML-поля:
ТекстHTML = "<html><body style='font-family: Arial; font-size: 14pt;'>";
ЧислоСтрокой = "125 256 ₽";
ТекстHTML = ТекстHTML + "<p>Итого к оплате: " + ЧислоСтрокой + "</p>";
ТекстHTML = ТекстHTML + "</body></html>";
Элементы.ПолеИндикатора.УстановитьТекст(ТекстHTML);
Этот метод является самым надежным способом получить визуально безупречный текст внутри формы 1С.
Платформа 1С по умолчанию берет символ-разделитель групп разрядов из региональных настроек ОС Windows. Мы можем выяснить, позволяет ли этот механизм решить задачу глобально. Если в настройках системы (Панель управления -> Региональные стандарты -> Дополнительные параметры) вместо стандартного пробела вставить узкий пробел (используя Alt+8201 на цифровой клавиатуре), 1С подхватит его автоматически во всех полях с типом Число.
Однако будьте осторожны: изменение системных настроек разделителей может негативно сказаться на экспорте данных в форматы CSV или Excel, а также на работе стороннего ПО, которое ожидает стандартные символы. Этот метод рекомендуется только для закрытых систем с жестким контролем окружения.
Выясним еще один важный нюанс: как ведут себя узкие пробелы при печати. При сохранении табличного документа в формат PDF, 1С генерирует файл, в который могут внедряться используемые шрифты. Если вы передали в ячейку табличного документа строку с узким пробелом Символ(8201), то в итоговом PDF этот символ сохранится.
Интересно, что на экране в режиме предпросмотра 1С вы можете видеть широкие пробелы, но при открытии сформированного PDF в Adobe Acrobat или браузере вы увидите правильную, узкую шпацию. Это происходит потому, что растеризаторы PDF-файлов строго следуют спецификациям шрифтов и кодам символов Unicode.
Проанализировав ситуацию, можно сделать следующие выводы:
СтрЗаменить(Текст, Символ(160), Символ(8201)). Даже если в интерфейсе разница будет едва заметна, при копировании данных или печати типографика сохранится.Поле HTML-документа с применением сущности  .Verdana или Arial) корректное отображение спецсимволов.Таким образом, несмотря на внутренние ограничения графического движка платформы, у разработчика остается достаточно инструментов для создания профессионально оформленных и эстетически приятных интерфейсов.