Почему при сохранении табличного документа 1С в PDF не сохраняется ландшафтная ориентация и как это исправить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с печатными формами в 1С:Предприятии 8.3 разработчики часто сталкиваются с неприятной особенностью: программно заданная ландшафтная (альбомная) ориентация табличного документа «сбрасывается» на портретную (книжную) при сохранении в формат PDF с помощью метода Записать(). Это происходит даже в тех случаях, когда в отладчике свойство ОриентацияСтраницы явно имеет значение ОриентацияСтраницы.Ландшафт.

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

Причина №1: Ошибки конкретных релизов платформы

Прежде всего, проанализируем версию используемой платформы. Проблема с потерей ориентации была официально признана «особенностью» (а фактически — багом) в линейке релизов 8.3.15 (например, 8.3.15.1830) и некоторых ранних сборках 8.3.16. В этих версиях внутренний движок экспорта PDF не всегда корректно считывал метаданные страницы, если они не были зафиксированы в системном реестре через параметры печати.

Если вы столкнулись с такой ситуацией, первым делом рекомендуется обновить платформу до актуальных версий (например, 8.3.22 и выше), где алгоритмы работы с PDF-библиотеками были существенно переработаны и оптимизированы.

Причина №2: Конфликт с настройками масштабирования

Одной из наиболее частых причин «сброса» ориентации является алгоритм 1С, который пытается уместить контент на листе. Если свойство АвтоМасштаб выключено, а данные по ширине физически не влезают в границы книжной страницы, PDF-движок может повести себя непредсказуемо, игнорируя настройку Ландшафт.

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


// Формируем табличный документ
ТабДок = Новый ТабличныйДокумент;
// ... заполнение документа данными ...

// Устанавливаем настройки страницы ПЕРЕД записью
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина; // Критически важное свойство
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);

Причина №3: Использование параметров печати и кэширование

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

Проанализируем правильный подход к работе с параметрами:

  1. Всегда задавайте уникальное имя параметров печати для конкретного отчета.
  2. Если проблема сохраняется, попробуйте изменить это имя (добавить суффикс), чтобы принудительно очистить старые настройки.
  3. Убедитесь, что свойства страницы устанавливаются после того, как документ полностью сформирован.

// Задаем уникальный ключ для сохранения настроек
ТабДок.ИмяПараметровПечати = "ПЕЧАТЬ_РЕЕСТРА_ДОКУМЕНТОВ_АЛЬБОМНО";
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
// Поля также могут влиять на определение границ в PDF
ТабДок.ПолеСлева = 10;
ТабДок.ПолеСправа = 10;

Причина №4: Зависимость от системного принтера по умолчанию

Выясним любопытный факт: встроенный конвертер PDF в 1С при формировании файла часто обращается к драйверу принтера, который установлен в операционной системе «по умолчанию». Если в настройках этого принтера жестко закреплена «Книжная» ориентация, то при определенных условиях (особенно при работе на сервере) метод Записать() может использовать именно её.

Рассмотрим рекомендации для системных администраторов:

Альтернативное решение: Использование виртуального принтера

Если метод Записать() упорно игнорирует ландшафтную ориентацию, а обновить платформу нет возможности, рассмотрим использование метода Напечатать(). Этот способ требует наличия установленного в системе виртуального PDF-принтера (например, PDFCreator или Microsoft Print to PDF).

Преимущество этого метода заключается в том, что виртуальный принтер получает данные через стандартный интерфейс печати Windows, который гораздо строже соблюдает настройки ориентации, переданные из 1С.


// Пример печати на виртуальный принтер
ТабДок.ИмяПринтера = "Microsoft Print to PDF";
ТабДок.Напечатать(РежимИспользованияПринтера.ПечатьБезПросмотра);

Подведение итогов

Для стабильного получения PDF в альбомной ориентации мы рекомендуем придерживаться следующей последовательности действий:

  1. Устанавливать АвтоМасштаб = Истина.
  2. Использовать уникальное ИмяПараметровПечати.
  3. Задавать настройки страницы в самом конце кода формирования документа, непосредственно перед вызовом Записать().
  4. При использовании платформы версии 8.3.15 и ниже рассмотреть возможность обновления до более стабильных релизов.

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

← На главную