Имя: Пароль:
1C
1С v8
Вывести несколько табличных документов в Word с разной ориентацией страниц
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
1 sFAQer
 
27.06.17
03:38
(0) ПакетОтображаемыхДокументов - в СП введи, решает задачу без WORDа
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С так и так формируются - и то ли сразу отправить их на принтер, то ли потом еще возня с заполнением вордовского файла - она просто неоправданна.