При переходе на новые релизы платформы 1С:Предприятие 8.3 (в частности, на ветку 8.3.22) многие технические специалисты столкнулись с неприятным визуальным артефактом: в табличных документах пропадает текст. Особенно часто это проявляется в группировках строк или колонок. При этом, если зайти в свойства ячейки, текст там присутствует, но на экране отображается «пустота». В этой статье мы подробно разберем, почему это происходит в режиме обычного приложения и какие шаги нужно предпринять для восстановления корректного отображения данных.
Прежде всего, давайте определим условия, при которых возникает данная проблема. Как правило, она проявляется в конфигурациях, работающих в режиме Толстого клиента (Обычное приложение). Например, это может быть «Бюджетирование корпорации», «Управление производственным предприятием» или самописные решения на базе старых версий 1С. Основной симптом — текст в макете или сформированном отчете есть, но он невидим для пользователя.
Рассмотрим ключевые параметры среды, при которых баг дает о себе знать:
/RunModeOrdinaryApplication.Проанализируем техническую составляющую проблемы. В платформе версии 8.3.22 были внесены существенные изменения в движок отрисовки интерфейса и взаимодействие с системными метриками Windows. Выяснилось, что при использовании системных шрифтов или шрифтов по умолчанию в режиме обычного приложения платформа некорректно вычисляет свойство Масштаб (Scale) для текста.
В свойствах шрифта ячейки можно заметить подозрительное значение масштаба — 0%. Это означает, что текст физически отрисовывается, но его размер программно сжат до нулевой точки, что делает его невидимым. Это классический баг платформы, связанный с обработкой DPI экрана и наследованием свойств шрифта из операционной системы.
Если мы не можем оперативно обновить платформу на всем предприятии, разберем способ исправления через код. Нам необходимо принудительно установить конкретный шрифт и явно задать масштаб, отличный от нуля. Посмотрим на пример кода, который можно внедрить в процедуру вывода табличного документа:
// Пример исправления шрифта в области табличного документа
Область = Макет.ПолучитьОбласть("Группировка");
ТекущийШрифт = Область.Область(1, 1).Шрифт;
// Устанавливаем конкретное имя шрифта вместо системного
// и явно задаем масштаб 100%
НовыйШрифт = Новый Шрифт(ТекущийШрифт, "Arial", ТекущийШрифт.Размер, ТекущийШрифт.Жирный, ТекущийШрифт.Наклонный);
Область.Область(1, 1).Шрифт = Новый Шрифт(НовыйШрифт, , , , , , 100);
ТабДок.Вывести(Область);
В данном примере мы берем существующий шрифт, заменяем неопределенное «системное» имя на конкретное Arial и, что самое важное, в конструкторе Новый Шрифт последним параметром указываем масштаб 100. Это заставляет платформу игнорировать ошибочные автоматические расчеты и отображать текст нормально.
Рассмотрим более простой вариант, не требующий написания кода, если проблема касается статического макета. Разберем по шагам:
После сохранения изменений платформа перестанет полагаться на системные настройки, которые в версии 8.3.22.1709 обрабатываются с ошибкой.
Для того чтобы окончательно убедиться, что проблема именно в отрисовке, а не в данных, выполним проверку через формат .mxl. Сохраните сформированный «пустой» табличный документ на диск. Затем попробуйте открыть этот файл в более старой версии платформы (например, 8.3.18) или в мобильном клиенте 1С. Если текст в файле отображается корректно, значит, мы имеем дело именно с багом рендеринга текущего релиза 8.3.22. Это подтверждает, что данные в базе целостны, а проблема носит чисто визуальный характер.
Самый надежный способ решения проблемы — переход на исправленную версию платформы. Фирма «1С» признала наличие ошибок отрисовки в первых релизах ветки 8.3.22. Проанализируем список версий, где данная ошибка (Bug ID: 00142835) уже исправлена:
При обновлении крайне желательно также очистить локальный кэш шрифтов на рабочих станциях пользователей. Это можно сделать, удалив содержимое папки %LOCALAPPDATA%\1C\1cv8\ExtLvl.
Иногда масштаб шрифта в 1С сбивается из-за нестандартных настроек DPI в операционной системе. Если пользователи работают на мониторах с высоким разрешением (4K), проверьте параметры масштабирования в настройках экрана Windows. Установка масштаба 100% часто временно решает проблему исчезновения текста, хотя и делает интерфейс слишком мелким. Также стоит попробовать запустить 1С с параметром /DisableAcceleration в строке запуска, чтобы исключить влияние аппаратного ускорения видеокарты на отрисовку шрифтов в старом графическом движке «Обычного приложения».
Подводя итог, можно сказать, что проблема «исчезающего текста» — это временная трудность переходного периода платформы на новые алгоритмы работы с графикой. Используя явное задание шрифтов в макетах или своевременное обновление платформы, вы сможете обеспечить комфортную работу пользователей без потери важной информации в отчетах.