Компьютер Пресс № 1-98

Работаем с Crystal Reports 6.0 (часть 1)

Сергей Маклаков

Кому он нужен, этот Crystal?

Одной из главных задач корпоративных информационных систем является оперативное предоставление информации, необходимой для принятия решений. Вместе с тем, структура современных СУБД, на которых основаны ИС, ориентирована в первую очередь на компактное и непротиворечивое хранение информации, а не на оптимизацию произвольной выборки и представления данных. Вследствие этого, информация, хранящаяся в корпоративных информационных системах, как правило, используется неэффективно. Главной проблемой становится не хранение информации, а предоставление ее конечному пользователю в виде отчета в нужном контексте. Традиционно ИС масштаба предприятия имеют ограниченное число встроенных отчетов, прямое назначение которых - предоставление отчетной информации вышестоящим организациям или государственным службам, а не информационная поддержка руководящего звена. Специфика аналитических отчетов, предназначенных для облегчения процесса принятия решений состоит в их изменчивости, поскольку в реальной жизни требования бизнеса меняются чуть ли не каждый день. Заказы на разработку таких отчетов поступают разработчикам отдела автоматизации предприятия (если таковой имеется), либо разработчикам сторонних фирм, причем потребности в аналитических отчетах растут по мере их создания в геометрической прогрессии. Рано или поздно разработчик понимает, что решить эту проблему средствами, встроенными в среду разработки (например, Report Smith Delphi или Report Windows Centura) крайне затруднительно. Для такой задачи гораздо лучше подходит специализированный генератор отчетов подобный Crystal Reports.
Имеется три пути применения Crystal Reports.
Первый путь - обучить служащих использовать Crystal Reports для создания отчетов. К сожалению, такой путь тяжело реализовать на практике. Дело не в сложности освоения Crystal Reports- навыкам работы в инструментальной среде Crystal Reports можно достаточно быстро научить даже слабо подготовленного пользователя. Проблема заключается в источнике данных, с которыми будет работать Crystal Reports. Пользователь в этом случае обращается непосредственно к БД и должен понимать, что такое структура данных и разбираться в соответствии значений таблиц и колонок бизнес - логике. Подавляющее большинство ИС для промышленности и бизнеса имеют в качестве источников данных продукты западных фирм (увы !), для которых локализация продуктов далеко не первоочередная задача, поэтому русификация СУБД часто приводит к дополнительной головной боли для отечественных разработчиков. Следовательно, пользователь Crystal Reports может увидеть только англоязычные имена объектов БД, что часто затрудняет работу. Хотя Crystal Reports имеет специальный инструмент (Dictionary), частично решающий проблему интерфейса с БД, чаще более эффективным оказывается другой подход - иметь на предприятии специалиста, профессионально занимающегося генерацией отчетов. Такой специалист не обязательно должен быть программистом - ему необходимо знать предметную область, структуру данных, особенно с точки зрения ее соответствия предметной области и продвинутые возможности генератора отчетов. Crystal Reports имеет очень мощный инструментарий для создания сложных отчетов, позволяющий, например, выполнять очень сложную статистическую обработку или объединять данные из разнородных источников (например, dbf файлов и реляционные СУБД). Готовые отчеты можно распространять в виде компактных exe - файлов и, следовательно, достаточно на всем предприятии иметь только один экземпляр Crystal Reports на рабочем месте создателя отчетов.
Третий подход - встраивание отчетов, сгенерированных в Crystal Reports, в клиентские части ИС, созданные при помощи других средств разработки ( VB, Power Builder, Delphi, Centura), либо публикация отчетов на тонком клиенте с использованием технологии Intranet. В результате пользователь может вызывать и просматривать отчеты из привычной для себя среды. При этом проблема создания отчета не снимается, облегчается лишь проблема распространения отчета, поэтому этот подход может служить дополнением, а не альтернативой предыдущим.
В настоящей статье (первой из планируемого цикла) будут показаны основные возможности среды Crystal Reports Designer 6.0 и приемы создания отчетов средней сложности.

Начинаем создание отчета

Познакомимся с главным окном Crystal Report.
В верхней части окна расположено главное меню, под ним две линейки кнопок (Bottom bar), дублирующие основную функциональность меню. Кликнув по кнопке , можно вызвать дополнительную линейку кнопок, расположенную в нижней части окна.
Первый шаг создания отчета - нажатие (Click) на кнопку Новый Отчет . Открывается диалог Report Gallery, который предлагает несколько вариантов для построения нового отчета. Основные типы отчета:
· стандартный отчет,
· отчет в виде письма (Crystal Reports содержит шаблоны различных типов писем),
· отчет в виде формы,
· матричный отчет (cross-tab),
· отчет, содержащий подотчеты,
· печать этикеток,
· отчет TopN, позволяющий сложным образом группировать данные и
· специальный вид суммирующего отчета Drill Down.
Смысл каждого типа отчетов будет пояснен позже. На практике необходимо иметь отчеты, являющиеся комбинациями стандартных типов. Для создания такого отчета нужно кликнуть по клавише Custom>> для доступа к дополнительным опциям.
В расширенном диалоге Report Gallery можно сделать выбор между тремя типами сложных отчетов: Custom Report, Custom Cross-Tab и Custom Malty Colymn. Cоздадим стандартный Custom Report, который определен по умолчанию. В правой секции необходимо выбрать источник информации. Выберем Data File, что означает, что наша информация находится в БД на PC.
После выбора Custom Report в качестве отчета и Data File в качестве источника данных, нам необходимо выбрать файл БД, из которой мы хотим получить отчет. Диалог Choose Database File показывает нам список доступных БД. В дальнейшем в качестве источника будет использован файл Crasy.mdb (формат MS Access), который устанавливается в качестве примера при инсталляции Crystal Reports. Будем использовать таблицу Customer, поля Customer Name, Last Year's Sales, Country, Region, City. После выбора БД и нажатия на OK открывается Report Designer, в котором можно разрабатывать отчет. Большая белая область - Edit box. Edit box разделен на секции горизонтальными линиями. Когда мы добавляем секцию в отчет ( например, subtotals), программа автоматически добавляет линию. Серая область слева от Edit box'а дает дополнительную информацию, помогающую нам работать с данными. Горизонтальные линии продолжаются в серую область, определяя секции, и программа идентифицирует каждую секцию по аббревиатуре или выбранному имени.
Секция заголовка Report Header (RH) изображается единожды, в самом начале отчета. Секции Page Header (PH) и Page Footer (PF) показываются единожды на каждой странице и обычно используются для заголовков, нумерации страниц и т.д. Секция Detail(D) - это список информации отчета. Секция Report Footer (RF) показывается единожды, в самом конце отчета
После выбора файла с базой данных и таблицы, на экране Design Window появился диалог Insert Field с закладкой Database, в котором представлены все поля БД.
Необходимо выбрать поля и их место в отчете. Можно выбрать поля индивидуально, по порядку, или группой. Выбрав поля, можно просто расположить их в соответствующей секции. Если Вы не уверены какие значения содержит поле, можно посмотреть значение, выбрав поле и нажав кнопку Browse...
Существует 3 пути выбора поля для отчета: Для помещения поля в отчет нажмите кнопку мыши, и не отпуская, перенесите поле в нужное место отчета, после чего отпустите кнопку. Поля будут размещены в порядке их расположения в диалоге, но не в порядке Вашего выбора. Размер поля в отчете зависит от размера поля в БД.
После этого можно просмотреть отчет в окне просмотра (Preview Window), нажав на кнопку Просмотр . Программа прочитает данные и отразит их на первой странице. Прочие страницы будут показаны только при пролистывании. Такой алгоритм позволяет сократить время ожидания при отображении больших отчетов. В окне просмотра можно производить многие операции из Design Window - построение отчета, группировка, суммирование и форматирование. Status bar в Preview Window дает информацию об использованных в отчете данных. Он показывает, как много записей выбрано и общее число прочитанных записей. Если используются сохраненные данные, показывается также время чтения данных.
Поскольку нам не всегда нужны данные в том порядке, в каком они расположены в отчете, Crystal Reports позволяет нам изменить этот порядок. Для этого нужно просто выделить необходимое поле (или несколько полей) и перенести его мышью в нужное место. Эту операцию можно произвести как в Design Window, так и в режиме предварительного просмотра.
После предварительного форматирования можно сохранить отчет (кнопка Сохранить или меню File/Save). Когда отчет сохраняется или закрывается его, программа по умолчанию сохраняет данные с отчетом. Всякий раз, когда отчет запускается, он основывается на сохраненных данных. Когда отчет открывается, время и дата будут показаны в серой секции. Если БД, на которой основан отчет, изменяется, программа обновляет данные. Когда данные обновляются, отчет перезапускается. Можно обновить данные выполнив команду Report/Refresh Report Data.
Для внесения текста в отчет необходимо добавить текстовый объект. В общем случае текстовый объект - это сложная структура, которая может содержать, например, поля БД.
Для вставки текстового поля кликнем на кнопку . Вставка текстового объекта на Bottom bar или выберем из меню Insert|Text Object, после чего кликнем на нужную позицию в Design Window.
Для форматирования поля выделим его и выполним одну из следующих операций:

Выбор записей

По умолчанию в отчет включаются все записи БД. В общем случае, в отчете ограничивается информация для просмотра и выбираются только необходимые записи. Например, можно интересоваться только выбранными регионами и т.д.
Crystal Reports допускает две опции для выбора записей: Select Records Expert - прямой путь открыть выбранные записи. Существует два пути для выбора записей:
Первый шаг состоит в определении критерия выбора (например, нас интересуют все записи, у которых значение поля меньше данного и т.д.). Допустим, мы интересуемся одним из заданных значений, выберем "one of" из комбобокса. После этого появится третий комбобокс. Используем его для задания значений, которые мы хотели бы иметь в нашем отчете. По - существу, мы нуждаемся в завершении предложения (например: State is one of...). Если мы знаем это значение, наберем его прямо в комбобокс. Если, возможно, нет, выберем значение из комбобокса.
Часто необходим более чем один критерий. В этом случае после задания первого критерия останемся в диалоге Select Expert и выберем <New>. Затем выберем следующее поле, которое нужно для задания критерия. После выбора нового поля диалог Select Records Expert появится вновь. Задайте критерий так же, как в первый раз. Тем же способом можно задать другие критерии. Например, можно указать, что поле Region должно содержать только значения CA, BC, NY, или FL.

Сортировка и группировка записей

Хотя мы выбрали нужную для отчета информацию, она представлена в том порядке, в каком она находится в БД. Возможно, нам понадобится сгруппировать информацию (например, чтобы все клиенты из Калифорнии были вместе и т.д.). Эта операция называется группированием записей. Сгруппировав записи, можно суммировать данные в каждой группе. Когда мы сгруппируем записи, новая секция добавляется в отчет и появляется в Design Windows. Мы можем сгруппировать информацию по полям отчета или даже по полям, которые не входят в отчет. В нашем отчете мы хотим сгруппировать данные по городам (т.е. компании, входящие в город, сгруппируются вместе).
Для вставки группы выберите поле, по которому необходимо сгруппировать данные и кликните по Insert|Group. Откроется диалог Insert Group. Выберем поле для группирования и порядок, в котором группы должны показываться. Например, выберем группу по City.
Поля могут показываться в порядке возрастания (от A до Z и от 1 до 9) и в порядке убывания (от Z до A и от 9 до 1). Существует возможность задания специального порядка сортировки групп ( in specified order), который можно задать вручную в виде списка. Если в качестве поля для группирования выбрана дата, можно выбрать порядок группировки по периоду, например, объединить поля по неделе, месяцу, кварталу, году и т.д. Можно установить группы как в режиме Design, так и в режиме Preview Windows. В режиме Design Windows можено увидеть две новые секции - Group Header и Group Footer. Будем их идентифицировать по левому краю Design Windows или по полям, которые в них входят. Хотя поля будут сгруппированы по City, нам нет нужды видеть поле City в каждой строке группы. Есть два пути для того, чтобы напечатать это поле только один раз в группе. Во - первых, можно перенести это поле в Header. Возмите поле City и переместите его в Group Header прямо следом за заголовком City. Можно это сделать как в режиме Design так и в режиме Preview Windows. Во-вторых, можно оставить City в блоке Detailes и отформатировать его как not print duplicates. Для этого мы должны выделить поле и кликнуть правой кнопкой мыши, выбрать опцию Format Text и кликнуть на Suppress if Duplicate. Отметим, что по умолчанию в качестве заголовка группы используется значение поля - критерия группировки.
После создания одной группы (City) можно вставить дополнительную группировку по региону (Region) и стране (Country). Для каждой группы появляется свой Group Header и Group Footer. В режиме Preview Windows слева появляется навигатор групп (Smart Navigator), позволяющий быстро перейти к нужной группе.

Порядок сортировки записей

Группы отображаются в отчете в том порядке, который задан при создании. Можно дополнительно отсортировать записи внутри группы, например, по имени компании. Существуют два пути для сортировки. Кликните по кнопке (Сортировка) на Buttom bar, либо выберете из меню Report|Sort Record. Появится диалог Record Sort Order. Сначала нужно выбрать поле, по которому необходимо отсортировать записи из Report Field box. Компании уже сгруппированы по стране, региону и городу. Для сортировки компаний внутри города нужно выбрать Customer Name и кликнуть по Add. Если кликнуть по OK, установится сортировка по возрастанию. Для установки сортировки по убыванию, нужно кликнуть по опции Descending.

Вставка сумм

После группированния информации можно добавить в отчет некоторую суммирующую информацию (например, количество компаний в каждом регионе). Добавим эту информацию в Group Footer, где могут быть вставлены Summary и Subtotal. Crystal Reports позволяет группировать и суммировать за один шаг, но для наглядности используем путь с несколькими шагами. Для вставки Summary или Subtotal, во-первых, выделим поле, по которому будет проводится суммирование. Если это строковое поле такое, как компания, вставим суммирующее поле Summary, в котором будет отображаться количество компаний в регионе. Если это числовое поле, вставим Subtotal, для добавления суммирующей информации (например, общий обьем продаж в регионе). Выделим поле Last Year's Sales, кликнем правой клавишей мыши и выберем из меню Insert Subtotal. Появится диалог Insert Subtotal. Поле Region уже является полем, по которому проводится группирование и сортировка. После клика на OK, можно увидеть новое поле в секции Group Footer, прямо под полем Last Year's Sales. Поле будет называться Sum of Last Year's Sales. Имея суммирующую информацию по группам, мы можем получить информацию по всему отчету. Секция, в которой помещается такая информация, называется Grand Total и помещается в конце отчета. Так же как и в группах, строковые и числовые поля могут быть подсчитаны и просуммированы в конце отчета.
Кроме простого подсчета существуют другие опции для числовых полей, такие как distinct count, maximum и т.д. для строкового поля и average, sample variance и т.д. для числовых полей.
Для открытия Grand Total выделите поле, по которому необходимо провести суммирование. Кликните Insert|Grand Total или кликните правой клавишей мыши и выберите Insert Grand Total. После того, как мы сделали наш выбор и кликнули OK, поле Grand Total автоматически появится в новой секции Grand Total, прямо под полем, которое суммируется.

Сложная сортировка групп (TopN)

Иногда возникает необходимость нестандартной сортировки групп. Например, нужно показать три наиболее крупные по объему продаж страны, остальные объединить в группу «Прочие». Для этого выберем TopN/Sort Group Expert из меню Report. Появится диалог TopN/Sort Group Expert c закладкой для каждого суммирующего поля отчета. Заголовок каждой закладки - это имя поля, которое ранее было определено как критерий группировки.
В диалоге Sort Group Expert мы в можем выбрать Sort all, Top N или Botton N. Sort all будет сортировать и печатать все группы. Top N будет сортировать и печатать только несколько указанных групп. Вы можете определить сколько групп (N) (например 3 или 4 или 5...) нужно печатать. Botton N будет сортировать и печатать группы с наименьшим значением суммирующего поля по возрастанию. Для сортировки всех групп мы выберем Top N и затем выберем поле группы, в котором мы произведем сортировку (Country). Если мы выберем Sum of Last Year's, в отчет будут представлены сначала 3 страны с наибольшими объемами продаж, остальные страны будут объединены в группу, название которой необходимо указать в опции «include Others, with the name».

Форматирование секций

Crystal Reports предоставляет мощные средства форматирования как полей, так и секций, причем уже в версии 5.0 появилась возможность форматирования секций по условию (которое мы рассмотрим позже), то есть в зависимости от содержания строки.
Для форматирования секции расположите курсор на секции в левой части Design Window и кликните правой клавишей мыши. Выберете Format section. Появляется диалог Section Expert.
Можно также выбрать секцию из меню Format. Появится другой диалог Format section. Этот диалог предложит выбрать секции, которые нужно отформатировать. В правой части диалога располагаются опции форматирования (например, опция New Page After позволит расположить каждую группу на отдельной странице) и кнопки для задания сложных условий форматирования при помощи формул.

Вставка специальных полей

Существует информация, которая хотя и не содержится в БД, тем не менее, важна для отчета, например, дата отчета или номер страницы. Для вставки этих полей нажмите Insert|Speсial Field. Раскрывающееся меню предоставит список из двенадцати опций. Page Number Field показывает номер страницы. Print Date Field показывает дату печати отчета. Формат даты по умолчанию - МесяцДеньГод, но, кликнув по выбранному полю правой клавишей мыши, формат можно изменить. Group Number Field показывает номер группы. Если мы установим его на Page Footer, он будет показывать число групп на странице. Record Number Field показывает номер записи. Если установить его на Page Footer, он будет показывать число записей на странице.

Вставка линий и рамок

Мы можем придать презентационый вид отчету, выделив данные линиями и рамками.
Для рисования линий можно воспользоваться кнопками из нижнего дополнительного ряда кнопок. Кликните по соответствующей кнопке, можно увидите курсор в виде карандаша на экране. Передвиньте курсор на место начала линии и нажмите кнопку мыши. Не отпуская кнопку ведите курсор к концу линии, затем отпустите кнопку. Рисование рамки производится аналогично. Передвиньте курсор на место левого верхнего угла рамки и нажмите кнопку мыши. Не отпуская кнопку ведите курсор к правому нижнему углу рамки линии, затем отпустите кнопку. Для изменения формата линии или рамки, выделите их и нажмите на правую кнопку мыши. Можно изменить толщину линии или ее стиль - от сплошной до пунктирной. Графики, рамки и линии, расположенные в секциях Header и Footer будут показаны на каждой странице. Графики, рамки и линии, расположенные в секции Detail будут показаны на каждой записи.

Вставка картинки

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

Вставка OLE объектов

После помещения картинки в отчет ее уже нельзя редактировать. Для редактирования графики, которую вставили в отчет необходимо выйти из Crystal Reports, открыть приложение-источник, изменить картинку, удалить старую картинку и вставить новую. Всех этих шагов можно избежать используя технологию OLE (Object Linking and Embedding). OLE позволяет нам вставлять данные или образы, которые берутся из других приложений в отчет и модифицировать их внутри отчета. Crystal Reports является контейнером OLE и может возвращать объекты, которые созданы в других приложениях, если они поддерживают OLE.
Для вставки OLE объекта выберите Insert| OLE Object из меню. Откроется диалог Insert Object.
Можно выбрать Create New, либо Create from File. Кликните по кнопке Create New если нужно создать новый обьект и вставить его в отчет. После выбора Create New, появится список Object Type. Кликните по кнопке Create from File если нужно вставить в отчет существующий объект. Например, если был открыт и сохранен файл из Microsoft Exel, и нужно использовать его как объект, кликните по File и выберете имя файла из списка.
Вставим crazeb.bmp в заголовок. С точки зрения свойств мало разницы картинка это или нет. Однако, если дважды кликнуть по картинке (picture), нам будет доступен лишь минимальный набор опций форматирования, а если по объекту (object), можно войти в приложение, которое создало объект и модифицировать его. Можно сохранить изменения и вернуться в отчет, где все изменения отразятся в объекте.

Вставка графика

Безусловно, наглядней представлять информацию графически. С Crystal Reports можно достаточно просто создать график, используя Char/Craph expert, который проведет шаг за шагом по всему процессу вставки графика.
Порядок вставки графика: После этого появится Char/Craph expert - диалог с закладками. Первая закладка, Type, позволит выбрать тип графики. Выбрав тип графики можно использовать прочие закладки для выбора данных, текста к графику и некоторые дополнительные опции. Можно выйти из Char/Craph expert в любое время, кликнув на Graph Done. Рассмотрим каждую закладку подробно.
Закладка Type предоставляет 12 различных типов графиков. Для выбора типа графика кликните по соответствующей кнопке. Crystal Reports построит выбранный график, который можно в дальнейшем подправить.
Закладка Data позволяет определить, на каких полях будет основан график. Можно построить график, основываясь на полях секции Detail, на суммирующих полях и на основе информации матричного отчета Cross Tab. Опция Put Graph используется для выбора секции, в которой будет показан график. График может быть показан единожды в секции заголовка, или в группе для суммирующего поля, на котором основан график.
Закладка Text позволяет задать заголовки, подписи и подписи по осям в графике.
Закладка Options задает различные возможности для отображения графика. Если включена опция Show Legend, подписи (Legend) показываются на отчете. Если включена опция Show Grid Lines, сетка показывается на отчете, если график не типа Pie. По умолчанию опция выключена. Когда Show Grid Lines включен, показывается число, ассоциированное с каждой ступенькой графика. По умолчанию опция выключена. При помощи опции Direction of Bar можно выбрать направление полосок на графике.

В итоге, после вставки графика, отчет может выглядеть так:

В следующей статье будут рассмотрены способы связывания таблиц, способы создания специальных суммирующих отчетов, матричных отчетов, подотчетов, применение модулей Dictionary и Query Designer и вопросы распространения отчетов.

Координаты автора:
Учебно-консалтинговый центр Interface Ltd.,
Тел. (095)135-55-00, 135-25-19, 135-77-81,
e-mail: mail@interface.ru
http://www.interface.ru


Interface Ltd.

Ваши замечания и предложения направляйте по адресу: webmaster@interface.ru

Reklama.Ru. The Banner Network.