При переносе серверной части 1С:Предприятие на новое оборудование или обновлении операционной системы (например, на Windows Server 2012/2016) администраторы часто сталкиваются с неприятным визуальным дефектом. В отчетах, сформированных через Систему компоновки данных (СКД), ширина колонок рассчитывается неверно: текст может накладываться друг на друга, колонки становятся слишком узкими или, наоборот, неоправданно широкими. При этом на клиентских машинах в локальных копиях баз всё может отображаться корректно.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем механизмы отрисовки табличных документов на стороне сервера и выясним, какие шаги необходимо предпринять для стабилизации работы системы.
Для начала разберем внутреннюю логику платформы. Когда отчет формируется на сервере (особенно в фоновом задании), платформа 1С использует графическую подсистему Windows (GDI+) для расчета метрик шрифтов. Чтобы понять, сколько пикселей в ширину будет занимать строка "Итого по разделу", системе нужно знать параметры экранного шрифта и коэффициент масштабирования.
Основная сложность заключается в том, что у службы сервера 1С (обычно ragent) нет полноценного интерактивного сеанса с монитором. Поэтому она пытается получить параметры "устройства вывода" из доступных системных настроек. Если эти настройки некорректны или отсутствуют, расчет ширины ТабличныйДокумент происходит с ошибками.
Это может показаться странным, но 1С напрямую зависит от драйвера принтера для расчета макета печати и ширины колонок. Если на сервере не установлено ни одного принтера, платформа использует стандартный системный драйвер, который часто выдает неверные метрики для шрифтов типа Arial или Tahoma.
Рассмотрим по шагам, как это исправить:
USR1CV8 или системная учетная запись).Проанализируем технический нюанс работы Windows Server. Графическая подсистема GDI+ требует наличия определенных папок в профиле пользователя для корректной инициализации. На чистых установках Windows Server папки рабочего стола для системных профилей часто отсутствуют, что сбивает механизмы расчета 1С.
Выполним следующие действия для создания необходимых директорий:
Эти папки позволяют компонентам Windows корректно инициализировать контекст устройства, даже если отчет формируется в "невидимом" фоновом сеансе.
Если сервер развернут в виртуальной среде, настройки экрана могут влиять на результат. Разберем ситуацию с масштабированием текста:
В настройках экрана сервера Windows должен быть установлен масштаб 100%. Если установлено значение 125% или 150%, сервер может рассчитывать ширину колонок исходя из этих коэффициентов, в то время как клиентское приложение ожидает стандартные 100%. Это приводит к тому, что колонки "разъезжаются".
Также важно убедиться, что в системе установлены все шрифты, используемые в макетах СКД. Если в отчете задан шрифт Calibri, а на сервере его нет, Windows подменит его на Times New Roman. Поскольку ширина символов у этих шрифтов разная, итоговая таблица будет выглядеть некорректно.
Как показывает практика (и опыт автора темы на форуме), иногда проблема кроется во внутреннем состоянии кэша метаданных и сеансов. Если после переноса базы на новый сервер вы наблюдаете "гуляющую" ширину колонок, попробуйте выполнить полную очистку:
snccntry и reg_1541 (за исключением файлов конфигурации кластера).В большинстве случаев, если настройки принтера и системных папок верны, полная перезагрузка окончательно устраняет проблему, так как служба 1С корректно подхватывает параметры среды при старте.
Если вышеперечисленные системные методы не помогают для конкретного отчета, можно прибегнуть к программным методам настройки самого отчета в конфигураторе. Проанализируем возможности оформления:
В настройках варианта отчета СКД, на закладке Условное оформление или в настройках выбранных полей, можно явно указать параметры ширины:
Например, если мы программно формируем табличный документ, можно принудительно вызвать метод проверки вывода, чтобы система "взбодрила" свои расчеты:
ТабДок = Новый ТабличныйДокумент;
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
ОтчетОбъект.СкомпоноватьРезультат(ТабДок);
// Принудительная фиксация масштаба для корректного отображения
ТабДок.АвтоМасштаб = Истина;
ТабДок.ТолькоПросмотр = Истина;
Подводя итог, можно сказать, что проблема с шириной колонок — это почти всегда проблема окружения сервера 1С. Сочетание правильных драйверов принтера, наличия системных папок профиля и стандартных настроек DPI позволяет добиться идеального отображения отчетов в любых условиях.