Delphi QuickReports: порядок следования полос для достижения детализации ребенок-ребенок-ребенок - PullRequest
2 голосов
/ 14 января 2010

Мне нужно создать QuickReport в Delphi 5, который выглядит так:

+================
| Report Header
+================

+=========================================
| Detail Band (auto-stretching, repeats)
.
+=========================================
   |    Child band (fixed-size)
   +======================================
   |    Child band (Auto-stretching)
   .    
   +======================================
   |    Child band (fixed-size)
   +======================================

+=================================
| Report Footer (auto-stretching)
. 
+=================================

+==================================
| Report Footer (auto-stretching)
. 
+==================================

+=============================
| Report Footer (fixed size)
+=============================

Может кто-нибудь придумать комбинацию заголовка, детализации, дочернего, нижнего колонтитула, суб-детализации, верхнего колонтитула группы, полос нижнего колонтитула группы - и связанных между ними связей Родитель, Мастер, Отчет, Запрос, чтобы я мог отчет, как мне нужно, чтобы посмотреть?

Не путайте мое использование терминов

  • полоса заголовка
  • полоса детали
  • детская полоса
  • нижний колонтитул

для обозначения того, что любая из полос должна относиться к этим фактическим типам. я использую эти термины в концептуальном смысле:

  • одна полоса в начале всего отчета (заголовок отчета)
  • повторяющаяся группа из четырех полос
  • три полосы, которые появляются после всех деталей, первые две из которых автоматически растягиваются

Тот же вопрос, только дольше

+===========================================
| Suspicious Transaction Report
|   STR No.: 12345
|      Date: 11/28/1973
|
|   Comments: as per NSL 1/13/2010
+===========================================

+===========================================
| Transaction 1 of 7
|      Buy                  Sell
|     $100.00            $16,000.00
|                        $27,000.00
|                        $12,000.00
.                            ...
+===========================================
|  Customer Information
|           Name: Shelby Lake
|        Address: 11111 S NC-HWY 111
|            DOB: 6/19/1981
|         ID No.: G123-456-789
|     Occupation: waitress
+===========================================
|  Original Transaction
|       Buy                 Sell
|      $100.00           $16,000.00
|    $3,000.00           $27,000.39
|   $64,132.69           $12,000.13
.       ...                  ...
+===========================================
|  Third Party Information
|           Name: Yugo Chavez
|        Address: 11111 S AB
|            DOB: 9/15/1934
|         ID No.: 995-1935
|     Occupation: dictator
+===========================================

...

+===========================================
| Transaction 7 of 7
.
.
+===========================================

+===========================================
| Description of Suspicious Activity
|   Customer had beedy eyes, that moved
|   rapidly from left to right. He...
.   ...
+===========================================

+===========================================
| Action Taken
|   We killed him, went through his
|   pickets, then started digging the...
. 
+===========================================





+===========================================
| 
|    Signature: _______________________
|                    Bruce Wayne
|        Title: The Batman
|  Employee ID: 1337-6669
+===========================================

Я могу составить несколько таблиц, которые имитируют пример, который я составил:

CREATE TABLE STRs (
   StrID int,
   Number text,
   Date datetime,
   Comments text,
   DescriptionOfSuspiciousActivity text,
   ActionTaken text,
   EmployeeName text,
   EmployeeTitle text,
   EmployeeNumber text )     

CREATE TABLE STRTransactions (
   STRTranasctionID int,
   STRID int,
   BuyAmount money)

CREATE TABLE STRTransactionSells (
   STRTransactionID int,
   SellAmount money)

CREATE TABLE STRTransactionPatronInfo (
   STRTransactionID int,
   Name text,
   Address text,
   DOB text,
   IDNumber text,
   Occupation text )

CREATE TABLE STRTransactionThirdPartyInfo (
   STRTransactionID int,
   Name text,
   Address text,
   DOB text,
   IDNumber text,
   Occupation text )

CREATE TABLE OriginalTransactions (
   STRTransactionID int,
   BuyAmount money,
   SellAmount money )

Мой неудачный эксперимент

Я пытался создать QuackReport со следующим макетом группы:

+=====================================================+
| PageHeader (TQRBand, BandType=rbPageHeader)         |
+=====================================================+

+=====================================================+
| DetailBand (TQRBand, BandType=rbDetail)             |
+===+=================================================+
    | ChildBand1 (TQRChildBnad, Parent=DetailBand)    |
    !      (autostretch)                              !
    +===+=============================================+
        | ChildBand2 (TQRChildBand, Parent=ChildBand1 |
        +=============================================+

+=====================================================+
| ChildBand3 (TQRChildBand, Parent=(none)             |
!      (autostretch)                                  !
+=====================================================+
    | ChildBand4 (TQRChildBand, Parent=ChildBand3     |
    !      (autostretch)                              !
    +=================================================+

+=====================================================+
| SummaryBand (TQRBand, BandType=rbSummary)           |
+=====================================================+

Примечание: Отступ используется, чтобы помочь идентифицировать родительско-дочерние отношения (то есть полоса фактически не имеет отступа в 50 пикселей)

Проблема с этим дизайном состоит в том, что во время разработки по меньшей мере полоса Summary появляется перед двумя многожильными дочерними полосами:

+=====================================================+
| PageHeader (TQRBand, BandType=rbPageHeader)         |
+=====================================================+

+=====================================================+
| DetailBand (TQRBand, BandType=rbDetail)             |
+===+=================================================+
    | ChildBand1 (TQRChildBnad, Parent=DetailBand)    |
    !      (autostretch)                              !
    +===+=============================================+
        | ChildBand2 (TQRChildBand, Parent=ChildBand1 |
        +=============================================+

+=====================================================+
| SummaryBand (TQRBand, BandType=rbSummary)           |
+=====================================================+

+=====================================================+
| ChildBand3 (TQRChildBand, Parent=(none)             |
!      (autostretch)                                  !
+=====================================================+
    | ChildBand4 (TQRChildBand, Parent=ChildBand3     |
    !      (autostretch)                              !
    +=================================================+

И когда отчет запускается (во время выполнения), две многопоточные дочерние группы даже не печатают:

+=====================================================+
| PageHeader (TQRBand, BandType=rbPageHeader)         |
+=====================================================+

+=====================================================+
| DetailBand (TQRBand, BandType=rbDetail)             |
+===+=================================================+
    | ChildBand1 (TQRChildBnad, Parent=DetailBand)    |
    !      (autostretch)                              !
    +===+=============================================+
        | ChildBand2 (TQRChildBand, Parent=ChildBand1 |
        +=============================================+

+=====================================================+
| SummaryBand (TQRBand, BandType=rbSummary)           |
+=====================================================+

Captcha: quackreports

1 Ответ

2 голосов
/ 15 мая 2011

(пожалуйста, имейте в виду, у меня больше нет QuickReports для меня, так что это все из памяти)

Хорошо ... Я сталкивался с этой проблемой раньше ... Чтобы дать вам полный кодовый пример, потребуется очень много времени (времени у меня просто нет), но я постараюсь описать мое решение, чтобы вы могли относиться к нему.

Вместо использования TQRChildBand используйте вместо него все DetailBand. Затем вы подключаете событие BeforePrint каждой из этих групп.

Вы бы использовали что-то подобное в событии BeforePrint:

printband := FPrintSubBandA;

Используйте набор универсально доступных переменных (или закрытых членов в форме вашего отчета), чтобы определить, какие полосы должны отображаться, а какие не должны быть для данной записи, отображаемой в вашем отчете .... все типа Boolean ( ПРИМЕЧАНИЕ. Вы можете использовать набор перечислений, но булевы проще / быстрее реализовать imho )

В вашем событии NeedData вы экстраполируете, какие полосы необходимы для данной записи, и соответственно установите эти переменные (логические значения).

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

Если этой информации недостаточно, дайте мне знать, и я переберу свои архивы кода, чтобы посмотреть, смогу ли я найти единственный пример, как это сделать. По сути, именно эта проблема является причиной, по которой я переключился на RaveReports.

EDIT: Я предполагаю, что вы, скорее всего, уже пытались установить значение ParentBand каждого дочернего диапазона во время выполнения ... если вы этого не сделали, не тратьте свое время! Это приводит к еще более аномальным результатам ( У меня даже были нарушения прав доступа при попытке )

...