Centura Report Builder - технологии конечного пользователя для формирования выходных документов информационных системБольшаков С.А.
Оглавление
В данной статье в первую очередь мы рассмотрим: особенности программного продукта Centura Report Builder (CRB), которые характерны для конечных пользователей информационных систем и механизмы АХ - технологий, позволяющих сделать данный продукт при создании выходных документов практически независимым от базовых средств разработки. Теперь CRB может использоваться и отдельно от SQLWindows/CTD, что, несомненно, может способствовать его широкому применению при разработке информационных систем самого различного назначения. Любому разработчику информационных систем известно, что без выходных документов (выходных форм, отчетов и т.д.) невозможно построение, использование и внедрение программных разработок данного класса. Более того, эта именно составляющая информационных приложений в большей степени подвержена изменениям в процессе сопровождения: изменяются требования к оформлению документации, трансформируются пользовательские взгляды на возможности эксплуатируемой системы, выходят новые нормативные и законодательные акты и т.п. Функцию построения таких документов берут на себя генераторы отчетов. Однако большинство подобных компонент являются встроенными в средства разработки, что, в конечном счете, приводит к значительной зависимости механизмов формирования отчетов от программного обеспечения. Следствием этого является невозможность конечного пользователя (без участия разработчика) создать новые выходные формы, даже основываясь на данных, которые уже содержатся в базах данных. Программный продукт Centura Report Builder (CRB), который ранее входил только в состав распространенных средств разработки Centura Team Developer (CTD) теперь может использоваться отдельно, как с другими СУБД, так и с другими средствами разработки. Кроме того, в него включены все возможности для автономной работы и без средств разработки: возможности получать и оформлять выходные документы конечным пользователем без участия разработчика. Ранее в статье, опубликованной на нашем сайте, мы рассмотрели основные возможности и особенности CRB. Здесь мы не будем повторяться и постараемся обратить внимание на другие аспекты использования данного программного продукта. Работа в режиме конечного пользователя Многие опытные пользователи продуктов фирмы Gupta/Centura, несомненно, помнят программную компоненту Quest, которая в новые версии средств разработки не включается. Заменить эти удобные для конечного пользователя возможности Quest может теперь CRB, который не только включается в новые средства разработки, но и может применяться и поставляться автономно. К сожалению не все возможности Quest перекочевали в Report Builder (нет редактора форм и автономных диаграмм), но основные функции по построению выходных документов отражены в программном продукте. Кроме того, в CRB: использован современный интерфейс, развиты возможности визуального проектирования запросов и шаблонов, обеспечено получение актуальной информации из БД. Кстати, предусмотрена возможность автоматического конвертирования для старых форматов Quest в новые форматы для CRB. Работа конечного пользователя заключается в следующих операциях:
Лишним, наверное, будет замечание, что разработанные запросы и шаблоны могут запоминаться и использоваться в дальнейшем для формирования подобных отчетов или новых отчетов на их основе. Так можно создать библиотеку запросов и отчетов. От пользователя в этом случае требуются только знание состава и структуры данных, хранимых в БД. Ниже мы кратко рассмотрим создание запросов к БД и формирование шаблонов для построения выходных документов самой различной сложности. При визуальном создании нужно выделить и связать таблицы данных, их которых информация должна включаться в отчет. Ниже показано окно с закладками для настройки запросов.
Закладка Source позволяет выбрать и связать таблицы из БД. Закладка Condition позволяет задать условия выборки (аналог where). Закладка Sort определяет условия сортировки выбираемых записей. В закладке GroupBy определяются правила группировки записей. В закладке SQL опытный пользователь может редактировать или изменять запросы на SQL-языке. В карточке Result можно предварительно посмотреть результаты выполнения запроса из реальной БД. После создания запроса автоматически создается стандартный шаблон для вывода отчета. При задании свойств запросов можно использовать редактор формул (см. ниже), в этом случае доступными будут возможности конкретного СУБД, для которого построены запросы, и переменные - поля выбранных таблиц данных. Выбор вида СУБД и конкретных баз данных выполняется в закладке Source окна формирования запросов. Если стандартная форма шаблона пользователя не устраивает, то пользователь может оформить шаблон отчета в режиме дизайнера шаблонов. Форма окна дизайнера представлена на рисунке, расположенном ниже. В правой части окна дизайнера расположено поле шаблона. В левой части в виде дерева классифицированы и доступны объекты шаблона: переменные ввода (input variables) и поля БД (input items), формулы для расчетов (formulas) и итоговые переменные (totals). Поле шаблона подразделяется на части включающие: строки для размещения данных (detail block),общие заголовки отчета, заголовки страниц, итоги отчета и итоги страниц. В каждой выводимой строке шаблона могут размещаться: данные, текстовые заголовки, рисунки и графики. Доступны простые возможности форматирования и управления выводом полей и строк документа. После оформления шаблона отчета пользователь, нажав на одну кнопку, может увидеть результаты с реальной информацией из БД. Запомнить результаты проектирования запросов и шаблонов можно: в общий файл для автономного использования (*.CQT) и отдельный файл шаблонов для использования шаблона из приложения (*.QRP). Способы автоматизации расчетов в выходных документах При формировании выходного документа могут быть выполнены необходимые расчеты, как отдельных полей, так и итоговых значений. Для этих целей используются выражения и формулы. На рисунке представленном ниже показано окно редактора формул. При задании формул и выражений могут быть использованы: поля из БД, специальные функции (достаточно большой набор), переменные передаваемые из приложения и уже вычисленные другие поля вывода результатов. Предусмотрены функции работы с датами, строками, проверки условий и другие. Практически доступны самые сложные вычисления со сложной логикой отображения данных. Кроме этого можно управлять выводом, отдельных строк отчета, при установке логических условий для вывода отдельных линий форматирования и разметки документа в зависимости от выводимой информации и управляющих переменных.
Работа из программ CTD и с другими средствами разработки При работе со средствами разработки ("родной" для CRB является Centura Team Developer), доступными становятся следующие возможности формирования выходных документов: использование базовых функций языка SAL, использование библиотек классов Quick Object для построения отчетов и использование специальных AX объектов для отчетов. В последнем случае программный продукт можно использовать с любыми другими средствами разработки, которые обеспечивают подключение и использование АХ объектов (например, MS VB и MS VC). При работе из приложения на базовом уровне взаимодействие выполняется по схеме показанной на рисунке.
Для обслуживания запросов из программы загружается специальная резидентная часть CRB (Report Builder engine), с которой взаимодействует приложение для формирования, просмотра и печати отчетов. В одном направлении поставляются данные и управляющие команды, позволяющие создавать выходной документ, а в приложение также передаются управляющие воздействия, на основе которых строиться логика формирования документа. При работе в DataBase Explorer из CTD, также доступны все возможности дизайнера запросов и шаблонов. Это позволяет более оперативно настраивать шаблоны и использовать запросы в процессе программирования и отладки приложений. Использование Quick Object для построения отчетов Другим простым и удобным способом построения отчетов в среде CTD является использование специальных классов объектов - Quick Object, для работы с базами данных и отчетами. Эти классы описаны в библиотеке QCKRPT.APL (для обработки функций класса используется библиотека - QRPTi20.DLL). В состав системы классов входят: cQuickReport для описания объектов отчета, cReport - как базовый и функциональный класс для построения отчетов, cReportBlock - для описания линий данных отчета, cReportFormula - для динамического управления вычислениями, cReportEvent - для обработки событий при формировании отчетов и другие. Пример описания класса для построения и формирования отчета приведен на рисунке. В данном случае класс cMyQuickReport наследуется от стандартного класса cQuickReport. В нем дополнительно описываются две функции: _OnGetRecord для обработки события динамической передачи данных в отчет и _Construct для описания свойств отчета и его конструирования. Данный пример текста на языке SAL взят из набора стандартных примеров CTD2000 - QR_TUT3.APT. В нем иллюстрируются возможности динамического создания отчетов и в том числе: полей, групповых блоков, формул и т.д. Для настройки такого отчета пользователю необходимо подключить в приложение QUICK таблицу, связанную с таблицей БД и настроить специальный объект типа cQuickReport. Настройки выполняются в специальном окне свойств, приведенном ниже на рисунке.
В специальном дизайнере шаблона QUICK отчета, вызываемом при его настройке можно оформить его размещение и форматирование. Описания шаблонов и запросов запоминаются в OUTLINE приложения и не требуют дополнительных файлов для сохранения. Рассмотренные возможности настройки выходных документов и динамического их формирования основываются на свойствах CRB и могут стать удобным механизмом для построения библиотек отчетов с изменяемой структурой. Описания классов и функций Quick Reports, к сожалению, отсутствуют в документации, но их краткое описание можно найти в справочной системе (centura.hlp) в разделе Quick Reports. Несомненно, читатель может возразить, где же в этом случае ориентация на конечного пользователя, так как нужно знать элементы программирования. Это так. Но отмечу, что при настройке отчетов в окнах свойств объектов, вписанных в приложения (эти настройки очень похожи на настройки при работе в дизайнере CRB) можно обучить любого программиста и пользователя. Поэтому считаю, что данная возможность несколько ближе к конечному пользователю, чем явное программирование отчетов. АХ технологии и объекты при создания отчетов для CTD Более стандартным подходом при создании выходных документов можно считать использование специальных AX компонент, входящих в состав продукта CRB. Это позволяет использовать для взаимодействия с ним не только "родные" средства разработки (SQLWindows/CTD), но и воспользоваться любыми другими средствами, поддерживающими эти технологии (отметим, что большинство известных программных средств обеспечивает такие возможности, в частности это - MS VB и MS VC++). Взаимодействие основано на регистрации в системе COM серверов для CRB и интерфейсе с ними на основе АХ. Рассмотрим работу с объектами библиотеки "Centura ReportBuilder Automation Lib" для случая CTD и MS VB. Для работы в CTD, как показано на нижнем рисунке, необходимо подключить библиотеку ReportBuilder.apl. Эта библиотека автоматически подключает две другие библиотеки для работы с AX объектами вообще (Automation.apl) и для работы с АХ отчетами (Centura ReportBuilder Automation Lib.apl). Если данные библиотеки недоступны, то их необходимо сгенерировать на основе ReportBuilder.tlb, которая представлена в корневом каталоге CENTURA или CRB. Способ генерации был описан в статье на нашем.
Далее на основе класса cReportBuilderWindow, который подключается из новых библиотек, создается универсальное окно отчетов - frmReport. В этом окне предопределен объект axReport типа АХ (axReport from cReportBuilderWindow). Свойства этого объекта запоминаются в OUTLINE и изменяются с помощью специального окна, которое мы здесь не приводим. В окне отчетов определяются три функции, которые будут применяться для создания и выполнения отчета: RunReport, CreateQuery и CreateReport. Названия этих функций определяют их назначение. Функция RunReport активизируется сразу после создания окна. Ее содержание дано на рисунке 8. В ней предварительно проверяется наличие сервера, обслуживающего АХ компоненту (вызов GetReportObject(objReport)). Затем создается его пустой шаблон и включается режим дизайнера отчета (CreateReportSkeleton, SetDesignMode(TRUE)). После этого вызывается функция создания запроса (CreateQuery(objReport)), привязки запроса к шаблону (objReport.MatchInputsToQuery()) и полная генерации шаблона отчета (CreateReport(objReport)), которые являются специфическими для данного нового документа и, поэтому, описываются в пользовательской части окна frmReport. Если отчет по каким либо причинам не может быть создан (зарегистрирован неправильно COM сервер для CRB), то выдается диагностическое сообщение.
На рисунке 9 показан фрагмент функции построения запроса для отчета. В нем локально объявлены объекты специальных классов АХ (для упрощения они не показаны): ReportBuilder_QueryTable - objTable1/2; ReportBuilder_QueryColumn - objCol1/2, ReportBuilder_QueryJoinkey - cJoinkey и ReportBuilder_QueryOrderby - cOrderby. Эти объекты используются для определения таблиц БД, полей связи, способа связи и способа упорядочения. Первоначально в этой функции устанавливается БД, с которой будет работать запрос: objReport.SetDatabase('ISLAND').
Далее выполняется подключение к БД (objReport.OpenConnection(bOK)). Затем к объекту отчета присоединяются нужные таблицы (objReport.AddTable('INVOICE', 'SYSADM', objTable1)) и поля к каждой таблице (objTable1.AddColumn('COMPANY_ID', objCol1)). Определяется порядок выборки по отдельным полям (objReport.AddOrderby(objCol1, TRUE, cOrderby)). С помощью специальной функции AddJoinkey добавляется JOIN, определяющий условие слияния двух таблиц. После добавления оставшихся полей в соответствующие таблицы - объекты, выполняется обновление (RegenerateSQL) и предварительная компиляция запроса (CompileQuery). При успешном завершении всех операций запрос в БД выполняется (ExecuteQuery - на рисунке не показано). Затем в функции RunReport вызывается функция форматирования и формирования отчета - CreateReport. В этой функции в локальной части описываются вспомогательные объекты, которые будут использованы для построения шаблона отчета: objGroup (для группового отчета), objInput (для входных переменных), objBlock (для блоков данных), objLine (для линий отчета) , objField (для полей выводимых данных),objTotal (для итоговых значений) и objExpression (для выражений и формул). Отметим, что весь набор элементов идентичен по составу тем, которые необходимо задавать в визуальном редакторе, что помогает легче ориентироваться в многочисленных функциях настройки шаблона. На рисунке 10 приведен фрагмент функции CreateReport. Рис. 10. Фрагмент функции CreateReport. Мы не будем здесь подробно описывать все возможности форматирования шаблонов, в полном виде данный текст на SAL вы найдете в примерах CTD (в частности, ReportBreakGroupTutorial.app). Формирование шаблона и отчета на его основе состоит из нескольких этапов:
Все перечисленные действия выполняются специальными функциями для соответствующих локальных объектов, включаемых в основной объект objReport, как контейнер. После завершения формирования шаблона и отчета окно отчетов переключается в режим просмотра результатов (objReport.SetDesignMode(FALSE)) и на экране появляются форматированные данные отчета данные. Ниже, на рисунке 11, приведен результат работы приложения на базе АХ компонент.
Подробное описание классов АХ для формирования отчетов и их методов Вы можете найти в документации (report.pdf) и справочной системе (centura.hlp). АХ технологии для других средств разработки Для работы в других средствах разработки информационных систем необходимо использовать операторы и функции, которые в них определены для работы с АХ. Ниже для примера приведен текст построения и выполнения отчета совместно с CRB для MS Visual Basic. Думаю, что пояснений здесь особых не требуется, так как вызываются функции, аналогичные рассмотренным выше функциям, а последовательность выполняемых действий полностью сохраняется. Особенностью в данном случае является использование одной процедуры, а не трех, но мы сохранили этот пример, так как подобный описан и в документации. Кроме того, в этом примере, для обозримости, значительно упрощена процедура формирования шаблона. Пример формирования отчета на MS Visual Basic: Private Sub StartPB_Click() Dim Report As Object Dim Table1 As Object Dim Table2 As Object Dim Column As Object Dim Column1 As Object Dim Column2 As Object Dim Joinkey As Object Dim Group As Object Dim Block As Object Dim Line As Object Dim Field As Object Dim OrderBy As Object Dim sText As String Set Report = OLEReport.object OLEReport.DoVerb (0) If Report.CreateReportSkeleton() Then Report.SetDesignMode (True) Report.SetDatabase ("ISLAND") If Report.OpenConnection() Then Set Table1 = Report.AddTable("DEPARTMENT", "SYSADM") Set Column1 = Table1.AddColumn("DEPT_ID") Set Column = Table1.AddColumn("DEPT_NAME") Set Table2 = Report.AddTable("EMPLOYEE", "SYSADM") Set Column2 = Table2.AddColumn("DEPT_ID") Set Column = Table2.AddColumn("EMPLOYEE_ID") Set Column = Table2.AddColumn("FIRST_NAME") Set Column = Table2.AddColumn("LAST_NAME") Set Joinkey = Report.AddJoinkey(Table1, Table2, Column1, Column2, "=", False, False, False) Set OrderBy = Report.AddOrderby(Column1, True) If Report.RegenerateSQL(True) Then If Report.CompileQuery(True) Then Call Report.ExecuteQuery Call Report.GetSQL(sText) Text1 = sText Call Report.MatchInputsToQuery Set Group = Report.GetReportGroup(ReportGroupType_Detail) Set Block = Group.GetBlock(BlockType_Detail) Set Line = Block.GetLine(0) Set Field = Line.CreateField() Call Field.SetExpText("SYSADM.DEPARTMENT.DEPT_ID") Call Field.SetLeft(0) Set Field = Line.CreateField() Call Field.SetExpText("SYSADM.EMPLOYEE.EMPLOYEE_ID") Call Field.SetLeft(1000) Set Field = Line.CreateField() Call Field.SetExpText("DEPT_NAME") Call Field.SetLeft(2000) Set Field = Line.CreateField() Call Field.SetExpText("LAST_NAME") Call Field.SetLeft(4000) Set Field = Line.CreateField() Call Field.SetExpText("FIRST_NAME") Call Field.SetLeft(6000) Set Line = Block.AppendLine() Set Field = Line.CreateField() Call Field.SetLeft(0) Call Field.SetExpText("SYSADM.EMPLOYEE.DEPT_ID") Call Report.SetDesignMode(False) End If End If End If End If End Sub Конец примера формирования отчета на MS Visual Basic Использование АХ компонент и СОМ серверов для CRB позволяет сделать практически независимыми от средств разработки и значительно уростить процесс генерации отчетов. В заключение статьи отметим, что технологии создания выходных документов постоянно развиваются. Появляются новые средства и механизмы. Кроме того, с использованием Centura Report Builder можно создать наборы библиотек и программ, обеспечивающих широкий диапазон универсальности и динамики при создании информационных систем самой высокой сложности. |