Russian Qt Forum

Qt => Печать => Тема начата: Cyrax от Август 17, 2006, 23:56



Название: Генерация отчётов средствами Qt
Отправлено: Cyrax от Август 17, 2006, 23:56
Мне необходимо написать большое клиентское приложение с возможностью генерации новых отчётов в runtim'е. Нужно выбрать инструментарий из [C++ Qt] и [C# .NET]. Сам я сторонник Qt, хотя явных (крупных) преимуществ... [Сравнению C++, Qt и C# скоро быдет посвящена отдельная тема.] Всё бы хорошо, но есть одно НО: у Qt нет развитых средств для генерации отчётов. :cry:

По генерации отчётов средствами Qt в инете информации очень мало. В основном, предлагают использовать внешние генераторы отчётов. Но мне необходимо, чтобы генератор работал вместе с Qt и под Win'ду, и под Linux (и др.), т.е. был таким же кроссплатформенным. Но таких нет! (буду рад, если ошибаюсь...)

Вот одно из сообщений, которое я нашёл:
Цитировать

Посмотри http://hardclub.donntu.edu.ua/projects/qt/pages/index.htm
FastRepot'а в QT нет, но возможность формирования отчетов есть, не
делал, но читал. По ссылке ты найдешь книгу на русском, там указано
более внятно, чем я смогу объяснить. Печать и генерация отчетов в QT
почти одна и та же тема.

Здесь ссылаются на книгу по Qt, где рассматривают средства печати отчётов в Qt. Довольно интересный материал, но тем не менее: если других средств нет, то получается, что фактически придётся самому писать генератор. В первую очередь это касается некоторой оболочки типа FastReport'а, которая позволит визуально "лепить" форму (шаблон) отчёта (обязательное требование - в runtime'е).

Что касается C#, то там много всяких генераторов, наиболее развитые и эффективные - FastReport Studio, Report Sharp-Shooter и StimulaReport .NET. Хоть они и платные, но всё же можно найти кряки.

Получается, что в отношении генерации runtime-отчётов у C# есть явное преимущество (буду рад, если меня переубедят...).

Так вот, хотелось бы иметь объективную картину по этому вопросу, узнать мнение специалистов. Что препятствует разработке Qt-генератора отчётов?

Может быть, в последних 4-х версиях что-то появилось?
И вообще интересно, что по этому поводу считает сама Trolltech, ведь этот вопрос возник давно.

Помню, на каких-то форумах люди рассуждали о деталях разработки генератора отчёта под Qt - похоже, собирались его написать. Так вот, может быть сейчас уже что-то есть, что можно использовать?

Даже в худшем случае, если ничего и нет, неплохо было бы услышать убедительные доводы в пользу Qt (против C#), несмотря на отсутствие развитых средств генерации runtime-отчётов...


Название: Генерация отчётов средствами Qt
Отправлено: Hordi от Август 18, 2006, 09:23
Что-то не пойму я... Qt - это GUI библиотека, ну может чуть больше.  С# - это язык, ну тоже чуть больше. При чем здесь отчеты? Вы от MFC тоже отчетов требуете?
    Проблема в том, на каком языке написаны генераторы отчетов, т.к. от этого зависит интеграция в программный продукт, также имеет значение, предусматривалась ли возможность в генераторе интерграция в произвольные программные продукты.
    На данный момент можно ОДНОЗНАЧНО сказать - под Линукс развитых (типа FastReport) генераторов отчетов НЕТ! Есть всякие jasper'ы и т.п., с которыми можно делать, в общем-то многое, и все как бы и хорошо, но это если человек никогда ранее не работал на виндовых тулзах.
    Делаем вывод: если у тебя программа серьезно ориентирована именно на отчеты, то не парь себе мозги, если отчеты - это просто показ в табличном виде данных + шапки-сноски, то под Линукс этих тулзовин достаточно, и из Qt их заюзать очень даже можно.

Собственно, мое ИМХО...


Название: Генерация отчётов средствами Qt
Отправлено: SLK от Август 18, 2006, 22:04
есть неплохие генераторы, которых вполне достаточно для простеньких отчётов  ....  http://sourceforge.net/projects/ncreport ,  http://www.openrpt.org

сам сейчас использую ncreport.
до ncreport пользовал только QTextDocument::print для отчётов ..... правда пришлось подредактировать в исходниках QT функцию print, чтоб уменьшить отступы по краям, а то 2 см больно много по дефолту.

А так, хорошо развитых генераторов типа FastReport Studio и иже с ним, чтоб под windows\linux да под QT4 были ..... действительно нету пока.  
Зато есть над чем работать :)


Название: Генерация отчётов средствами Qt
Отправлено: Cyrax от Август 19, 2006, 00:59
:? Что Qt - прежде всего GUI библиотека, это конечно так. Что "чуть больше" - тоже верно. И возможно (и даже скорее всего) требовать от неё генератора отчётов как составную часть библиотеки будет излишним. Достаточно QtDesiner'а как необходимого средства для визуального построения интерфейса.
Что касается MFC, то в отличие от Qt это чистая GUI-библиотека, не содержащая "чего-то большего", даже визуального построителя интерфейса. Она не претендует ни на что, кроме графической библиотеки. Поэтому, от MFC требовать генератора отчётов, естественно, глупо. Есть, конечно, расширения библиотеки MFC, вплоть до визуального построителя диаграмм и таблиц (может быть и генератора отчётов - не уточнял), но всё это - результат работы сторонних фирм и не имеет непосредственного отношения к Microsoft'овской MFC.

Теперь вернёмся к Qt. Qt - это не просто графическая библиотека. Это кроссплатформенная графическая библиотека. И даже не только графическая, а кроссплатформенная библиотека, ориентированная на разработку приложений различной сложности (сочетание "любой сложности" будет звучать неоправданно громко) (конечно, о комбайнах типа C++ Builder'а речь не идёт). Поэтому, с одной стороны, для разработки полноценных программ дополнительные требования к библиотеке предъявляет реальная кроссплатформенность (в отличие от ложной в случае с .NET), с другой стороны - ориентация на широкий спектр приложений. В результате мы имеем средства для работы с: базами данных, таймером, потоками, XML, принтером, звуком. Даже контейнеры, входящие в STL, были переписаны в Qt. Тем, кто сомневается,предлагаю ответить на вопрос "Зачем графической библиотеке нужно работать с сетью?" Здесь я имею ввиду естественную необходимость, а не причины искусственного характера.
Таким образом, Qt уверенно выходит за рамки простой GUI-библиотеки.
Следовательно, предположение о возможности существования генератора отчётов в составе Qt не бессмысленно...

Наиболее вероятными решениями (по крайней мере, на данный момент) задачи генерации отчётов в Qt являются:
1. Разработка генератора отчётов исключительно средствами Qt. Это может сделать кто угодно, только займёт это много времени.
2. Разработка сторонними компаниями совместимого с Qt генератора отчётов, написанного тоже на С++, такого же кроссплатформенного. Здесь можно привести пример генератора отчётов StimulaReport .NET для C#, полностью с ним совместимого, также под платформу .NET.

Все вышеизложенные рассуждения выражают моё личное мнение. Многие могут со мной не согласиться. 8)

Теперь конкретно по теме.
Что имелось ввиду под словами "не парь себе мозги"? Насчёт самостоятельной разработки небольшого генератора под Qt (средствами Qt)? Или на счёт того, стобы остановиться на С#?

Отчёты в моей программе довольно простые (без группировки и без графики). Главное требование - генерация новых шаблонов (форм) в runtim'е. Так вот, основной вопрос заключается в том, есть ли какие-нибудь средства генерации отчётов (runtime-отчётов!), которые не свели бы на нет все преимущества кроссплатформенности библиотеки Qt.   8) 8) 8)
_____________________________________________
Всё вышеизложенное относится к сообщению Hordi.
SLK, спасибо за ссылки, но пока твоё сообщение не переварил - спать охота... :)


Название: Генерация отчётов средствами Qt
Отправлено: Admin от Август 19, 2006, 01:58
все таки хотелось бы сказать

кроссплатформенных отчетов нет, пока нет, может в QT5 появится :)

в винде я с переменным успехом пользовал FastReport3, они только начинали писать COM обвязку для C++. Потом забросил.

Всех лучше с отчетами у Builder с его VCL.


Название: Генерация отчётов средствами Qt
Отправлено: Hordi от Август 19, 2006, 10:07
Попробуй jasper.
Если отчеты простые и есть время - напиши сам, для простых случаев - это месяц работы для 1-2 программистов.


Название: Генерация отчётов средствами Qt
Отправлено: Cyrax от Август 19, 2006, 21:37
Почему я не рассматриваю вариант использования FastReport'а - по некоторым причинам я против C++ Builder'а. Что касается переносимости, то и с CLX, и с Kylix есть определённые проблемы.
Кстати, с C# тоже имеются проблемы с переносимостью - Microsoft'овских Framework'ов для других ОС нет, только сторонних производителей. А их Framework'и полностью и без глюков оригинальную функциональность не обеспечивают... :?

Отчёты, конечно, у меня простые. И я бы с удовольствием написал Qt-ный генератор, но со временем у меня довольно туго. Поэтому вынужден искать готовые решения. Как варианты - OpenRPT, NCReport и Jasper. С ними я пока ознакамливаюсь, поэтому сейчас ничего конкретного написать не могу. Думаю, завтра ситуация прояснится... 8)


Название: Генерация отчётов средствами Qt
Отправлено: Cyrax от Август 20, 2006, 19:07
Насколько я понял, OpenRPT написан на Qt. Но в OpenRPT нельзя создавать отчётные шаблоны в runtim'е (нет runtime-дизайнера). Кроме того, он ориентирован прежде всего на PostgreeeSQL. Работа с другими БД возможна только после установки Qt-драйверов для этих БД и модификации каких-то исходников... :?

Что касается NCReport, то с БД у него попроще - работа с ними идёт через Qt. :)
Но может ли он генерировать новые шаблоны отчётов в runtim'е?
На каком Qt написан дизайнер?
И как быть с header'ами и footer'ами в дизайнере? Ставить программно?
Допустимы ли вертикальные надписи?

И где найти доки по NCReport?

Какие объективные преимущества у NCReport'а по сравнению с OpenRPT?

Что касается jasper'ов, то, как я понял, там динамически формировать шаблоны отчётов нельзя (только до компиляции). Да и написаны они на Java...

P.S.: как расшифровывается "jasper"? 8)


Название: Генерация отчётов средствами Qt
Отправлено: SLK от Август 21, 2006, 12:25
Цитировать
Но может ли он генерировать новые шаблоны отчётов в runtim'е?

Не может (не представляю, зачем такое может понадобится), хотя ничего не мешает сделать генерацию шаблонова самому .... там не слишком сложная XML структура. Если имеется в виду как-то зашивать XML шаблон в exe, а не держать его отдельно в файле (чтоб юзеры не добрались) .... так это делается запросто через ресурсы, пробовал сам - работает.
Цитировать
На каком Qt написан дизайнер?

на QT3, изначально делался, как я понимаю, под linux. Но я его прекрасно скомпилил и под win32 (mingw).
Цитировать
И как быть с header'ами и footer'ами в дизайнере? Ставить программно?

header-ы и footer-ы задаются в шаблоне своими тегами .... естественно в дизайнере это сделать можно. Можно сделать для листа и\или для секций (группировка details по признаку) нельзя только сделать Header и footer для всего отчёта, это минус, но он мне не слишком мешает.  (теоритически если у всего details один признак, то для Report Header\Footer можно воспользоватся Section header\footer .... но я так делать не пробовал пока)
Цитировать
Допустимы ли вертикальные надписи?

Да, в том числе и так называемые водяные знаки\надписи
... для любого объекта в шаблоне можно задать Rotation angle
Цитировать
И где найти доки по NCReport?

таких нет .... есть примеры шаблонов и пример кода
Цитировать
Какие объективные преимущества у NCReport'а по сравнению с OpenRPT?

OpenRPT вроде как мощнее и старше .... но мне их дизайнер не очень понравился ... к примеру нельзя выдилить группу обьектов на шаблоне и переместить ..... всё надо таскать по одному ..... в ncreport  это можно .... и не нашел я примеров встраивания в код генератора openRPT ... может плохо искал?
Ncreport моложе, а дизайнер вообще только недавно вышел в бета версии и пока компилится только под QT3. Но зато генератор легко встраивается в код и есть в полноценной QT4 версии (без использования Qt3Support4)


Название: Генерация отчётов средствами Qt
Отправлено: Gryz от Август 22, 2006, 08:22
Цитата: "Cyrax"
На каком Qt написан дизайнер?

На том же, что устанавливалось вместе с дизайнером


Название: Генерация отчётов средствами Qt
Отправлено: Cyrax от Август 22, 2006, 11:49
Designer я ещё не поставил. У меня Qt4...
Вопрос к Gryz: какой ещё Qt ставится вместе с дизайнером ???

...


Название: Генерация отчётов средствами Qt
Отправлено: SLK от Август 22, 2006, 11:52
Цитата: "Gryz"
Цитата: "Cyrax"
На каком Qt написан дизайнер?

На том же, что устанавливалось вместе с дизайнером

Надо читать с начала :) ... речь шла о дизайнере отчётов для NcReport, а не про дизайнер форм QT


Название: Генерация отчётов средствами Qt
Отправлено: Cyrax от Август 22, 2006, 12:49
Цитата: "SLK"
Цитата: "Gryz"
Цитата: "Cyrax"
На каком Qt написан дизайнер?

На том же, что устанавливалось вместе с дизайнером

Надо читать с начала :) ... речь шла о дизайнере отчётов для NcReport, а не про дизайнер форм QT


Я так и понял. Вопрос остаётся: какой Qt ставится вместе с дизайнером отчётов NCReport ???


Название: Генерация отчётов средствами Qt
Отправлено: SLK от Август 22, 2006, 13:35
Цитата: "Cyrax"

Вопрос остаётся: какой Qt ставится вместе с дизайнером отчётов NCReport ???

шутка?   :?
Написал вверху уже ... для компиляции дизайнера NcReport нужен QT3 !!!
Если собиралось под win32(mingw) то в папку к полученному exe, добавляем qt-mt3.dll и mingwm10.dll
всё, дизайнером можно пользоваться.

Могу поделится уже готовым, но не куда выложить .......


Название: Генерация отчётов средствами Qt
Отправлено: Cyrax от Август 22, 2006, 18:11
Да я понял, что Qt3 нужен!..

Цитировать
Могу поделится уже готовым, но не куда выложить .......

Было бы неплохо ...  можно на мыло:  cyrax-temp@nm.ru.

А нельзя скомпилить статически?


Название: Генерация отчётов средствами Qt
Отправлено: SLK от Август 22, 2006, 19:15
Цитата: "Cyrax"

Было бы неплохо ...  можно на мыло:  cyrax-temp@nm.ru.

А нельзя скомпилить статически?


Отправил .......
статически наверно можно, не озадачивался этим вопросом.
по любому dll будет, у меня mingw в динамической сборке :)


Название: Генерация отчётов средствами Qt
Отправлено: Cyrax от Август 22, 2006, 21:41
Не вижу твоего файла... Мой ящик пуст...
Попробуй ещё раз.

Хочу уточнить требование насчёт runtime-генерации шаблонов.
Нужно, чтобы пользователь (не программер) мог без проблем модифицировать существующий шаблон или слепить новый - визуально. Т.е. указываются данные и их расположение + всякие линии, прямоугольники. В основном отчёты будут в табличной форме, но везде будут подписи в конце документа.
При этом дизайнер не обязательно должен запускаться из моей программы (с NCReport такого нельзя..), можно запускать и работать с ним отдельно, создавать шаблоны и юзать их из главной проги.

Можно встроить дизайнер в свою прогу? Сырцы то все есть...
Хотя... можно запустить его и из своей проги (выполнить обычную команду запуска) без встраивания. Но самый оптимальный вариант, конечно, встроенный дизайнер. Тогда и ограничить права пользователей (на работу с шаблонами) будет легче...

В любом случае мне нужно запрятать все шаблоны, чтобы к ним не было простого доступа. Можно, например, через ресурсы. НО: шаблоны должны храниться в БД на сервере (будет MySQL), ведь клиентов может быть много... 8)


Название: Генерация отчётов средствами Qt
Отправлено: SLK от Август 23, 2006, 12:15
Твой ящик не принял письмо ... message size exceeds my databytes limit
размер zip-а почти 4мб.  

Да, задачка у тебя.  
Принципиально в ncreport уже заложена возможность хранить шаблоны в БД, хоть этого и нет в примерах.  Документации тоже нет.
(Следующее выяснил просто изучая исходники)
Структура БД для хранения шаблонов должна быть примерно такой ...
Код:
CREATE TABLE sys_reports (
  pk INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  reportdef TEXT NULL,
  PRIMARY KEY(pk)
);

CREATE TABLE sys_reportforms (
  form_id VARCHAR(255) NOT NULL,
  report_fk INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(form_id, report_fk),
  INDEX sys_reportforms_FK(report_fk),
  FOREIGN KEY(report_fk)
    REFERENCES sys_reports(pk)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
);

При этом в генераторе для выборки шаблона отчёта нужно пользоватся в место report->setReportFile( "myreport.xml" ); функциями report->setReportID( reportID ); где reportID может быть как int так и QString Перед этим нужно предворительно выполнить report->setParseMode(NCReport::fromDatabase)

Если модифицировать ncreportdesigner так чтобы он писал и открывал отчёты не из файлов, а из БД, то твоя задача вполне может быть решена.
"Я так думаю" (с) Мимино  

PS Буквально вчера вышла beta2 версия ентого дизайнера отчётов ...ещё даже не смотрел.


Название: Генерация отчётов средствами Qt
Отправлено: Cyrax от Август 28, 2006, 00:12
... возникли проблемы с инетом ...

SLK, если ты ещё на связи, скинь скомпиленный designer на cyrax-temp@mail.ru - там ограничение на 10 метров.
Если можно, beta2... 8)


Название: Генерация отчётов средствами Qt
Отправлено: SLK от Август 30, 2006, 19:01
Отправил beta2


Название: Генерация отчётов средствами Qt
Отправлено: Cyrax от Сентябрь 22, 2006, 22:44
SLK, спасибо за дезинёр. Закачал с ящика только на днях...
Но я вот о чём подумал. Если для дезайнера нужен Qt3, а мой проект будет
написан на Qt4, то ничего хорошего из этого не выйдет. К тому же, если
как-то получится встроить дизайнер в код, то тем более понадобится Qt4-дизайнер.

Теперь по поводу генератора NCReport. Его сырцы я скомпилил, получил ncreport.exe.
Что ему нужно для запуска. И вообще, что он делает. При запуске выводит сообщение
об ошибке: Could not load database driver.
В исходниках копаться тяжко, особенно вечерком. Хочется сразу всё и быстро... :)

(*) Что касается генератора отчётов, то я представляю себе набор классов, которые ты в своей программе используешь для генерации отчётов по шаблонам. Меня смуща ют твои слова (предыдущие посты) о том, что в NCReport генератор легко встраивается в код. А как можно работать с генератором не иначе, как в своём коде...
Он что, самостоятельная программка (ncreport.exe) ?


А вообще, думаю, может стоит остановиться на OpenRPT. Дело в том, что необходимо выполнить следующие требования:
1. Генератор отчётов должен быть кросслпатформенным, желательно написан на Qt
2. Обязательно наличие дизайнера шаблонов.
3. Русская и английская локализации этого дизайнера
4. Работа генератора отчётов (включая дизайнер) с MySQL
5. Возможность сохранения шаблонов в базе данных
6. Желательно (но не обязательно) вызывать дизайнер шаблонов из своей программы (в runtime). Подобно FastReport'у у Builder'а. При этом в своей программе должен осуществляться максимальный контроль за действиями пользователя в дизайнере. Подобные средства, как я помню, предоставляет FastReport. Что именно - не знаю (кроме вызова дизайнера шаблонов в runtime), но что-то такое там есть.
Кстати, если кто работал с FastReport'ом, неплохо было бы изложить в двух словах, как там осуществляется такой контроль и чем может управлять главная программа (вызвавшая дизайнер шаблонов)...

Теперь рассмотрю все пункты в отношении NCReport'а и OpenRPT.
1. Оба написаны на Qt. Но дизанер NCReport - на Qt3. Такой вариант не подойдёт, если только не дождаться, пока выйдет Qt4-дизайнер. OpenRPT, вроде написан на Qt3, но можно использовать Qt3 Support Library.
2. Дизайнеры шаблонов есть и там, и там.
3. С NCReport'ом, наверное будут проблемы. А вот OpenRPT имеет многоязыковую поддержку.
4. NCReport с MySQL работает, а вот с OpenRPT не совсем понятно...
5. В OpenRPT - запросто (функционально обеспечивается), а вот в случае с NCReport'ом - придётся немного модифицировать код, а ведь это нежелательно... Да и не проверено, будет ли работать...
6. В NCReport такого нет, а в OpenRPT - не зн...

Кстати, 6-й пункт нужен для того, чтобы, во-первых пользователям не пришлось работать с двумя программами - основной и дизайнером шаблонов, и, во-вторых, чтобы контролировать пользователя во время его работы с дизайнером, в-третьих, чтобы компилить всё можно было через один makefile...

Преимущества OpenRPT:
1. Многоязыковая локализация
2. Возможность сохранения шаблонов в БД
3. Функциональность шире. Здесь на меня оказал впечатление его интерфейс - солидно выглядит по сравнению с NCReport'ом. Сам я пока не работал с OpenRPT (не могу скомпилить - у меня Qt4)

Преимущества NCReport:
1. Возможность перемещения группы объектов в дизайнере
2. Проще встраивается генератор в код - здесь не совсем понятно (* выше)

Таким образом, OpenRPT удовлетворяет больше требований (главным образом, локализация и
шаблоны в БД)...
Но вот проблема вызова дизайнера шаблонов из своей программы (в runtime) остаётся...

________________________________________
Что из себя представляет Qt3 Support Library ?
На каком Qt написан OpenRPT ?
В OpenRPT какие языки поддерживаются ?
OpenRPT ориентирован на PostgreeSQL, а как он ладит с MySQL ?
В OpenRPT есть возможность реализации пункта 6 ?
В NCReport 2.0 не появилась возможность перемещения группы объектов ?
В OpenRPT есть footer'ы и header'ы для всего отчёта ?
Как компильнуть OpenRPT (2.0) ?
Как в FastReport, кроме вызова дизайнера шаблонов в runtime, реализуются элементы пункта 6 (в 2 словах) ?
8)
Даже если никак не получится встроить дизайнер шаблонов в код, то как создать файл проекта, чтобы можно было компилить и свою прогу, и дизайнер одним махом...


Название: Генерация отчётов средствами Qt
Отправлено: Cyrax от Сентябрь 23, 2006, 23:46
Забыл про одно требование:
7. Возможность препросмотра.
Как OpenRPT и NCReport справляются с этим делом ?


Название: Генерация отчётов средствами Qt
Отправлено: C.H. от Сентябрь 24, 2006, 21:48
NCReport компилял под Вин и Ку4 вместо MySQL базы подпихнул ему QSqlLite.
Все сдорово заработало и предпросмотр тоже :)


Название: Генерация отчётов средствами Qt
Отправлено: Cyrax от Сентябрь 24, 2006, 22:17
А почему не MySQL ?
И как ты формируешь шаблоны без дизайнера ?
Что за exe'шник ncreport.exe, что с ним делать (см. пост -3, позиция: 5;0)
*)
з.ы.ж. С OpenRPT дел не имел ?


Название: Генерация отчётов средствами Qt
Отправлено: C.H. от Сентябрь 24, 2006, 23:02
а мне над без муСКЛ :)
с шаблонами пока жопа :( дизайнер-то ток под Ку3...
да ncreport.exe получился - запускаешь его с разными  параметрами  - разные отчеты получаешь.
OpenRPT пробовал компилить под Ку4 - так до конца и не собралось -  но некторые вещи даже запускаются и работают.
Так что ncreport пок мне больше нравится, но вот дизайнер бы еще под Ку4