Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

БСП 3.1.2: Как в одной печатной форме сделать и портретную и альбомную страницы одноврем?

БСП 3.1.2: Как в одной печатной форме сделать и портретную и альбомную страницы одноврем?
Я
   smihus
 
19.11.20 - 16:29
Добрый день,

Делаю печатную форму через шаблон в формате docx с использованием подсистемы "Печать" из БСП 3.1.2.
В шаблоне первая страница портретная, а вторая - альбомная.
Первая страница содержит несколько областей, в том числе и таблицу, которая может расширятся в зависимости от объемов данных (соответственно может получиться несколько страниц, которые должны быть в портретной ориентации).

На второй странице расположена всего одна область (просто пустая таблица, так должно быть по заданию). При чем в начале этой области есть разрыв страницы и разрыв раздела.

Но после формирования, когда открывается готовый документ в MS Word, все страницы документа становятся альбомными.

Подскажите: Можно ли настроить, чтобы все страницы кроме последней были в портретной ориентации, а последняя - в альбомной? Если можно, то как?
   Волшебник
 
1 - 19.11.20 - 16:30
разрыв раздела как раз и позволяет изменить ориентацию страницы
   smihus
 
2 - 19.11.20 - 16:32
Так в том то и дело, что в шаблоне все отлично. Но при формировании документа почему-то все листы становятся альбомными.
   kai17
 
3 - 19.11.20 - 17:23
&НаКлиенте
Процедура УстановитьОриентациюЛандшафт(ПечатнаяФорма , НоваяСтраница = Истина)
    ПФ_ActiveDocument = ПечатнаяФорма.COMСоединение.ActiveDocument;
    ПозицияОкончанияДокумента = ПФ_ActiveDocument.Range().End;
    Если НоваяСтраница Тогда
        ПФ_ActiveDocument.Range(ПозицияОкончанияДокумента-1, ПозицияОкончанияДокумента-1).InsertBreak(2);// переход на новую страницу

        ПФ_ActiveDocument.Range(ПозицияОкончанияДокумента, ПозицияОкончанияДокумента).PageSetup.Orientation = 1// смена ориентации с новой страницы

    КонецЕсли; 
КонецПроцедуры
   smihus
 
4 - 19.11.20 - 18:19
kai17: Ваша процедура отрабатывает на клиенте, а формирование печатной формы в подсистеме Печать происходит в Модуле менеджера объекта (в моем случае Справочника).
А на стороне сервера структура ПечатнаяФорма не содержит поле COMСоединение.
Через подсистему Печать, если я правильно понимаю, вообще нет возможности к КОМОбъекту обратиться напрямую.
Печатная форма формируется вот так:
// Вывод шапки.

Область = УправлениеПечатью.ОбластьМакета(Макет, Области[ИмяМакета]["Шапка"]);
УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта);
...
И в конце:
АдресХранилищаПечатнойФормы = УправлениеПечатью.СформироватьДокумент(ПечатнаяФорма);

И все это происходит на сервере.
   kai17
 
5 - 20.11.20 - 06:56
(4) Вы правы. В последних БСП формирование документа docx перенесли на сервер в модуль УправлениеПечатьюСлужебный.СобратьФайлДокументаDOCX и мой пример тут не подойдет.
   smihus
 
6 - 20.11.20 - 08:25
(5) Нашел, что в переменной Область есть доступ к полю Текст в формате XML - сейчас копаю в этом направлении. Пытаюсь разрыв раздела с указанием ориентации напрямую туда записать.
   smihus
 
7 - 20.11.20 - 15:56
Разобрался

В шаблоне docx:
1. создать новый раздел (со следующей страницы).
2. Установить необходимую ориентацию для этого раздела. В моем случае - альбомную. Разрыв раздела должен стоять между областями (если смотреть в режиме "Отобразить все знаки")

В коде при присоединении последней области в печатной форме обязательно установить последний аргумент функции в Истина:
УправлениеПечатью.ПрисоединитьОбласть(ПечатнаяФорма, Область, Истина);
ИЛИ
УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Истина);

При чем для других областей (не последних в печатной форме) можно ставить и Ложь (или не ставить, т.к. Ложь - значение по-умолчанию) - все будет работать корректно.

Вопрос закрыт.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.