Почему печатная форма в 1С 7.7 не влезает на один лист на другом компьютере и как это исправить?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При разработке и отладке печатных форм в платформе 1С 7.7 разработчики часто сталкиваются с неприятной ситуацией: на одном рабочем месте документ идеальным образом умещается на один лист A4, но стоит открыть и распечатать этот же документ на другом компьютере, как 1–2 последние строки «уезжают» на второй лист.

В этой статье мы подробно проанализируем причины такого поведения табличных документов, разберем платформенные особенности движка Moxel и рассмотрим проверенные способы решения этой проблемы.

Выясним причины: почему один и тот же макет печатается по-разному

Главная причина заключается в том, что движок печатных форм 1С 7.7 рассчитывает геометрию макета и высоту строк не абстрактно, а с оглядкой на драйвер принтера, установленный в системе по умолчанию.

Рассмотрим ключевые факторы, влияющие на перенос строк:

  1. Различные аппаратные поля (непечатаемая область принтера). У разных моделей принтеров и драйверов различаются минимальные технологические поля. Если драйвер на втором компьютере запрашивает нижнее поле, например, в 10–12 мм вместо 5 мм, система автоматически сдвигает содержимое вверх, из-за чего нижние строки выталкиваются на новую страницу.
  2. Принтер по умолчанию в Windows. Если на одном ПК по умолчанию выбран локальный лазерный принтер, а на другом — сетевой принтер другой марки или виртуальный принтер (например, Microsoft Print to PDF), расчет высоты ячеек будет отличаться.
  3. Системное масштабирование Windows (DPI). Разные настройки масштаба шрифтов в операционной системе (100% / 96 DPI против 125% / 120 DPI) приводят к тому, что платформенные метрики шрифтов изменяются. Незначительный прирост высоты каждой строки в сумме дает превышение общего размера страницы.
  4. Ограничение опции «По ширине листа». Важно учитывать, что флаг ПоШиринеСтраницы = 1 в 1С 7.7 сжимает печатную форму исключительно по горизонтали. Автоматического масштабирования по высоте под 1 страницу в платформе 7.7 не предусмотрено.
  5. Сохраненный кэш настроек печати (Moxel). Платформа 1С 7.7 сохраняет пользовательские настройки печатных форм в реестре Windows в ветке HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<Имя базы>\V7\<Имя пользователя>\Moxel. Старый кэш может переопределять параметры, заданные программно.

Способ 1. Уменьшение высоты секций макета и фиксация высоты строк

Самый надежный и универсальный способ — сделать печатную форму чуть более компактной по высоте в самом конфигураторе, чтобы она гарантированно умещалась на любом принтере.

Разберем по шагам, как это сделать:

  1. Откроем макет печатной формы в Конфигураторе.
  2. Снизим высоту шапки, подвала или отступы между секциями на 5–10 пунктов.
  3. Выделим ключевые строки таблицы, вызовем их свойства и установим точную высоту строк вручную, отключив флаг автовысоты. Это предотвратит раздувание ячеек при разных системных шрифтах.

Способ 2. Задание пропорционального масштаба в коде

Для гарантированного уменьшения печатной формы по вертикали мы можем передать желаемый процент масштабирования во второй параметр метода ПараметрыСтраницы().

Посмотрим на пример установки пропорционального масштаба (90–95%):


// Устанавливаем ориентацию (2 - альбомная или 1 - книжная), 
// масштаб 92%, поля слева и справа по 5 мм, автовмещение по ширине (1)
Таб.ПараметрыСтраницы(1, 92, , , , 5, 5, 5, 5, 1);

Небольшое уменьшение масштаба до 92–95% визуально незаметно для пользователя, но дает необходимый запас по высоте для компенсации аппаратных полей любого драйвера.

Способ 3. Адаптивная настройка полей с помощью функции ИмяКомпьютера()

Если проблему нужно решить оперативно на конкретном рабочем месте без глобального изменения макета для всех пользователей, мы можем применить условную настройку параметров страницы в зависимости от имени ПК.

Проанализируем пример кода:


ИмяПК = ИмяКомпьютера();

Если ИмяПК = "BUH_PC2" Тогда
    // Для проблемного ПК уменьшаем верхнее и нижнее поля до 3 мм и задаем масштаб 90%
    Таб.ПараметрыСтраницы(1, 90, , , , 3, 3, 3, 3, 1);
Иначе
    // Стандартные параметры
    Таб.ПараметрыСтраницы(1, 100, , , , 5, 5, 5, 5, 1);
КонецЕсли;

Способ 4. Очистка кэша Moxel в реестре Windows

Если изменения в коде или конфигураторе не вступают в силу на конкретном компьютере, разберем порядок очистки сохраненного кэша настроек макета:

  1. Закроем программу 1С 7.7 на проблемном компьютере.
  2. Запустим редактор реестра (regedit).
  3. Перейдем в ветку HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<Имя базы>\V7\<Имя пользователя>\Moxel.
  4. Удалим содержимое ветки Moxel или конкретный подразделы, отвечающие за эту печатную форму.
  5. Запустим 1С 7.7 повторно — платформа применит свежие настройки, заданные программно.

Способ 5. Унификация системных настроек Windows

Чтобы избежать расхождений в отображении печатных форм на разных ПК, рекомендуется привести системные параметры к единому стандарту:

  1. Убедимся, что в системах используется стандартный масштаб экрана Windows (100% / 96 DPI).
  2. По возможности установим одинаковые версии драйверов принтера на всех рабочих местах.
← На главную