crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> как проще создать отчет по БД в виде html файла + вопросы по html
Steklova Olga
  опции профиля:
сообщение 5.5.2012, 14:17
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Здравствуйте! :) В моей программе дошло дело до создания отчета по БД (Firebird). Поделитесь, пожалуйста, опытом.
Мне раньше не приходилось заниматься ни отчетами, ни html. Только еще начала читать про разные теги html.

Про генераторы отчетов говорят на форуме следующее:
Цитата(Гость_Гость_* @ 3.5.2012, 22:17) *
Проект eXaro загнулся ещё в 2009-2010, не скажу точно... Да и бедноват он по своим возможностям, нормальный экспорт только в ods и в html, что не есть супер.

Из вменяемых и дружащих с Qt остался, наверное, только ncreport, но он не хило так платный.

Цитата(Гость_Гость_* @ 3.5.2012, 22:17) *
Если нет ограничений по зависимостям и подойдет отдельная утилита, генерящая репорт из xml или например прям из базы данных, то очень советую JasperReports, он халявный, но тянет за собой Java.
Не сложноват ли JasperReports для начала? Jav'у не знаю. Да, к тому же, моя Qt-шная программа работает с БД Firebird просто через dll, СУБД Firebird на компе не установлена.

Цитата(Гость_Гость_* @ 3.5.2012, 22:17) *
Если документ не шибко сложный и достаточно экспорта в html, можно обойтись xslt/xquery преобразованием, при этом если использовать Qt-ишные процессоры, то даже есть способ пропустить формирование xml документа, как промежуточный этап.
А чуть подробнее можете объяснить последовательность действий и где почитать про это? (Никогда еще не приходилось создавать отчет по БД, тем более используя xslt/xquery.)

А задачка у меня примерно такая.
БД Firebird стоит на том же компе, что и Qt-шная программа, которая с ней работает.
Qt-шная программа работает с БД Firebird просто через dll, СУБД Firebird на компе не установлена.
Оператор просматривает связанные между собой таблицы БД, накладывая на них фильтры.
Потом нажимает кнопку "Создание отчетов", выбирает какой-то вариант отчета из списка. (Этот список "зашит" в программе и при работе программы не меняется.)
Например, такой вариант отчета: "Отчет по таблице T1 (+T2)".
Этот отчет подразумевает, что для каждой записи, отфильтрованной в главной таблице T1
надо в отчет вывести 1-ю таблицу со значениями полей F11, F12 из главной таблицы T1 для этой записи,
под 1-й вывести 2-ю таблицу со значениями полей F21, F22, F23 из дочерней таблицы T2 для записей, соответствующих выведенной записи из главной таблицы.
Отчет должен быть сохранен в виде html файла, который можно будет просмотреть или распечатать в Windows или Linux.

Если не разбираться с ncreport, exaro, JasperReports, а сделать как-нибудь попроще, то, пока что, я представляю себе только один вариант создания отчета в виде html файла:
после выбора варианта отчета, выполняя нужные для этого отчета запросы к БД, прямо в Qt-шной программе заносить в QString & html результаты выполнения запросов, оформляя их с помощью тегов html,
затем создать QTextDocument, сделать для него setHtml с этим html,
затем либо создать QTextDocumentWriter и сделать для него setFileName и write,
либо вместо QTextDocumentWriter воспользоваться QFile.

А в моем случае можно использовать xslt/xquery? Если даже и можно, то не сложнее ли это будет, чем использовать предложенный мною вариант?


Вопрос по тегам html.
Мне надо сделать выравнивание таблицы по центру окна браузера.
Указываю <table align="center">.

А получаю при этом
в Mozilla Firefox 3 выравнивание таблицы по левому краю окна браузера,
в Microsoft Internet Explorer 6 - то, что просила, по центру.
В чем дело? :rolleyes:

Сообщение отредактировал Steklova Olga - 6.5.2012, 17:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 5.5.2012, 14:29
Сообщение #2





Гости








    


Цитата(Steklova Olga @ 5.5.2012, 13:48) *
Здравствуйте! :) В моей программе дошло дело до создания отчета по БД (Firebird). Поделитесь, пожалуйста, опытом.
Мне раньше не приходилось заниматься ни отчетами, ни html. Только еще начала читать про разные коды html.

Про генераторы отчетов говорят на форуме следующее:
Цитата(Гость_Гость_* @ 3.5.2012, 22:17) *
Проект eXaro загнулся ещё в 2009-2010, не скажу точно... Да и бедноват он по своим возможностям, нормальный экспорт только в ods и в html, что не есть супер.

Из вменяемых и дружащих с Qt остался, наверное, только ncreport, но он не хило так платный.

Цитата(Гость_Гость_* @ 3.5.2012, 22:17) *
Если нет ограничений по зависимостям и подойдет отдельная утилита, генерящая репорт из xml или например прям из базы данных, то очень советую JasperReports, он халявный, но тянет за собой Java.
Не сложноват ли JasperReports для начала? Jav'у не знаю. Да, к тому же, моя Qt-шная программа работает с БД Firebird просто через dll, СУБД Firebird на компе не установлена.

Цитата(Гость_Гость_* @ 3.5.2012, 22:17) *
Если документ не шибко сложный и достаточно экспорта в html, можно обойтись xslt/xquery преобразованием, при этом если использовать Qt-ишные процессоры, то даже есть способ пропустить формирование xml документа, как промежуточный этап.
А чуть подробнее можете объяснить последовательность действий и где почитать про это? (Никогда еще не приходилось создавать отчет по БД, тем более используя xslt/xquery.)

А задачка у меня примерно такая.
БД Firebird стоит на том же компе, что и Qt-шная программа, которая с ней работает.
Qt-шная программа работает с БД Firebird просто через dll, СУБД Firebird на компе не установлена.
Оператор просматривает связанные между собой таблицы БД, накладывая на них фильтры.
Потом нажимает кнопку "Создание отчетов", выбирает какой-то вариант отчета из списка. (Этот список "зашит" в программе и при работе программы не меняется.)
Например, такой вариант отчета: "Отчет по таблице T1 (+T2)".
Этот отчет подразумевает, что для каждой записи, отфильтрованной в главной таблице T1
надо в отчет вывести 1-ю таблицу со значениями полей F11, F12 из главной таблицы T1 для этой записи,
под 1-й вывести 2-ю таблицу со значениями полей F21, F22, F23 из дочерней таблицы T2 для записей, соответствующих выведенной записи из главной таблицы.
Отчет должен быть сохранен в виде html файла, который можно будет просмотреть или распечатать в Windows или Linux.

Если не разбираться с ncreport, exaro, JasperReports, а сделать как-нибудь попроще, то, пока что, я представляю себе только один вариант создания отчета в виде html файла:
после выбора варианта отчета, выполняя нужные для этого отчета запросы к БД, прямо в Qt-шной программе заносить в QString & html результаты выполнения запросов, оформляя их с помощью тегов html,
затем создать QTextDocument, сделать для него setHtml с этим html,
затем либо создать QTextDocumentWriter и сделать для него setFileName и write,
либо вместо QTextDocumentWriter воспользоваться QFile.

А в моем случае можно использовать xslt/xquery? Если даже и можно, то не сложнее ли это будет, чем использовать предложенный мною вариант?


Столько вопросов, даже не знаю с чего начать:).
Цитата(Steklova Olga @ 5.5.2012, 13:48) *
А в моем случае можно использовать xslt/xquery? Если даже и можно, то не сложнее ли это будет, чем использовать предложенный мною вариант?

Можно, и если не брать в расчет сложность изучения xslt и/или XQuery(которая не столь и высока), то сложнее не будет точно, объем кода будет меньше, даже с учетом сценариев трансформации, да и производительность такого решения, если отказаться от генерации xml файлов (подробнее об этом ниже), будет повыше, возможно даже намного повыше, но в любом случае ощутимо на больших объемах данных.
Другое дело, что твой вариант тоже можно слегка оптимизировать, отказавшись от написания тегов в ручную, и используя API QTextDocument, но на мой взгляд использование преобразований на много удобней, т.к. позволяет разграничить данные и то как они будут выводится.

Цитата(Steklova Olga @ 5.5.2012, 13:48) *
Если не разбираться с ncreport, exaro, JasperReports, а сделать как-нибудь попроще, то, пока что, я представляю себе только один вариант создания отчета в виде html файла:

Как раз использование средств генерации отчетов, будет проще чем любой другой вариант, в любом случае. Т.к. это их прямая обязанность. Просто именно в случае с eXaro, использовать недокументированный, не поддерживаемый и [IMHOMODE] с не очень жизнеспособной идеей повсеместного использования императивного скрипта для описания отчета [\IMHOMODE], проект не кажется мне разумным. По этому я и предложил варианты известных мне кроссплатформенных проектов, чье развитие оказалось более удачным.

Цитата(Steklova Olga @ 5.5.2012, 13:48) *
А чуть подробнее можете объяснить последовательность действий и где почитать про это? (Никогда еще не приходилось создавать отчет по БД, тем более используя xslt/xquery.)

Про xslt и про xquery, имеется множество литературы и статей, к тому же оба языка если и сложнее SQL то совсем чуть-чуть. Вкратце с помощью одного из этих языков, можно описать процесс преобразования одного xml документа, в другой документ( при этом даже не обязательно xml). В Qt начиная с 4.5.х или даже с более ранней присутствуют интерпретаторы как 1-ого так и 2-ого языка(см. QXmlQuery). Так же имеется возможность представить любые данные в виде источника для выполнения xslt/xquery преобразования - См. QAbstractXmlNodeModel, который по сути выполняет ту же роль как и QAbstractItemModel, только представлением является результат выполнения преобразования, т.е. требуемый документ.
Единственная проблема при использовании встроенных в Qt реализаций xslt и (возможно ) xquery заключается в том что не все версии и конструкции этих языков поддерживаются, что к сожалению делает невозможным использование средств умеющих генерировать файлы преобразований - например Altova Style Vision.

Лично мой совет, если нету каких либо серьезных ограничений использовать один из выше упомянутых генераторов отчетов.
P.S. для использование JasperReports знание Java не обязательно, + есть симпатичный и на мой взгляд более продвинутый(чем у ncreports) редактор отчетов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 5.5.2012, 14:30
Сообщение #3





Гости








    


Прошу прощение за оверквотинг не ту кнопку тыркнул разок. Если не сложно, прибейте 1 цитату и этот мессадж.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 5.5.2012, 20:42
Сообщение #4





Гости








    


Цитата(Steklova Olga @ 5.5.2012, 14:17) *
в Mozilla Firefox 3 выравнивание таблицы по левому краю окна браузера,
в Microsoft Internet Explorer 6 - то, что просила, по центру.

Кстати, а зачем тебе браузеры когда есть ажно QWebKit and QTextBrowser/Edit выбирай что удобней и ориентируйся на них, уж что что а показать и распечатать html документы вполне можно и встроенными средствами. Для второго варианта даже пример есть: qtdemo->Demonstrations->Text Edit.
Да и не придется запариваться что и под какой операционкой установленно у пользователя :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 6.5.2012, 19:32
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Спасибо, Гость_Гость_*, за обзорную информацию :) Смысл более-менее поняла. Надеюсь, станет яснее, когда начну разбираться подробнее.
Видимо, попозже посмотрю и JasperReports, и xslt. Хотя, для первого раза остановлюсь все-таки на своем варианте, так как надо сделать быстрее. Для меня это будет проще.

Цитата(Гость_Гость_* @ 5.5.2012, 14:29) *
твой вариант тоже можно слегка оптимизировать, отказавшись от написания тегов вручную, и используя API QTextDocument
И как тогда создавать таблицу?

Цитата(Гость_Гость_* @ 5.5.2012, 20:42) *
зачем тебе браузеры когда есть ажно QWebKit and QTextBrowser
Для случая, если мои отчеты унесут на другой комп, где не установлена моя программа.

Вопрос с выравниванием таблицы остался открытым.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 6.5.2012, 20:12
Сообщение #6





Гости








    


Цитата(Steklova Olga @ 6.5.2012, 19:32) *
И как тогда создавать таблицу?

QTextTable, QText* классы дают абстракции, на все поддерживаемые части документа, в принципе для формирования не сложного Rich Text, вполне себе достаточно.
Вопросы по HTML, лучше задавать где нибудь на специализированном форуме, мне например за 4 года работы, ни разу не пришлось генерировать html вручную, хотя с документами я работал довольно много.
По поводу "почему так", потому что для не все браузеры одинаково поддерживают веб-стандарты, и не все теги а атрибуты, поддерживаемые браузерами входят в стандарты.
Могу посоветовать ориентироваться не на браузеры, а на какой нибудь офисный пакет, например MS Office, веть тот же ворд прекрасно умеет открывать и редактировать html, более того, шаблон желаемого документа вполне себе можно сверстать в ворде.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Eyellow
  опции профиля:
сообщение 14.5.2012, 10:18
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 23.8.2011
Пользователь №: 2825

Спасибо сказали: 1 раз(а)




Репутация:   0  


Лично я бы для простых отчётов вообще бы не стал заморачиваться с qt-шными текстдокументами и рич-текстами. А просто в базе для каждого отчёта сделал бы процедурку, которая на выходе давала бы нужный HTML.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 21.5.2012, 10:24
Сообщение #8


Активный участник
***

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

Спасибо сказали: 29 раз(а)




Репутация:   8  


Цитата
в Mozilla Firefox 3 выравнивание таблицы по левому краю окна браузера,
в Microsoft Internet Explorer 6 - то, что просила, по центру.
В чем дело?



общий случай для всех браузеров (не проверено, но должно работать):

<div align="center">
<table>
.....
</table>
</div>
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 22.5.2012, 10:17
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Цитата(PAFOS @ 21.5.2012, 10:24) *
общий случай для всех браузеров (не проверено, но должно работать):
<div align="center">
<table>
.....
</table>
</div>
Проверила, не работает.
В Mozilla Firefox 3 предложенный Вами вариант приводит к выравниванию таблицы по левому краю окна браузера.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 25.5.2012, 18:24
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


<table style='margin:0 auto;'>
...
</table>

Проверенно в хроме и FF 3. В ie 6 не работает.

Или старинный способ, считается идеологически неверным, но должен работать даже в ie3:)

<table width=100%>
<tr><td align=center>
    <table>
        .... Данные
    </table>
</td></tr>
</table>


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 2.12.2024, 2:46