Почему печатная форма печатается на 1/3 листа и как это исправить?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Разберем распространенную ситуацию, с которой часто сталкиваются разработчики при создании самописных печатных форм: документ при выводе на печать выглядит крайне мелко, занимая лишь узкую вертикальную полосу (например, одну треть листа), хотя в настройках стоит масштаб 100% и формат А4. Рассмотрим причины этого поведения и пошагово выясним, как вернуть форме нормальный вид.

Проанализируем механизм автоматического масштабирования

Первым делом нам необходимо заглянуть в программный код формирования табличного документа. В сообщении 6 упоминается критически важное свойство: АвтоМасштаб. Когда мы устанавливаем ТабДок.АвтоМасштаб = Истина, система 1С пытается автоматически уместить все заполненные колонки макета по ширине страницы. Если форма «сжимается», это прямой сигнал о том, что 1С видит в макете данные или настройки далеко за пределами видимой таблицы.

Посмотрим на пример кода, который отвечает за инициализацию табличного документа и вывод областей:


Макет = ПолучитьМакет("ТоварныйЧек");
ТабДок = Новый ТабличныйДокумент;
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПокупателя_ТоварныйЧек";
ТабДок.АвтоМасштаб = Истина;

// Выводим секции макета
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ТабДок.Вывести(ОбластьМакета);

Если в макете ТоварныйЧек случайно была изменена ширина колонки где-то далеко справа (например, в 50-й колонке) или там остался невидимый символ после копирования из Excel, 1С посчитает, что область печати заканчивается именно там. В итоге система попытается «втиснуть» и основную таблицу, и эти пустые колонки в один лист А4, что приведет к пропорциональному уменьшению масштаба всего содержимого.

Выясним основную причину: лишняя область печати

Как показала практика обсуждения в теме (сообщение 15), основной проблемой часто является слишком огромная область для печати, заданная в самом макете в конфигураторе. Проанализируем, как это исправить.

  1. Откроем макет печатной формы в конфигураторе.
  2. Обратим внимание на правую границу документа. Если за пределами основной таблицы есть колонки с измененной шириной или форматированием, их нужно удалить. Важно: просто нажать клавишу Delete в ячейках недостаточно. Нужно выделить именно заголовки колонок (буквенные обозначения сверху), нажать правую кнопку мыши и выбрать пункт «Удалить».
  3. Проверим наличие графических объектов. Иногда линии, рамки или невидимые картинки могут выступать за правую границу таблицы. Даже если край линии выступает на миллиметр в «пустую» зону, 1С расширит область печати до этого края.
  4. Воспользуемся инструментом «Отображать сетку» и «Отображать заголовки», чтобы точно видеть границы всех используемых ячеек.

Рассмотрим влияние настроек пользователя и кэша

В коде из сообщения 13 мы видим использование свойства ИмяПараметровПечати. Рассмотрим подробнее, зачем оно нужно и как может мешать:


ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПокупателя_ТоварныйЧек";

Это свойство заставляет систему сохранять настройки печати (масштаб, ориентацию, поля), сделанные пользователем вручную в окне предпросмотра. Если пользователь один раз случайно установил масштаб «По ширине страницы» при некорректном макете, или вручную задал 30%, 1С запомнит это значение. Даже после того, как вы исправите макет в конфигураторе, у этого конкретного пользователя форма может продолжать печататься мелко.

Решение: Для проверки очистите настройки печати пользователя через меню «Сервис» — «Настройки пользователя» или временно измените строку ИмяПараметровПечати в коде на другое уникальное имя. Если форма после этого начала выводиться корректно — проблема была в сохраненном кэше настроек.

Разберем программные способы фиксации масштаба

Если мы хотим жестко гарантировать, что форма будет занимать всю ширину листа, независимо от мелких погрешностей в макете, мы можем использовать дополнительные свойства объекта ТабличныйДокумент. Проанализируем следующий подход:


ТабДокумент.АвтоМасштаб = Истина;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДокумент.ЭкземпляровНаСтранице = 1;
// Принудительно устанавливаем количество страниц по ширине
ТабДокумент.КоличествоСтраницПоШирине = 1;

Использование свойства КоличествоСтраницПоШирине = 1 является «сильным» решением. Оно заставляет драйвер печати игнорировать лишние пустые колонки справа и растягивать основное содержимое так, чтобы оно заняло ровно один лист по горизонтали. Однако будьте осторожны: если ваша таблица действительно очень широкая, она станет нечитаемой.

Проверим настройки драйвера принтера

Иногда проблема кроется не в 1С, а во взаимодействии с драйвером физического принтера (сообщение 14). Выясним, как это проверить:

Подведем итог: в большинстве случаев масштаб 1/3 листа обусловлен тем, что в макете «зацепили» лишние колонки справа. Тщательная очистка макета в конфигураторе (удаление колонок через контекстное меню заголовков) и проверка свойства КоличествоСтраницПоШирине решают данную техническую проблему.

← На главную