лХУЮХК яЮБХМ
28.12.01 17:31:47 |
|
Задачка создания отчетов, в которых пользователь может вносить изменения для FOXа - это задача...
Я применяю вот что: основой отчета является документ WORD, допустим договор с клиентом. Данные
выбираются в таблицу с одной записью и через стандартный механизм слияния всобачиваются в документ.
Однако в том же документе есть и данные отображаемые в виде таблицы с любым числом строк.
В шаблоне документа имеется заголовок таблицы и одна пустая строка.
Для заполнения такой таблицы нужно открыть документ, переместиться в нужное место и заполнить
таблицу.
Я делаю так:
dd=ddeinitiate("winword","System")&& устанавливаем связь,если WORD уже запущен dd - хендлер
if dd<0 &&если нет
oword=create('word.application')&&Запущаем WORD
dd=ddeinitiate("winword","System")&&устанавливаем связь
else
dd=ddeinitiate("winword","System")&&устанавливаем связь
endif
if dd<0
=messagebox('Не удалось MICROSOFT WORD')
retu
endif
ELSE
RETU
ENDIF
=ddeexecute(dd,'[Fileopen "документ.doc"]')&&открываем документ , в нем уже будут слиты данные о
клиенте и пр.
=ddeexecute(dd,'[paradown число параграфов]')&&смещаемся в начало пустой строки в таблице
=ddeexecute(dd,'[TableInsertRow '+'"'+allt(str(кол-во записей))+'"'+"]" )&& ///*добавляем в
таблицу столько строк,сколько нужно,если суммарные итоги не нужны, то на одну меньше ,поскольку
она уже есть*////////
Далее запускается прога,которая выглядит так:
***********************************************************
sele dog3&&выборка для заполнения таблицы в Ворде
все вводимые значения в ddeexecute() должны быть строковыми,поэтому кое-что преобразую по месту
go top
gggg=1&&счетчик кол-ва строк
DO while !eof()
SCATT memv
=ddeexecute(dd,'[Insert "+'"'+allt(str(gggg))+'"'+"]')"&&номер по порядку
=ddeexecute(dd,'[NextCell]')&&перешли на след.ячейку таблицы
=ddeexecute(dd,'[Insert "+'"'+allt(m.pog_dat)+'"'+"]')"&&Дата какая-то и так до конца списка
=ddeexecute(dd,'[NextCell]')
=ddeexecute(dd,'[Insert "+'"'+allt(str(m.nominal,13,2))+'"'+"]')"
=ddeexecute(dd,'[NextCell]')
=ddeexecute(dd,'[Insert "+'"'+allt(str(m.nominal-m.disc_sum+m.sum_prc,13,2))+'"'+"]')"
=ddeexecute(dd,'[NextCell]')
=ddeexecute(dd,'[Insert "+'"'+allt(str(m.disc_veks,13,10))+'"'+"]')"
=ddeexecute(dd,'[Linedown ]')
=ddeexecute(dd,'[StartOfRow]')
Skip
gggg=gggg+1
ENDDO
****Заполнение строки ИТОГО**********
calc sum(nominal) to sum1
calc sum(nominal-disc_sum+sum_prc) to sum2
=ddeexecute(dd,'[EndOfRow]')
=ddeexecute(dd,'[PrevCell ]')
=ddeexecute(dd,'[PrevCell ]')
=ddeexecute(dd,'[Insert "+'"'+allt(str(sum1,13,2))+'"'+"]')"
=ddeexecute(dd,'[NextCell ]')
=ddeexecute(dd,'[Insert "+'"'+allt(str(sum2,13,2))+'"'+"]')"
*************Конец проги***********************************
Конечно, эту штуку надо бы, причесать, укоротить через перебор полей в цикле и сделать более
универсальной,
но недостаток природной лени не позволяет.
Может кому-то пригодится
|
|