Многие системные администраторы и разработчики, работающие с «классикой» — 1С:Предприятием версии 7.7, рано или поздно сталкиваются с досадным явлением: на экране монитора печатная форма выглядит идеально, длинные названия номенклатуры аккуратно переносятся на новые строки, но стоит отправить документ на принтер, как текст «схлопывается» в одну строку или просто обрезается. Разберем детально, почему это происходит и как победить эту техническую особенность.
Для начала выясним причину такого поведения системы. Проблема кроется в глубокой архитектуре графического интерфейса Windows — GDI (Graphics Device Interface). Программа 1С 7.7 была разработана в эпоху, когда стандартное разрешение экрана составляло 96 DPI. При формировании предварительного просмотра (Preview) движок 1С рассчитывает ширину каждого символа и длину всей строки, исходя из экранного разрешения.
Однако современный принтер работает с совершенно другими величинами — 600, 1200 или даже 2400 DPI. Когда драйвер принтера получает команду на печать, он выполняет собственный пересчет экранных координат в физические точки на бумаге. Из-за микроскопических погрешностей округления при масштабировании шрифтов (особенно это касается пропорциональных шрифтов типа Arial или Times New Roman) текст на принтере оказывается на доли миллиметра длиннее, чем «думала» 1С при выводе на экран. В результате алгоритм автоматического подбора высоты строки в ячейке таблицы 1С не срабатывает должным образом на стороне принтера, и перенос текста пропадает.
Проанализируем влияние драйверов. В современных системах по умолчанию часто устанавливаются драйверы PCL6. Они быстрые и современные, но именно они чаще всего «оптимизируют» печать шрифтов таким образом, что верстка 1С 7.7 «едет».
Если замена драйвера невозможна (например, принтер сетевой и специфический), мы можем изменить способ обработки шрифтов в настройках самого принтера. Это заставит систему передавать текст на печать не как набор символов со своими метриками, а практически как картинку.
Разберем по шагам, как это сделать (пути могут незначительно отличаться в зависимости от модели принтера):
Рассмотрим ситуацию, когда 1С 7.7 запущена на 64-битной Windows 10 или 11. В этих системах часто включено масштабирование интерфейса (например, 125% или 150%). Поскольку 1С 7.7 не умеет корректно работать с параметром High DPI, возникают искажения в расчете табличных форм.
Выполним следующие действия для исправления:
1cv7s.exe (или ярлык, через который запускается программа).Если технические настройки принтера не помогают, нам придется внести изменения непосредственно в печатную форму в Конфигураторе. Посмотрим, какие приемы помогут сделать форму более стабильной:
Arial на Courier New в проблемных ячейках. У моноширинного шрифта ширина всех символов одинакова, что сводит вероятность ошибки в расчетах GDI к минимуму.РазделительСтрок для явного указания места переноса в длинных названиях.Выясним причину влияния разрядности системы. На 64-битных ОС выполнение 32-битных приложений (каким является 1С 7.7) происходит через слой эмуляции WoW64. При этом системные библиотеки gdi32.dll работают в режиме совместимости. В некоторых случаях это приводит к тому, что функция GetTextExtentPoint32, которую 1С использует для расчета длины строки, возвращает значения, чуть отличные от тех, что используются принтером.
В такой ситуации наиболее действенным методом остается именно Solution №2 (Печать текста как графики), так как он полностью исключает использование шрифтовых метрик принтера в процессе формирования изображения страницы.
Подведем итог: проблема расхождения вида «экран-бумага» в 1С 7.7 — это не ошибка кода, а следствие технологического разрыва между старым ПО и новыми драйверами печати. Последовательное применение настроек драйвера (PCL5, растрирование шрифтов) и корректировка параметров совместимости Windows в большинстве случаев позволяют добиться идентичности печатных форм.