Отчёты
Разработка

Вывод Вордового ОТЧЕТА

Добрый день!
Прошу помощи в таком вопросе - по выделенным в гриде строкам надо рассчитать и напечатать документ,
заполнив Вордовый шаблон.
Все получается, только по каждой строке у меня выпускается ОТДЕЛЬНЫЙ вордовый документ, а требуется,
что бы они ВСЕ выходили ОДНИМ документом.

Скрипт такой:

...
var WordRecord = null;
var WordObject = null;
var Selection = null;

WordRecord = new Object(); //создаём объект Word

for ( i = 0; i

WordRecord = OpenWordTemplate('_Demand60'); //считываю шаблон из базы

WordObject = WordRecord.word;
Selection = WordObject.Selection;
Selection.WholeStory();

WordReplaceMark(Selection, '>', Client );

Selection.MoveLeft(1, 1);
WordObject.Visible = true;

} // END_FOR ContractID

Как все документы вывести одним файлом?

Нравится

5 комментариев

Борис, вот рабочий пример для добавления в отчет нескольких строк:

function Main() {
    //Создаем объект WORD и открываем шаблон
    var FileName = 'c:\\rep_test.doc';
       var Word = new ActiveXObject('Word.Application');
       Word.Documents.Open(FileName);
       var Selection = Word.Selection;
 
       //Находим метку, которая содержится в таблице и определяем сколько вставить строчек
       var RowsToInsert = 10; //В данном случае вставляем 10 строчек (это может быть кол-во записией датасета)
       if (Selection.Find.Execute('<<NumberMark>>')) {
        if (Selection.Tables.Count > 0) {
            //Если условие выполнилось - то Selection есть таблица. И вставляем строчки в нее
            Selection.InsertRowsBelow(RowsToInsert - 1);
            var Table = Selection.Tables(1);
            //Перебираем все строчки начиная со второй (1-я это заголовок)
            for (var i = 2; i <= Table.Rows.Count; i++) {
                Table.Columns(1).Cells(i).Range.Text = 'Левая колонка';        
                Table.Columns(2).Cells(i).Range.Text = 'Правая колонка';
            }            
        }
    }    
       Word.Visible = true;
}

Скорее всего Вам поможет вынос из цикла строк

WordRecord = OpenWordTemplate('_Demand60'); //считываю шаблон из базы
 
WordObject = WordRecord.word;
Selection = WordObject.Selection;
Selection.WholeStory();
...
WordObject.Visible = true;

нет, нельзя выносить из цикла, думается надо как-то добавлять к существующему вордовому файлу
заполненный шаблон.
Вот как добавлять - не понимаю.

Борис, посмотрите еще раз пример, который я Вам прислал.
Если я правильно понял, то можно воспользоваться функцией

Selection.InsertRowsBelow(RowsToInsert );

А потом обращаться к ячейкам

 Table.Columns(i).Cells(j)

, как в примере.

Если я не так понял, поправьте.

у меня шаблон - просто текст (напоминание клиенту), не таблица. В текст надо вставить имя клиента, суммы и т.д.
Насколько я понял, Selection.InsertRowsBelow работает только с таблицей и, значит, здесь его не применить

Борис, в таком случае нужно изменять логику работы финкции ShowWordReport в скрипте Scr_UserReportCommon таким образом, чтобы при добавлении строк во время 2, 3, 4... итераций создаваемый новый документ, а точнее его содержимое, прикреплялось к тому, что был создан во время первой итерации и дальше работа производилась с ним.

Показать все комментарии