Идею одновременного формирования документа 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 в самом разном сочетании
Мой вариант несколько сыроват, думаю кому интересно- доведут до ума.
В примере есть подробные комментарии.
Всем удачи, Дмитрий.
Классный пример. Впервые вижу, чтоб в Report'е можно было использовать процедуры. Так вот о них
то, я и хочу спросить. Как их найти? Где они распологиются в Report'е? Облазил все там. Ничего не
нашел. В файле proba.frt когда просматриваю в far'е их конечно вижу.
Руслан
Дмитрий Петров
06.06.01 03:18:36
Использование процедур(функций) в Reporte-обычное дело начиная с DOS версий,
единственное что ему нужно знать- где их найти(set proc to .... ).
В этом примере весь код лежит в классе,
экземпляр которого создаю там-же где и
экземпляр Worda в BeforeOpenTables().
Дмитрий.
Victor Mundrievsky
06.06.01 05:15:39
уЛБЮБМ.ъБРХУФЙМ.
тХЗБЕФУС ОБ УФТПЮЛХ
oword.Selection.InsertRowsBelow(1)
OLE error code 0x80020006 ОЕЙЪЧЕУФОПЕ ЙНС
тХЗБЕФУС ОБ УФТПЮЛХ
oword.Selection.TypeText(ch_fld)
(дБООБС ПРЕТБГЙС ОЕРТЙНЕОЙНБ ДМС УЙНЧПМБ
УФТПЛЙ ФБВМЙГЩ).ъОБЮЕОЙЕ ch_fld=" 61.00"
VFP 6.0 SP3 Word97
Victor Mundroevsky Re: Downloads and run it.
message in Line :
oword.Selection.InsertRowsBelow(1)
OLE error code 0x80020006 Unknown name
Message in Line:
oword.Selection.TypeText(ch_fld)
(dannaya operazia neprimenima dlya simvola konza
stroki tablizi).Value ch_fld=" 61.00"
VFP 6.0 SP3 Word97
Дмитрий Петров Re: Для Victor Mundrievsky
Я все это хозяйство проверял на VFP6,
sp3,4+ Word 2000.
Не знаю, первое что приходит в
голову- различия между версиями
Worda.
Самый простой вариант это проверить:
записать добавление строчки таблицы
(Enter когда находишься за крайней)
и впечатать текст
Дмитрий Петров Re: Прошу прощения шлепнул че то не то
продолжаю:
Самый простой вариант это проверить:
записать добавление строчки таблицы
(Enter когда находишься за крайней правой)
и впечатать текст в Worde в виде макроса а потом этот макрос просмотреть.
Возможно пройдет номер не с typetext a c
Insertafter("поле")
Дмитрий. Victor Mundrievsky Re: Word 7 Macros :
Selection.InsertRows 1
Selection.Collapse Direction:=wdCollapseStart
Selection.TypeText Text:="fggfhgfhgf"
Kak eto budet na VFP ? Дмитрий Петров Re: да, похоже
на различие в версиях.
Чтоб адаптировать этот
макрос к VFP рекомендую проверить
все из командного окна
1. создать экземпляр Ворда
oword=createobject("word.application")
2. добавить документ
oword.documents.add()
3. ?type("oword")
4. oword.visible=.t.
***
Дальше из командного окна экспериментировать и смотреть что будет
проиcходить в worde:
Word 7 Macros :
Selection.InsertRows 1
Selection.Collapse Direction:=wdCollapseStart
Selection.TypeText Text:="fggfhgfhgf"
Для vfp будет что-то типа
oword.Selection.InsertRows
oword.Selection.TypeText("fggfhgfhgf")
Должно работать, хотя у меня не
сработало oword.Selection.InsertRows 1,
работает oword.Selection.InsertRows(1),
работает oword.Selection.InsertRows,
все таки похоже на нестыковку версий.
Вобще я хотел показать сам подход
взаимодействия Worda и VFP в репорте.
Кстати Организовать добавление
строчки можно ведь и по другому
напр. добавлять таблицу или шагать
клавишей TAB.(но Бейсиковский макрос все равно
придется адаптировать к VFP)
stav@tel.tavrida.net
06.06.01 05:28:04
Как лучше из VFP вызвать AUTOCAD c передачей ему параметров ( или любое другое приложение ).
Александр Строев. Admin
Re: тест Владимир Журавлев Re: На этот
случай есть актив икс, короый позволяет из фоксовой формы управлять автокадом и вызывать все его
команды.
Я Вам его вышлю по почте
Но вообще на Интернете их несколько вариантов есть
У меня автокада нет, проверить качество работы не могу
Байгужа
15.04.02 09:17:59
Хороший пример!
Но... при малейшем сдвиге Report-а начинает повторно писать в Word (от начала и до конца). И
второе, где все-таки в репорте BeforeOpenTables()? Хотел бы посмотреть. Плиз подскажите.
Дмитрий Петров
15.04.02 09:40:56
Привет,
приведенный пример- это так сырец- лишь демонстрация
идеи. Сейчас у меня есть класс, где идет открытие
отчета как таблицы, копирование ее в новую таблицу,
и вставка в новой таблице вместо выражений
отчета оьращений к методу вывода в ворд,после этого
происходит вывод в ворд копии отчета.
Если интересно, мыльте, чем могу подскажу.
По второму вопросу: метод Beforeopentable()
ищите в списке методов Dataenvirontment отчета
Удачи.