Имя: Пароль:
1C
1С v8
БСП 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. Установить необходимую ориентацию для этого раздела. В моем случае - альбомную. Разрыв раздела должен стоять между областями (если смотреть в режиме "Отобразить все знаки")

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

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

Вопрос закрыт.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.