FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9265
Вход
Параллельный вывод Fox-отчета в документ Word.

Формирование Word документа параллельно работе foxpro reporta.


 
Прислал: Дмитрий Петров   Категория: Foxpro и другие приложения


Параллельный вывод 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 в самом разном сочетании
Мой вариант несколько сыроват, думаю кому интересно- доведут до ума.

В примере есть подробные комментарии.
Всем удачи, Дмитрий.



 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.873) Вложение [10.28]kb
Дополнения пользователей
Параллельный вывод Fox-отчета в документ Word.
[+][?]
Рус
05.06.01 18:01:15

Классный пример. Впервые вижу, чтоб в 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 отчета
Удачи.

[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика