0
AlexSib
27.06.17
✎
03:25
|
Здравствуйте,
Столкнулся с такой проблемой: необходимо вывести несколько печатных форм в один табличный документ, при этом листы имеют разную ориентацию - два листа портрет, третий ландшафт и т.д., всего их может быть пару сотен.
Поскольку средствами 1С нельзя в одном табличном документе выводить листы с разной ориентацией принял решение выводить через вордовский файл (установлен MS Word 2010). Для начала пытаюсь вывести просто два макета - чтобы один лист был портрет и второй лист ландшафт, но, к сожалению, если менять ориентацию одного листа, то весь документ становиться ландшафтом, почему-то. Вот такой пишу код:
[CODE] ПриложениеВорд = Новый COMОбъект("Word.Application");
ПриложениеВорд.Visible = True;
ИмяОсновногоФайла = ПолучитьИмяВременногоФайла("docx");
Таб = Новый ТабличныйДокумент;
Макет = Обработки.ВывестиМакетыВВорд.ПолучитьМакет("МакетВертикальный");
Таб.Вывести(Макет);
Таб.Записать(ИмяОсновногоФайла, ТипФайлаТабличногоДокумента.DOCX);
ПервыйДокумент = ПриложениеВорд.Documents.Open(ИмяОсновногоФайла, , , , , , , , , , , True);
ПервыйДокумент.ActiveWindow.ActivePane.View.Type = 3;
ПервыйДокумент.Range(ПервыйДокумент.Range().End - 1).InsertBreak(7);
ИмяВрФайла = ПолучитьИмяВременногоФайла("docx");
Таб2 = Новый ТабличныйДокумент;
Макет2 = Обработки.ВывестиМакетыВВорд.ПолучитьМакет("МакетГоризонтальный");
Таб2.Вывести(Макет2);
Таб2.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
Таб2.Записать(ИмяВрФайла, ТипФайлаТабличногоДокумента.DOCX);
ВременныйДокумент = ПриложениеВорд.Documents.Open(ИмяВрФайла);
ВременныйДокумент.Range().Copy();
ПредыдущаяОбласть = ПервыйДокумент.Range().End - 1;
ПервыйДокумент.Range(ПервыйДокумент.Range().End - 1).Paste();
Если Таб2.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт Тогда
ПервыйДокумент.Range(ПредыдущаяОбласть + 1).Select();
ПервыйДокумент.Application.Selection.PageSetup.Orientation = 1;
КонецЕсли;
ВременныйДокумент.Close(); [/CODE]
Может кто-нибудь подсказать, что я делаю не так?
Платформа 8.3.9.1850
|
|
2
AlexSib
27.06.17
✎
09:57
|
(1) Спасибо! Насколько все будет корректно работать - покажет рабочая печать 1500 контрагентов, но по крайней мере на печать уходит одним документом, а не по одному листку отдельно.
Благодарю за совет!
|
|
3
Базис
naïve
27.06.17
✎
11:01
|
Сравни, пожалуйста, скорость формирования большого объёма в 3 вариантах - с visible = True и False, и (1).
|
|
4
AlexSib
30.06.17
✎
08:59
|
Кстати, через Microsoft Word тоже все работает, только вместо InsertBreak(7) нужно писать InsertBreak(2) - не разрыв страницы, а разрыв секции - это на случай если кому-нибудь все-таки понадобится.
(3) Конечно же через ПакетОтображаемыхДокументов будет быстрее - таблички в 1С так и так формируются - и то ли сразу отправить их на принтер, то ли потом еще возня с заполнением вордовского файла - она просто неоправданна.
|
|