Параллельный вывод Fox-отчета в документ Word.
Идею одновременного формирования документа Word с Foxpro отчетом мне подсказал Владимир Журавлев. И лень заставляет самого чуть подумать
Не хочется заново перегребать данные чтоб приготовить Word документ.
Идея довольно проста
На каждое поле отчета навешиваем некий метод .
Например для самого тривиального случая у нас есть таблица с одним полем
Мы хотим вывести на предв. Просмотр и одновременно сформировать Ворд документ.
Итак действия: в отчете в BeforeOpenTables() создаем экземпляр Worda и сразу добавляем пустой документ
oword=create('word.application')
oword.documents.add()
затем в отчете обращаемся к методу rp(“field”)
который будет делать 2 операции
PROCE rp
lparameter fld
*вставляем значение в DOC
oword.Selection.TypeText(fld)
oword.Selection.insertafter(chr(13))
*если хочется посмотреть как формируется word документ
oword.visible=.t.
* иначе его можно показать в AfterCloseTables()
* Вставка в отчет
return fld
Вот собственно и вся идея, получаем doc + результат работы report-а.
Для нормальных(любой сложности отчетов с группами и пр.) немного усложним.
Я сделал класс с 2-мя методами
Метод RP c 3-мя параметрами
lparameter fld,mycol,cr && 1- поле, 2- колво колонок в отчете,3 -признак добавления строки таблицы
* вставляем поле и перемещаемся на сл. ячейку
oword.Selection.TypeText(ch_fld)
oword.Selection.MoveRight
* Ниже добавление строчки по 3-му параметру=1
if cr=1
oword.Selection.InsertRowsBelow(1)
endif
oword.visible=.t.
* Вставка в отчет
return fld
Метод Pg_setup для настройки параметров страницы Ворда.
para orient,top_m,bott_m,left_m,right_m
* orient- ориентация (1,0)
* **_m- соотв.отступы
With oword.ActiveDocument.PageSetup
.LineNumbering.Active =.f.
.Orientation=orient && 0- портрет
.TopMargin=top_m && верхний
.BottomMargin =bott_m&& нижний отступ
.LeftMargin =left_m && левый
.RightMargin =right_m&& правый
* .PageWidth =1188.7 &&-а3 840.6 &&-a4
* .PageHeight = 840.6 &&-а3 594.3 && -а4
EndWith
Настройку страницы делаю сразу после добавления пустого документа в BeforeOpen…()
В репорте на каждое поле вешаю RP(“Поле”,”Кол.колонок”,признак 0или 1)
Такой подход позволяет готовить и отображатьпару Report-word.doc в самом разном сочетании
Мой вариант несколько сыроват, думаю кому интересно- доведут до ума.
В примере есть подробные комментарии.
Всем удачи, Дмитрий.
Вложенные файлы
# |
Название |
Тип файла |
Размер |
---|---|---|---|
1 | toword | .zip | 10,28 КБ |