|
|
|||||||||||||||||||||||||||||
|
Возможность формирования отчёта в Crystal Reports с различной ориентацией страницАлександр Бородовицын, технический специалист Interface Ltd.
В нашу фирму (Interface Ltd.) среди многих других вопросов по приобретению, установке, использованию или обучению работе с теми или иными программными продуктами, поступает немалая доля вопросов на тему: "А как мне сделать в той или иной программе так вот, как я хочу?" Один из таких вопросов - это вопрос по продукту Crystal Reports фирмы Crystal Decisions, который является самым популярным на сегодняшний день средством формирования разнообразных отчётных документов, основанных на информации из различных баз данных. Вопрос этот звучит примерно так: "Можно получить в Crystal Reports отчёт*, в котором присутствует различная ориентация сформированных страниц (портретная, ландшафтная)?" (см рис. 1). Рис. 1. Пример отчёта с различной ориентацией страниц Сразу же следует сказать, что подобный режим вряд ли можно считать "естественным" для отчётов: при просмотре напечатанного подобного документа приходится вертеть его туда-сюда, как бывает при просмотре современных альбомчиков с фотографиями (если все листы уложены одинаково), или же как-то сгибать листы "ландшафтной" ориентации, чтобы они поместились в стандартном скоросшивателе. И вообще, про ориентацию бумаги можно говорить, когда имеем дело с распечаткой: в самом деле, если уж без широких таблиц, которые не "влезают" в один экран, ну никак не обойтись, что ж, формируйте отчёт на более широких листах, а пользователь для просмотра уменьшит масштаб, или будет прокручивать страницу... * или результирующий многостраничный документ. Условимся в дальнейшем называть его просто "отчётом", тем более, что это понятие согласуется с терминологией пакета Crystal Reports.
С другой стороны, не следует забывать, что все программные пакеты по формированию отчётов ориентированы сейчас на отображение полученных документов, прежде всего, на экранах компьютеров, т.е. в сетях Intranet/Internet. А пользователь далее может делать с ними, что захочет: сохранять, печатать, импортировать... В связи с этим нельзя не упомянуть такой замечательный продукт фирмы Crystal Decisions, как Crystal Enterprise ). Время доступа к информации - это тоже деньги (time как всегда money). И дело вовсе не в "безбумажной" технологии, хотя и это тоже.
Т.е., прежде чем включать в отчёт листы "обеих" ориентаций, убедитесь, что такая форма отчёта:
1-й подход Всё-таки формировать (и печатать) не один, а два (возможно, более) отчётов, выбрав для каждого свои настройки принтера: размер бумаги и ориентацию. Используя такие мощные механизмы Crystal Report, как программирование событий и признаков, т.е. задание формул в полях форматирования, выборку, сортировку, группировку и т.п., можно не только "разделить" данные на два отчёта, но и выполнять более сложные действия, связанные с "нестандартностью" отчёта. Так, например, требуется печатать на страницах "общего" отчёта сквозную нумерацию страниц, особенно если листы с различной ориентацией идут "вразброд". Для этого в оба отчёта необходимо вставить формулы для расчёта пропущенных/распечатанных страниц. Поясню сказанное на примере. Предположим, что нам нужно распечатать отчёт по клиентам из некоей базы данных. Причём для тех клиентов, у которых есть дополнительные услуги, печатать расшифровку этих услуг с ориентацией листа "ландшафтная", а остальных - без расшифровки, на стандартных листах с ориентацией "портретная".
Таким образом, мы получим отчёт (сформированный из двух) с листами различной ориентации и возможно, разного формата со сквозной нумерацией страниц. После распечатки потребуется вручную разобрать отчёт по страницам. При необходимости и по желанию можно запрограммировать некоторую оболочку (Visual Basic, Delphi, Visual C++... , не принципиально) по автоматическому запуску одного, а затем другого отчёта. Причём, сложностей тут никаких, потеря только времени на программирование... 2-й подход Второй подход заключается в возможности Crystal Reports выводить поля, повёрнутые на 90 или 270 градусов. Т.е., в одном отчёте формируются как листы "портретного" отображения, так и "ландшафтного". Естественно, это имеет смысл только для печати: вряд ли пользователь захочет читать на экране монитора "повёрнутый" текст) (см. всё сказанное во вступлении).
Рис. 2. Дизайн отчёта с секциями Details различного формата Это достаточно легко реализуется, т.к. у нас нет группировок, и на одном листе выводится только одна запись из БД. Если же нам надо выводить таблицу (а зачем ещё отчёты?), то задача значительно усложняется. Надо будет "вручную" формировать текстовые поля, соответствующие одной записи таблицы, посчитать, сколько таких "повёрнутых" полей поместится на листе, разместить их и т.п. Конечно, это потребует более значительных усилий по сравнению с первым подходом. 3-й подход Суть этого подхода такова. Мы формируем "нормальный" отчёт с форматом принтера, при котором у нас разместятся листы любой ориентации. Например, А3 "ландшафтная". В отчёте только нужно будет создать по две секции для Page Header, Page Footer, Group Header, Group Footer, Details для разных ориентаций (рис.3). И, наверное, будет проще, если в начале (и/или в конце) страниц с "ландшафтной" ориентацией добавите какие-то символьные метки. Рис. 3. Дизайн отчёта с двумя различными секциями Group Header А затем Вы экспортируете созданный отчёт в какой-нибудь формат, например, в MS Word. Создав там небольшой макрос, по внесённым меткам переформатируете Ваш отчёт, внеся разделы и установив для каждого свою ориентацию. Ссылки по теме
|
|