При работе с печатными формами в 1С:Предприятии 8.3 разработчики часто сталкиваются с неприятной особенностью: программно заданная ландшафтная (альбомная) ориентация табличного документа «сбрасывается» на портретную (книжную) при сохранении в формат PDF с помощью метода Записать(). Это происходит даже в тех случаях, когда в отладчике свойство ОриентацияСтраницы явно имеет значение ОриентацияСтраницы.Ландшафт.
В этой статье мы подробно разберем, почему встроенный механизм генерации PDF ведет себя подобным образом, и рассмотрим пошаговые алгоритмы решения этой проблемы, основываясь на особенностях различных релизов платформы 1С.
Прежде всего, проанализируем версию используемой платформы. Проблема с потерей ориентации была официально признана «особенностью» (а фактически — багом) в линейке релизов 8.3.15 (например, 8.3.15.1830) и некоторых ранних сборках 8.3.16. В этих версиях внутренний движок экспорта PDF не всегда корректно считывал метаданные страницы, если они не были зафиксированы в системном реестре через параметры печати.
Если вы столкнулись с такой ситуацией, первым делом рекомендуется обновить платформу до актуальных версий (например, 8.3.22 и выше), где алгоритмы работы с PDF-библиотеками были существенно переработаны и оптимизированы.
Одной из наиболее частых причин «сброса» ориентации является алгоритм 1С, который пытается уместить контент на листе. Если свойство АвтоМасштаб выключено, а данные по ширине физически не влезают в границы книжной страницы, PDF-движок может повести себя непредсказуемо, игнорируя настройку Ландшафт.
Разберем пример кода, который помогает минимизировать риск возникновения ошибки за счет принудительного включения автоматического масштабирования:
// Формируем табличный документ
ТабДок = Новый ТабличныйДокумент;
// ... заполнение документа данными ...
// Устанавливаем настройки страницы ПЕРЕД записью
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина; // Критически важное свойство
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
Часто платформа 1С игнорирует программную установку свойств страницы, если для документа не задано уникальное имя параметров печати. Когда мы задаем ИмяПараметровПечати, система начинает сохранять настройки (ориентацию, поля, масштаб) в локальном кэше пользователя или системном реестре. Если ранее этот же документ печатался в портретной ориентации, старые настройки могут перекрывать новые программные установки.
Проанализируем правильный подход к работе с параметрами:
// Задаем уникальный ключ для сохранения настроек
ТабДок.ИмяПараметровПечати = "ПЕЧАТЬ_РЕЕСТРА_ДОКУМЕНТОВ_АЛЬБОМНО";
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
// Поля также могут влиять на определение границ в PDF
ТабДок.ПолеСлева = 10;
ТабДок.ПолеСправа = 10;
Выясним любопытный факт: встроенный конвертер PDF в 1С при формировании файла часто обращается к драйверу принтера, который установлен в операционной системе «по умолчанию». Если в настройках этого принтера жестко закреплена «Книжная» ориентация, то при определенных условиях (особенно при работе на сервере) метод Записать() может использовать именно её.
Рассмотрим рекомендации для системных администраторов:
Если метод Записать() упорно игнорирует ландшафтную ориентацию, а обновить платформу нет возможности, рассмотрим использование метода Напечатать(). Этот способ требует наличия установленного в системе виртуального PDF-принтера (например, PDFCreator или Microsoft Print to PDF).
Преимущество этого метода заключается в том, что виртуальный принтер получает данные через стандартный интерфейс печати Windows, который гораздо строже соблюдает настройки ориентации, переданные из 1С.
// Пример печати на виртуальный принтер
ТабДок.ИмяПринтера = "Microsoft Print to PDF";
ТабДок.Напечатать(РежимИспользованияПринтера.ПечатьБезПросмотра);
Для стабильного получения PDF в альбомной ориентации мы рекомендуем придерживаться следующей последовательности действий:
АвтоМасштаб = Истина.ИмяПараметровПечати.Записать().Соблюдение этих правил позволит избежать большинства проблем с некорректным отображением документов при экспорте и обеспечит качественное формирование отчетов для пользователей.