При разработке и отладке печатных форм в платформе 1С 7.7 разработчики часто сталкиваются с неприятной ситуацией: на одном рабочем месте документ идеальным образом умещается на один лист A4, но стоит открыть и распечатать этот же документ на другом компьютере, как 1–2 последние строки «уезжают» на второй лист.
В этой статье мы подробно проанализируем причины такого поведения табличных документов, разберем платформенные особенности движка Moxel и рассмотрим проверенные способы решения этой проблемы.
Главная причина заключается в том, что движок печатных форм 1С 7.7 рассчитывает геометрию макета и высоту строк не абстрактно, а с оглядкой на драйвер принтера, установленный в системе по умолчанию.
Рассмотрим ключевые факторы, влияющие на перенос строк:
ПоШиринеСтраницы = 1 в 1С 7.7 сжимает печатную форму исключительно по горизонтали. Автоматического масштабирования по высоте под 1 страницу в платформе 7.7 не предусмотрено.HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<Имя базы>\V7\<Имя пользователя>\Moxel. Старый кэш может переопределять параметры, заданные программно.Самый надежный и универсальный способ — сделать печатную форму чуть более компактной по высоте в самом конфигураторе, чтобы она гарантированно умещалась на любом принтере.
Разберем по шагам, как это сделать:
Для гарантированного уменьшения печатной формы по вертикали мы можем передать желаемый процент масштабирования во второй параметр метода ПараметрыСтраницы().
Посмотрим на пример установки пропорционального масштаба (90–95%):
// Устанавливаем ориентацию (2 - альбомная или 1 - книжная),
// масштаб 92%, поля слева и справа по 5 мм, автовмещение по ширине (1)
Таб.ПараметрыСтраницы(1, 92, , , , 5, 5, 5, 5, 1);
Небольшое уменьшение масштаба до 92–95% визуально незаметно для пользователя, но дает необходимый запас по высоте для компенсации аппаратных полей любого драйвера.
Если проблему нужно решить оперативно на конкретном рабочем месте без глобального изменения макета для всех пользователей, мы можем применить условную настройку параметров страницы в зависимости от имени ПК.
Проанализируем пример кода:
ИмяПК = ИмяКомпьютера();
Если ИмяПК = "BUH_PC2" Тогда
// Для проблемного ПК уменьшаем верхнее и нижнее поля до 3 мм и задаем масштаб 90%
Таб.ПараметрыСтраницы(1, 90, , , , 3, 3, 3, 3, 1);
Иначе
// Стандартные параметры
Таб.ПараметрыСтраницы(1, 100, , , , 5, 5, 5, 5, 1);
КонецЕсли;
Если изменения в коде или конфигураторе не вступают в силу на конкретном компьютере, разберем порядок очистки сохраненного кэша настроек макета:
regedit).HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<Имя базы>\V7\<Имя пользователя>\Moxel.Moxel или конкретный подразделы, отвечающие за эту печатную форму.Чтобы избежать расхождений в отображении печатных форм на разных ПК, рекомендуется привести системные параметры к единому стандарту: