|
БСП 3.1.2: Как в одной печатной форме сделать и портретную и альбомную страницы одноврем? | ☑ | ||
---|---|---|---|---|
0
smihus
19.11.20
✎
16:29
|
Добрый день,
Делаю печатную форму через шаблон в формате docx с использованием подсистемы "Печать" из БСП 3.1.2. В шаблоне первая страница портретная, а вторая - альбомная. Первая страница содержит несколько областей, в том числе и таблицу, которая может расширятся в зависимости от объемов данных (соответственно может получиться несколько страниц, которые должны быть в портретной ориентации). На второй странице расположена всего одна область (просто пустая таблица, так должно быть по заданию). При чем в начале этой области есть разрыв страницы и разрыв раздела. Но после формирования, когда открывается готовый документ в MS Word, все страницы документа становятся альбомными. Подскажите: Можно ли настроить, чтобы все страницы кроме последней были в портретной ориентации, а последняя - в альбомной? Если можно, то как? |
|||
1
Волшебник
19.11.20
✎
16:30
|
разрыв раздела как раз и позволяет изменить ориентацию страницы
|
|||
2
smihus
19.11.20
✎
16:32
|
Так в том то и дело, что в шаблоне все отлично. Но при формировании документа почему-то все листы становятся альбомными.
|
|||
3
kai17
19.11.20
✎
17:23
|
&НаКлиенте
Процедура УстановитьОриентациюЛандшафт(ПечатнаяФорма , НоваяСтраница = Истина) ПФ_ActiveDocument = ПечатнаяФорма.COMСоединение.ActiveDocument; ПозицияОкончанияДокумента = ПФ_ActiveDocument.Range().End; Если НоваяСтраница Тогда ПФ_ActiveDocument.Range(ПозицияОкончанияДокумента-1, ПозицияОкончанияДокумента-1).InsertBreak(2); // переход на новую страницу ПФ_ActiveDocument.Range(ПозицияОкончанияДокумента, ПозицияОкончанияДокумента).PageSetup.Orientation = 1;// смена ориентации с новой страницы КонецЕсли; КонецПроцедуры |
|||
4
smihus
19.11.20
✎
18:19
|
kai17: Ваша процедура отрабатывает на клиенте, а формирование печатной формы в подсистеме Печать происходит в Модуле менеджера объекта (в моем случае Справочника).
А на стороне сервера структура ПечатнаяФорма не содержит поле COMСоединение. Через подсистему Печать, если я правильно понимаю, вообще нет возможности к КОМОбъекту обратиться напрямую. Печатная форма формируется вот так: // Вывод шапки. Область = УправлениеПечатью.ОбластьМакета(Макет, Области[ИмяМакета]["Шапка"]); УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта); ... И в конце: АдресХранилищаПечатнойФормы = УправлениеПечатью.СформироватьДокумент(ПечатнаяФорма); И все это происходит на сервере. |
|||
5
kai17
20.11.20
✎
06:56
|
(4) Вы правы. В последних БСП формирование документа docx перенесли на сервер в модуль УправлениеПечатьюСлужебный.СобратьФайлДокументаDOCX и мой пример тут не подойдет.
|
|||
6
smihus
20.11.20
✎
08:25
|
(5) Нашел, что в переменной Область есть доступ к полю Текст в формате XML - сейчас копаю в этом направлении. Пытаюсь разрыв раздела с указанием ориентации напрямую туда записать.
|
|||
7
smihus
20.11.20
✎
15:56
|
Разобрался
В шаблоне docx: 1. создать новый раздел (со следующей страницы). 2. Установить необходимую ориентацию для этого раздела. В моем случае - альбомную. Разрыв раздела должен стоять между областями (если смотреть в режиме "Отобразить все знаки") В коде при присоединении последней области в печатной форме обязательно установить последний аргумент функции в Истина: УправлениеПечатью.ПрисоединитьОбласть(ПечатнаяФорма, Область, Истина); ИЛИ УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Истина); При чем для других областей (не последних в печатной форме) можно ставить и Ложь (или не ставить, т.к. Ложь - значение по-умолчанию) - все будет работать корректно. Вопрос закрыт. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |