Russian Qt Forum
Ноябрь 26, 2024, 00:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 5 6 [7]   Вниз
  Печать  
Автор Тема: Отчетные формы в Qt?  (Прочитано 89642 раз)
ритт
Гость
« Ответ #90 : Июль 30, 2008, 19:13 »

омг...ты на работе группируешь печки? Улыбающийся
ну, а в чём всё-таки смысловая нагрузка того, чтобы бегать по секциям и активировать их вручную? а что если у меня пол-дюжины _абсолютно_ разных вариантов представления одних и тех же данных и где-то имеется комба с названиями шаблонов, один из которых должен использоваться для отчёта (реальный пример)?
« Последнее редактирование: Июль 30, 2008, 19:15 от Константин » Записан
Alex03
Гость
« Ответ #91 : Июль 31, 2008, 07:56 »

ИМХО промежуточный HTML - не есть гут!
Там нет разметки страниц и т.д. (Или я от жизни отстал?)
Отчёты как правило для бумаги делаются. И имхо разметка шаблона в физических величинах (типа мм.) и относительно конкретного формата бумаги - очень даже кстати.

У меня пока небольшой опыт работы с FastReport.
Там довольно таки немного базовых примитивов, но они довольно могучие.

Данные:
БД, таблица, запрос. (таблица и запрос - ссылаются на БД) Всех их может быть много.

Страница (шаблон страницы):
Может включать в себя примитивные объекты: Текст, рисунок, штрих код и т.д.
А также "групповые" - Бэнды, в которые также могут быть включено всё что угодно.
У примитивных объектов помимо свойств внешнего вида есть ещё и dataSet (ссылка на таблицу/запрос) и dataField.

Формы - Диалоговые окна со всеми стандартными примитивами типа лабелов/чекбоксов/комбобоксов/лайнедитов и т.д., например очень удобно запрашивать диапазон дат для отчёта.

Код. - 3 варианта скриптовых языков. для многих объектов можно задать действия по некоторым обытиям.


шаблоны отчётов хранятся в XML примерно в таком виде:
Код:
<?xml version="1.0" encoding="utf-8"?>
<TfrxReport Name="" DotMatrixReport="False" IniFile="\Software\Fast Reports" PreviewOptions.Buttons="2047" PreviewOptions.Zoom="1" PrintOptions.Printer="Default" ReportOptions.CreateDate="37871,996337662" ReportOptions.Description.Text="Demonstrates how to create Master/Detail/Detail reports. Just put on the page one MasterData band and two DetailData bands and connect each of them to the appropriate dataset. Of course, you can create Master/Master, Master/Detail/Detail/Detail and other reports with the same way." ReportOptions.LastChange="38447,371977338" ScriptLanguage="PascalScript" ScriptText.Text="begin&#13;&#10;&#13;&#10;end." PropData="0844617461736574730100095661726961626C657301010C14000000204E616D653D22204465736372697074696F6E2200010C35010000204E616D653D224465736372697074696F6E222056616C75653D2244656D6F6E7374726174657320686F7720746F20637265617465204D61737465722F44657461696C2F44657461696C207265706F7274732E204A75737420707574206F6E207468652070616765206F6E65204D6173746572446174612062616E6420616E642074776F2044657461696C446174612062616E647320616E6420636F6E6E6563742065616368206F66207468656D20746F2074686520617070726F70726961746520646174617365742E204F6620636F757273652C20796F752063616E20637265617465204D61737465722F4D61737465722C204D61737465722F44657461696C2F44657461696C2F44657461696C20616E64206F74686572207265706F7274732077697468207468652073616D65207761792E220000055374796C650100">
  <TfrxReportPage Name="Page1" PaperWidth="210" PaperHeight="297" PaperSize="9" LeftMargin="5" RightMargin="5" TopMargin="5" BottomMargin="5" Columns="1" ColumnWidth="210" ColumnPositions.Text="0" HGuides.Text="" VGuides.Text="">
    <TfrxPageHeader Name="Band1" Height="22,67718" Left="0" Top="18,89765" Width="755,906">
      <TfrxMemoView Name="Memo1" Left="3,77953" Top="0" Width="710,55164" Height="15,11812" Frame.Typ="8" Frame.Width="2" Memo.Text=""/>
    </TfrxPageHeader>
    <TfrxMasterData Name="Band2" Height="18,89765" Left="0" Top="102,04731" Width="755,906" Columns="1" ColumnWidth="200" ColumnGap="20" RowCount="20">
      <TfrxMemoView Name="Memo2" Left="3,77953" Top="0" Width="710,55164" Height="18,89765" Color="65280" Memo.Text="[LINE#]. master"/>
    </TfrxMasterData>
    <TfrxPageFooter Name="Band3" Height="18,89765" Left="0" Top="291,02381" Width="755,906">
      <TfrxMemoView Name="Memo3" Left="3,77953" Top="0" Width="710,55164" Height="7,55906" Frame.Typ="4" Frame.Width="2" Memo.Text=""/>
    </TfrxPageFooter>
    <TfrxDetailData Name="Band4" Height="22,67718" Left="0" Top="143,62214" Width="755,906" Columns="1" ColumnWidth="200" ColumnGap="20" RowCount="6">
      <TfrxMemoView Name="Memo4" Left="3,77953" Top="0" Width="245,66945" Height="18,89765" Color="65535" Memo.Text="[LINE#]. detail1"/>
    </TfrxDetailData>
    <TfrxDetailData Name="Band5" Height="41,57483" Left="0" Top="188,9765" Width="755,906" Columns="1" ColumnWidth="200" ColumnGap="20" RowCount="4">
      <TfrxMemoView Name="Memo5" Left="3,77953" Top="0" Width="245,66945" Height="37,7953" Color="255" Memo.Text="[LINE#]. detail2"/>
    </TfrxDetailData>
  </TfrxReportPage>
</TfrxReport>
Результат отчёта (т.е. шаблон наполненный данными, именно то что на печать уходит) тоже можно сохранить в XML файл.

Формы и Код позволяют делать довольно гибкие "автономные" отчёты.
Есть ещё наследование отчёта и подотчёты....
Записан
Tonal
Гость
« Ответ #92 : Август 02, 2008, 07:55 »

FastReport - движёк отчётов. С версии 3 или 4 так же можно выдернуть самостоятельное приложение и как COM библиотеку.
Изначально это был пакет (библиотека) для Delphi/C++Builder.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #93 : Август 19, 2008, 19:18 »

Not Found
The requested URL /p/unnstudi%D0%BEreport/ was not found on this server.
Грустный
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ритт
Гость
« Ответ #94 : Август 19, 2008, 19:30 »

враки Улыбающийся
http://code.google.com/p/unnstudioreport/ - ссылка рабочая
Записан
ритт
Гость
« Ответ #95 : Август 19, 2008, 20:16 »

а, ну тогда ясно...
одного желания помочь мало - есть ещё множество всяких НО, мешающих этой-самой помощи )
Записан
ритт
Гость
« Ответ #96 : Август 31, 2008, 10:18 »

я сегодня ковырялся с новым нцрепортом, обратил внимание на общую деталь у всех полей формы - в дизайнере каждому полю можно задать выходной формат значения (строка, число, датавремя, булеан) независимо от исходного
и тут прикинул: у меня есть наработка - расширяемая база примитивов с общей абстрактной основой и контейнером для удобства (по принципу обёртки и расширяемости аналог QSqlDriver + QSqlDatabase)...проще говоря, контейнер, который работает с примитивом (строка, целое/дробное число, дата/время/датавремя, булеан) или наследником примитива (хтмл, число с символом деньги и т.п.) + позволяет валидировать, коррелировать значения по базовым или дополнительным параметрам, создавать виджеты для редактирования значений (по принципу фабрики) и т.д.
думаю, эту структуру можно было бы использовать в твоём рендере/дизайнере в качестве "поля"
Записан
ритт
Гость
« Ответ #97 : Август 31, 2008, 13:37 »

несколько не о том. конечно, я не знаю твоих задумок - что и как ты собираешься реализовывать...
объясню частный банальный случай:
имеем базовые типы данных: строка, целое число, дробное число, датавремя, булеан; требуется числа определённого столбца выводить в отчёт с символом валюты выбранной страны
наследуемся от класса дробного числа, определяем условия, при которых будет отображаться некоторый символ (ну, например, если значение не пустое и не равно нулю), регистрируем новый класс в контейнере (или запихиваем в плагин - контейнер сам подхватит при инициализации) - и вуа-ля, в дизайнере можно явно указать для поля тип "деньга" и выбрать символ, а рендер видит всё тот же контейнер и даже не знает что за тип в нём крутится - пропускает через него данные и выводит результат на печать
а валидация - это опциональный бонус, которому всегда можно найти применение...
Записан
ритт
Гость
« Ответ #98 : Август 31, 2008, 14:58 »

наше дело предложить, ваше - отказаться Улыбающийся
простота в написании == сложность в использовании
Записан
Страниц: 1 ... 5 6 [7]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.145 секунд. Запросов: 23.