Можливість формування звіту в Crystal Reports з різною орієнтацією сторінок

У нашу фірму (Interface Ltd.) Серед багатьох інших питань щодо набуття, встановлення, використання або навчання роботі з тими чи іншими програмними продуктами, надходить чимала частка запитань на тему: "А як мені зробити в тій чи іншій програмі так от, як я хочу?"


Один з таких питань – це питання по продукту Crystal Reports фірми Crystal Decisions, який є найпопулярнішим на сьогоднішній день засобом формування різноманітних звітних документів, заснованих на інформації з різних баз даних.


Питання це звучить приблизно так: "Можна отримати в Crystal Reports звіт *, в якому присутня різна орієнтація сформованих сторінок (портретна, ландшафтна)?" (Див рис. 1).

Рис. 1. Приклад звіту з різною орієнтацією сторінок


Відразу ж слід сказати, що подібний режим навряд чи можна вважати "природним" для звітів: при перегляді надрукованого подібного документа доводиться крутити його туди-сюди, як буває при перегляді сучасних альбомчик з фотографіями (якщо всі листи укладені однаково), або ж якось згинати листи "ландшафтної" орієнтації, щоб вони помістилися в стандартному швидкозшивачі. І взагалі, про орієнтацію папери можна говорити, коли маємо справу з роздруківкою: справді, якщо вже без широких таблиць, які не "влазять" в один екран, ну ніяк не обійтися, що ж, формуйте звіт на більш широких аркушах, а користувач для перегляду зменшить масштаб, або буде прокручувати сторінку …


* Або результуючий багатосторінковий документ. Домовимося надалі називати його просто "звітом", тим більше, що це поняття узгоджується з термінологією пакету Crystal Reports.








!

Бажано, щоб при розробці звіту Ви повною мірою володіли:


  • нормативами та стандартами на документацію;

  • засобами розробки документації (у нашому випадку Crystal Reports), тобто знанням всіх його можливостей;

  • методами отримання необхідних даних з конкретної БД, зокрема, мовою SQL.
    Оскільки у противному випадку можливе отримання звіту не в тому вигляді, в якому потрібно (в т.ч. його ускладнення), або невиправдана втрата витратних коштів (папір, тонер), або ускладнена процедура отримання документа і т.п.

З іншого боку, не слід забувати, що всі програмні пакети по формуванню звітів орієнтовані зараз на відображення отриманих документів, перш за все, на екранах комп'ютерів, тобто в мережах Intranet / Internet. А користувач далі може робити з ними, що захоче: зберігати, друкувати, імпортувати … У зв'язку з цим не можна не згадати такий чудовий продукт фірми Crystal Decisions, як Crystal Enterprise ). Час доступу до інформації – це теж гроші (time як завжди money). І справа зовсім не в "безпаперової" технології, хоча і це теж.








!
Crystal Enterprise – система для управління корпоративною звітністю в масштабі підприємства. Заснована на Web-архітектурі, система зберігає звіти Crystal Reports на сервері і забезпечує моментальний доступ до них як всередині підприємства (через Intranet) так і поза його (через Internet) Докладніше про цю системі див. Crystal Enterprise 

Тобто, перш ніж включати до звіту листи "обох" орієнтацій, переконайтеся, що така форма звіту:

1-й підхід


Все-таки формувати (і друкувати) не один, а два (можливо, більше) звітів, вибравши для кожного свої налаштування принтера: розмір паперу та орієнтацію.


Використовуючи такі потужні механізми Crystal Report, як програмування подій та ознак, тобто завдання формул в полях форматування, вибірку, сортування, угруповання і т.п., можна не тільки "розділити" дані на два звіти, але і виконувати більш складні дії, пов'язані з "нестандартністю" звіту. Так, наприклад, потрібно друкувати на сторінках "загального" звіту наскрізну нумерацію сторінок, особливо якщо аркуші з різною орієнтацією йдуть "врозбрід". Для цього в обидва звіти необхідно вставити формули для розрахунку пропущених / роздрукованих сторінок.


Поясню сказане на прикладі. Припустимо, що нам потрібно роздрукувати звіт по клієнтах з якоїсь бази даних. Причому для тих клієнтів, у яких є додаткові послуги, друкувати розшифровку цих послуг з орієнтацією аркуша "ландшафтна", а решту – без розшифровки, на стандартних аркушах з орієнтацією "портретна".



  1. Готуємо два звіти з відповідним форматуванням і угрупуванням по клієнтах (наприклад, за кодом).

  2. Вводимо в кожен звіт обчислюване поле (Formula Fields) СуммДопУслуг:
    {Доп.услуга1} + {Доп.услуга2} + {Доп.услуга3} + …
    де {Доп.услугаN}-поле суми відповідної послуги з БД.

  3. У Section Expert для секції Details для ознаки Suppress вводимо формулу:
    СуммДопУслуг> 0 / / Для звіту з "портретної" орієнтацією
    / / СуммДопУслуг = 0 / / Для звіту з "ландшафтної",
    а для ознаки New Page After вводимо формулу:
    СуммДопУслуг = 0 / / Для звіту з "портретної" орієнтацією
    / / СуммДопУслуг> 0 / / Для звіту з "ландшафтної"
    (Якщо була включена угруповання, то це треба запровадити і для Group Header і Group Footer)

  4. У секцію Page Footer вставляємо Special Fields: Record Number (якщо один клієнт на одному аркуші. Інакше доведеться вводити змінну і самим вважати номер сторінки).

Таким чином, ми отримаємо звіт (сформований з двох) з листами різної орієнтації і можливо, різного формату з наскрізною нумерацією сторінок. Після роздрукування потрібно вручну розібрати звіт по сторінкам.


При необхідності і за бажанням можна запрограмувати деяку оболонку (Visual Basic, Delphi, Visual C ++…, не принципово) з автоматичного запуску одного, а потім іншого звіту. Причому, складнощів тут ніяких, втрата тільки часу на програмування …

2-й підхід

Другий підхід полягає в можливості Crystal Reports виводити поля, повернені на 90 або 270 градусів. Тобто, в одному звіті формуються як листи "портретного" відображення, так і "ландшафтного". Природно, це має сенс тільки для друку: навряд чи користувач захоче читати на екрані монітора "повернутий" текст) (див. все сказане у вступі).
Отже, для того, щоб реалізувати попередній приклад для цього підходу, зробимо наступне:



  1. Створимо звіт з подвійною секцією Details: Details a – для "портретної", Details b – для "ландшафтної". У кожній секції для ознаки Suppress вводимо ту ж формулу (див. п.3 першого підходу). Цю ж формулу варто запровадити і для ознак Suppress секцій Group Header і Group Footer, а якщо потрібно, і для Page Header і Page Footer.

  2. У Details a всі розміщуємо як зазвичай, а в Details b для кожного поля в Format Editor встановити ознака Text Rotation: 90 degrees, і відповідним чином розтягнути / стиснути поле (рис.2).

  3. Крім того, в секції Details b розміщуємо поля з тих секцій, які виявилися сховані (Group і Page Header і Footer), так само розгорнувши їх.

Рис. 2. Дизайн звіту з секціями Details різного формату


Це досить легко реалізується, тому що у нас немає угруповань, і на одному аркуші виводиться тільки один запис з БД. Якщо ж нам треба виводити таблицю (а навіщо ще звіти?), То завдання значно ускладнюється. Треба буде "вручну" формувати текстові поля, відповідні одного запису таблиці, порахувати, скільки таких "повернених" полів поміститься на аркуші, розмістити їх і т.п. Звичайно, це вимагатиме більш значних зусиль у порівнянні з першим підходом.


Третій підхід


Суть цього підходу така. Ми формуємо "нормальний" звіт з форматом принтера, при якому у нас розмістяться листи будь-якої орієнтації. Наприклад, А3 "ландшафтна". У звіті тільки потрібно буде створити по дві секції для Page Header, Page Footer, Group Header, Group Footer, Details для різних орієнтацій (рис.3). І, напевно, буде простіше, якщо на початку (і / або в кінці) сторінок з "ландшафтної" орієнтацією додасте якісь символьні мітки.

Рис. 3. Дизайн звіту з двома різними секціями Group Header

А потім Ви експортуєте створений звіт в який-небудь формат, наприклад, в MS Word. Створивши там невеликий макрос, за внесеними мітках переформатіруете Ваш звіт, внісши розділи і встановивши для кожного свою орієнтацію.
Процес цей нескладно автоматизувати, запускаючи MS Word і макрос у фоновому режимі.
Навряд чи можна вважати представлені вище способи єдиними і найкращими. Вибирайте для себе найбільш прийнятний і простий варіант.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*