При разработке печатных форм в среде 1С с использованием подсистемы БСП (Библиотека стандартных подсистем), разработчики часто сталкиваются с задачей настройки различной ориентации страниц внутри одного документа. Например, когда основной текст отчета должен быть в портретной ориентации, а финальная таблица или приложение — в альбомной. Разберем, как корректно реализовать эту задачу при работе с шаблонами в формате DOCX.
Проблема возникает из-за специфики формата OpenXML, который используется в файлах DOCX. Параметры страницы, такие как ориентация (PageSetup), поля и размер листа, привязаны к конкретным разделам документа. Если при программной сборке документа механизмом БСП мы просто присоединяем области одну за другой, система не всегда «понимает», что нужно создать новый раздел с иными свойствами. В результате настройки последнего раздела часто распространяются на весь документ.
Первым делом необходимо правильно подготовить сам файл макета. Простого разрыва страницы (Page Break) здесь будет недостаточно, так как он сохраняет настройки текущего раздела. Нам требуется именно разрыв раздела.
Когда шаблон подготовлен, важно правильно передать управление при сборке документа в модуле менеджера объекта. Механизм БСП (объект УправлениеПечатью) поддерживает принудительную вставку разрыва раздела при присоединении областей.
При использовании функции ПрисоединитьОбласть или ПрисоединитьОбластьИЗаполнитьПараметры, нам необходимо обратить внимание на последний (логический) параметр — РазрывРаздела.
Рассмотрим, как выглядит вызов метода при формировании печатной формы:
// Пример заполнения областей печатной формы
// Параметр Истина в конце указывает системе на необходимость
// принудительной вставки разрыва раздела
УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(
ПечатнаяФорма,
Область,
ДанныеОбъекта,
Истина
);
Важные замечания по коду:
Истина принуждает систему УправлениеПечатью учитывать структуру разделов, заложенную в шаблоне.Ложь (по умолчанию) или просто не указывать.Истина является наиболее надежным способом, так как он работает на стороне сервера, не требует наличия установленного MS Word на сервере (в отличие от COM-объектов) и является полностью кроссплатформенным решением.Попытки манипулировать объектом ActiveDocument через COM-соединение (как мы могли пробовать на клиенте) часто заканчиваются неудачей, так как формирование печатных форм в БСП 3.1.2 перенесено на сервер. Работа с XML-структурой документа напрямую — задача трудоемкая и рискованная. Предложенный же метод использования встроенных функций БСП позволяет сохранить чистоту кода и обеспечивает предсказуемый результат при генерации файлов в любых средах (включая веб-клиент и Linux-серверы).
Следуя этим простым шагам, вы сможете создавать сложные печатные формы, в которых портретные и альбомные страницы будут соседствовать друг с другом без конфликтов и лишних манипуляций с форматом файла.