В инете видел упоминания об отчетах реализованных как шаблоны(а мож и не шаблоны, может просто доки) ворда, экселя в которые программа-клиент забивает данные.
Ктонить сталкивался с таким? если да, то дайте плиз ссылки где данная тема раскрывется.
"rusrr" <forum@rsdn.ru> wrote in message news:342767@news.rsdn.ru... > hi, great ALL! > > В инете видел упоминания об отчетах реализованных как шаблоны(а мож и не
шаблоны, может просто доки) ворда, экселя в которые программа-клиент
забивает данные. > > Ктонить сталкивался с таким? если да, то дайте плиз ссылки где данная тема
раскрывется.
Я сталкивался. Ничего сложного там нет, конкретные вопросы есть?
> > With best regards, Alexey. > 20030802 17:28
hi, Alexey!
> Я сталкивался. Ничего сложного там нет, конкретные вопросы есть?
Я потому и попросил ссылку что пока конкретных вопросов нет, они появятся после изучения материала или в процессе.
А так в принципе интересуют принципы(тувтАлогия однако) реализации желательно с конкретным примером (мож не кодепожект есть или еще где), плюсы, минусы в сравнении с репорто-строителями (кристал например), или с генерацией внутренними силами проги. Один неоспоримый плюс конечно же сразу виден — удобство для пользователя — нажал кнопку получил готовый док, да и разработчику не надо пользоваться продуктами сторонних производителей — репорто-строителями, и не надо самому создавать отчеты внутри проги. [потому и заинтересовало]
По принципам реализации: клиет формирует документ полностью с чистого листа, или просто вставляет в определенным образом помеченные места дока необходимую инфу. Если второй вариант (я подозреваю что он все же предпочтительней), то как эти места-якоря помечаются (должна быть выработана общая методология если отчетов будет много, иначе ведь и запутаться моно).
"rusrr" <forum@rsdn.ru> wrote in message news:342851@news.rsdn.ru... > hi, Alexey! > > > Я сталкивался. Ничего сложного там нет, конкретные вопросы есть? > > Я потому и попросил ссылку что пока конкретных вопросов нет, они появятся
после изучения материала или в процессе.
Вот именно, в процессе. Ок. Быстрый пример на VB.NET
На форме есть грид и кнопка "Launch Word"
Код:
Dim dt As New DataTable()
Dim wordApp As New Word.Application()
Dim wordFields As Word.FormFields
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
dt.Columns.Add("col1", GetType(String))
Dim dr As DataRow = dt.NewRow()
dr("col1") = "cool"
dt.Rows.Add(dr)
dr = dt.NewRow()
dr("col1") = "very cool"
dt.Rows.Add(dr)
DataGrid1.DataSource = dt
'Datagrid1.DataMember =End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim wordDoc As Word.Document = wordApp.Documents.Add(CObj("rsdn
is.dot"))
wordApp.Visible = True
wordFields = wordDoc.FormFields()
wordFields.Item(CObj("ТекстовоеПоле1")).Result() = _
CStr(dt.Rows(DataGrid1.CurrentRowIndex).Item("col1"))
End Sub
Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, ByVal e
As System.EventArgs) Handles DataGrid1.CurrentCellChanged
wordFields.Item(CObj("ТекстовоеПоле1")).Result() = _
CStr(dt.Rows(DataGrid1.CurrentRowIndex).Item("col1"))
End Sub
В проекте установлена ссылка на СОМ сервер Word 9.0
В ворде создаем пустой документ и кидаем на него текстовое поле. Типа так:
Rsdn is [тут текстовое поле]
Затем сохраняем все это хозяйство как шаблон (*.dot). Из моего примера видно
что я его сохранид как "rsdn is.dot"
Ну и все — запускаем приложение, нажимаем кнопку и все! Можно перемещатся по
записям в гриде и соответствующее поле в щаблоне будет обновляться.
На сколько я знаю, можно к вордовому документу как-то датабиндинг
прикрутить, чтобы не писать всякие обработчики DataGrid1_CurrentCellChanged
(да и вообще, так правильней). Но это я уже тебе так сходу не вспомню.
> А так в принципе интересуют принципы(тувтАлогия однако) реализации
желательно с конкретным примером (мож не кодепожект есть или еще где),
плюсы, минусы в сравнении с репорто-строителями (кристал например), или с
генерацией внутренними силами проги. Один неоспоримый плюс конечно же сразу
виден — удобство для пользователя — нажал кнопку получил готовый док, да и
разработчику не надо пользоваться продуктами сторонних производителей —
репорто-строителями, и не надо самому создавать отчеты внутри проги. [потому
и заинтересовало]
Это да. Плюс ко всему, можно на лету все это формировать: у FormFields есть
метод Add. Здесь уже нужно подробно доку по ворду смотреть.
> > По принципам реализации: клиет формирует документ полностью с чистого
листа, или просто вставляет в определенным образом помеченные места дока
необходимую инфу. Если второй вариант (я подозреваю что он все же
предпочтительней), то как эти места-якоря помечаются (должна быть выработана
общая методология если отчетов будет много, иначе ведь и запутаться моно).
Ну, собственно, я уже объяснил как: Создаешь нужный шаблон, например бланк
договора, вместо фамилий, типа договора и прочей фигни — вставляешь поля с
тулбара "Формы". Это могут быть поля ввода, поля со списком, чекбоксы.
После этого сохраняешь как шаблон и вперед!
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Вот именно, в процессе. Ок. Быстрый пример на VB.NET AS>На форме есть грид и кнопка "Launch Word"
AS>Код: AS>
AS> Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
AS>System.EventArgs) Handles MyBase.Load
AS> dt.Columns.Add("col1", GetType(String))
AS> Dim dr As DataRow = dt.NewRow()
AS> dr("col1") = "cool"AS> dt.Rows.Add(dr)
AS> dr = dt.NewRow()
AS> dr("col1") = "very cool"AS> dt.Rows.Add(dr)
AS> DataGrid1.DataSource = dt
AS> 'Datagrid1.DataMember =AS> End Sub
AS>
беее
Коварный вопрос — а причем здесь word template, если ты документ (content) делаешь руками?
Какие-то Rows.Add — это зачем? Получается, что ты весь отчет положил в приложение, а потом
его рисуешь. Можно рисовать на экране, можно на принтере, а можно в ворде. Это как в CR
динамически создавать статический (по полям) отчет.
Hello, bizhan!
You wrote on Mon, 04 Aug 2003 01:03:12 GMT:
[]
b> беее
Не гони!
b> Коварный вопрос — а причем здесь word template, если ты документ b> (content) делаешь руками? Какие-то Rows.Add — это зачем? Получается, что b> ты весь отчет положил в приложение, а потом его рисуешь. Можно рисовать b> на экране, можно на принтере, а можно в ворде. Это как в CR динамически b> создавать статический (по полям) отчет.
Rows.Add для наглядности. Естественно, никто не будет создавать таблицы в
самой программе — данные обычно беруться из базы. Чтобы примерчик не
перегружать всякими соединениями и выборками я и создал таблицу в ручную.
А шаблон документа очень даже нужен. Вот делаешь ты какой-нить софт по
автоматизации банковской деятельности (например, регистрация договоров на
услуги по оплате городского телефона). Здесь просто необходим строгий бланк
и печатать его нужно для каждого клиента. И как ты это сделаешь без ворда?
(CR не в счет).
А на счет статичности я уже сказал, что можно в зависимости от ситуации
добавлять и удалаять некоторые поля из бланка прямо в процессе работы
(иногда это обязанность ложиться на хрупкие плечи оператора).
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Hello, bizhan!
AS>А шаблон документа очень даже нужен. Вот делаешь ты какой-нить софт по AS>автоматизации банковской деятельности (например, регистрация договоров на AS>услуги по оплате городского телефона). Здесь просто необходим строгий бланк AS>и печатать его нужно для каждого клиента. И как ты это сделаешь без ворда? AS>(CR не в счет).
Ой, действительно, ну совсем никуда без ворда...
Резюме: чтобы сделать какойлибо документ у клиента должен стоять ворд и точка.
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Hello, bizhan! AS>You wrote on Mon, 04 Aug 2003 01:03:12 GMT:
AS>[]
b>> беее
AS>Не гони!
AS>Rows.Add для наглядности. Естественно, никто не будет создавать таблицы в AS>самой программе — данные обычно беруться из базы. Чтобы примерчик не AS>перегружать всякими соединениями и выборками я и создал таблицу в ручную.
Коварный вопрос — а зачем тогда приводить это в пример, если никто никогда
так делать не будет?-))
AS>А шаблон документа очень даже нужен. Вот делаешь ты какой-нить софт по AS>автоматизации банковской деятельности (например, регистрация договоров на AS>услуги по оплате городского телефона). Здесь просто необходим строгий бланк AS>и печатать его нужно для каждого клиента. И как ты это сделаешь без ворда? AS>(CR не в счет).
Я о том же, что нужен шаблон. И с шаблоном надо работать, а не создавать документ
руками.
А еще другой вариант — html и печатать его через ie. А ie есть у всех.
Я сталкивался.
Я понимаю, что реклама здесь запрещена, но все же, если моредароты разрешат, ты увидищь мой ответ.
Попробуй буржуйский компонентик, называется ekrtf.
Отчет создается из шаблона RTF, встроеннве функции, много возможностей.
Мне понравился.
Также есть наш отечественный вариант. Могу познакомить с разработчиком.
Если не найдешь исходники, связывайся со мной. ICQ: 161262935, Ulyanitsky@list.ru,
поделюсь по-братски.
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Вот именно, в процессе. Ок. Быстрый пример на VB.NET
------покоцано-----
Интересно, насколько быстро все эти конструкции работают? Мне приходилось писать на VBA в самом ворде, и конвертилку для ёкселя. Впечатления мрачные — документ на пару страниц готовится больше минуты.
Здравствуйте, MNZ, Вы писали:
MNZ>Здравствуйте, bizhan, Вы писали:
B>>А еще другой вариант — html и печатать его через ie. А ie есть у всех.
MNZ>А вы когда-нибудь печатали через ж..., простите, через IE? Те ещё прелести, надо сказать. Хотя как вариант, конечно, может и пойдёт. На любителя.
Через ж* не печатал, а через IE печатал. И печатаю в одной программе.
Аккуратно готовится html (типа шаблона для ворда) и печатается.
Проблемы были только с печатью через netscape моих html.
Может быть вы их готовить не умеете?-)
Наш код такой:
— генерим html на диске
— ShellExecute(NULL,"print","report.html",NULL, work_dir,SW_SHOWNORMAL);
И печатает ведь.
Павел
p.s Я html привел вообще для примера. Если человек не хочет использовать нормальные репортеры, то что ворд,
что html — все едино.
У нас html был выбран потому, что таковы требования были — минимальный размер дистрибутива и максимальное
число конфигураций. Сопровождать правда это дело муторно, но работает.
Предупреждая вопросы — и через ворд печатали. И через шаблоны, и через word basic, и руками генерили, и из
ворда к базе ходили (к слову, самое удобное оказалось для пользователя).
Hello, bizhan!
You wrote on Mon, 04 Aug 2003 14:41:13 GMT:
хъ
B>Предупреждая вопросы — и через ворд печатали. И через шаблоны, и через
word basic, и руками генерили, и из B>ворда к базе ходили (к слову, самое удобное оказалось для пользователя).
Здравствуйте, bizhan, Вы писали:
B>Через ж* не печатал, а через IE печатал. И печатаю в одной программе. B>Аккуратно готовится html (типа шаблона для ворда) и печатается. B>Проблемы были только с печатью через netscape моих html.
B>Может быть вы их готовить не умеете?-)
B>Наш код такой: B>- генерим html на диске B>- ShellExecute(NULL,"print","report.html",NULL, work_dir,SW_SHOWNORMAL); B>И печатает ведь.
Слушай, а как ты боролся с его любовью резать табличку посреди строки при межстраничном переносе?
... << RSDN@Home 1.1 alpha 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, rusrr, Вы писали:
R>hi, great ALL! R>В инете видел упоминания об отчетах реализованных как шаблоны(а мож и не шаблоны, может просто доки) ворда, экселя в которые программа-клиент забивает данные. R>Ктонить сталкивался с таким? если да, то дайте плиз ссылки где данная тема раскрывется.
R>With best regards, Alexey. R>20030802 17:28
Если тебя в виде шаблонов отчётов устраивает RTF, то RepoRTF:http://www.vsi.ru/~apl/.
Причём там усё совершенно просто(до нельзя).