Сергей Маклаков - BPwin и Erwin. CASE-средства для разработки информационных систем
RPTwin позволяет установить сортировку и группировку по вычисляемому значению. Для создания вычисляемого значения следует щелкнуть по кнопке Sort/Group on Calculated Value и в появившемся диалоге Formula Editor набрать текст формулы (например, "LTrim ({Arrow Name})"). Синтаксис формул будет рассмотрен в гл. 5.3. Созданная формула автоматически добавляется в правый список диалога Sorting/Grouping.
5.2.3. Изменение файла данных отчета
Любой отчет RPTwin использует в качестве источника единственный файл данных (.LWD), имя которого указывается при создании отчета. Иногда необходимо использовать созданный шаблон отчета (файл-LWR) для работы с различными наборами данных. RPTwin позволяет изменить файл набора данных.
Для этого необходимо выбрать пункт меню Options/Current DataSet. Появляется диалог Current DataSet (рис. 5.8), который содержит два поля ввода - DataSet Currently In Use By This Report и DataSet Linked To This Report. Поле DataSet Currently In Use By This Report показывает файл данных, который используется в отчете. В поле DataSet Linked To This Report показывается файл, который сохраняется вместе с отчетом. Обычно в обоих полях показывается один и тот же файл.
Если необходимо временно использовать другой файл данных, следует указать его имя в верхнем поле. Новый файл данных должен иметь те же самые имена колонок, что и старый, типы колонок также должны совпадать. Если имена или типы колонок не совпадают, поля отчета получают имя Bad Formula.
Рис. 5.8. Диалог Current DataSet
Если необходимо изменить файл данных для его постоянного использования в дальнейшем, следует указать его имя в нижнем поле и щелкнуть по кнопке Link. Указанный файл данных (*.LWD) будет связан с текущим файлом шаблона отчета (*.LWR). По умолчанию указывается полное имя файла (путь+имя), которое запоминается в шаблоне отчета. Если не указывать путь (кнопка No Path), то шаблон отчета не привязывается к конкретному месту на диске. В этом случае RPTwin сначала ищет файл данных в каталоге по умолчанию (DATASETS), затем в каталоге, в котором содержится файл шаблона отчета, затем в текущем каталоге.
5.2.4. Изменение свойств отчета
RPTwin позволяет изменять свойства как уже созданного отчета, так и новых отчетов. Свойства существующего отчета редактируются в диалогах Current Layout и Page Layout. Так, рассматриваемые ниже свойства Show Text Borders, Add Names to New Data Fields, Snap Objects To Grid, Show Grid, Measurement Units, Number Formats и Enable Case Sensitive Sort для уже созданного отчета можно изменить в диалоге Current Layout (меню Options/Current Layout).
Те же самые свойства для вновь создаваемых отчетов редактируются в диалоге Page Layout (рис. 5.9).
Опция Default Data Format позволяет задать форматирование полей отчета по умолчанию. Отдельно задается формат для полей разных типов:
Datetime, Date, Time, Number, Money. Форматирование каждого поля в уже созданном отчете можно изменить в диалоге Data Field Properties (см. рис. 5.4).
По умолчанию RPTwin создает многоколоночный отчет, разбивая его по ширине, в случае необходимости - на несколько страниц. Если включить опцию Fit All Columns on One Page, то колонки будут сжаты так, чтобы уместить отчет по ширине на одной странице.
Рис. 5.9. Диалог Current DaiaSet
В группе Margins устанавливается ширина поля отчета всантиметрах или дюймах (Units).
Если опция Show Text Borders включена, все текстовые поля отчета заключаются в рамки.
При включенной опции Add Names to New Data Fields новые поля вносятся в отчет вместе с текстовым полем - именем колонки в файле данных.
Snap Objects To Grid позволяет жестко связать поля с координатной сеткой.
Show Grid - показывает координатную сетку.
В группе Number Formats задается формат числовых полей - разделители, символ валюты и др.
Опция Enable Case Sensitive Sort позволяет учитывать при сортировке различия в регистре.
5.3. Использование формул RPTwin
5.3.1. Создание формул RPTwin
RPTwin позволяет преобразовать в формулу любое поле данных. Для этого в диалоге Data Field Properties (см. рис. 5.4) следует щелкнуть по кнопке Formula Editor. Возникает диалог Formula Editor (рис. 5.10).
Рис.5.10. Диалог Formula Editor
По умолчанию в верхнем поле диалога (Formula:) отображается имя текущего поля данных отчета. В это поле следует внести текст создаваемой формулы. В левом списке диалога DataSet Columns содержится список колонок файла данных отчета, в правом (Functions) - список функций RPTwin. В нижнем списке (Operators) содержится список операторов. Для внесения колонки, функции или оператора в текст формулы следует дважды щелкнуть по соответствующей строчке списка. Группа кнопок Edit облегчает редактирование текста формулы. Текст формулы должен удовлетворять требованиям синтаксиса формул RPTwin. Если формула содержит ошибку, то при закрытии диалога Formula Editor (кнопка OK) возникнет диалог PLATINUM RPTwin с сообщением об ошибке.
Рассмотрим синтаксические правила формул RPTwin.
Имена колонок. Имена колонок не должны начинаться с цифры и не должны содержать специальных символов (пробел, символ оператора и т. д.). Имя колонки в примере на рис. 5.10 содержит пробел, что является ошибкой. Для использования имен колонок, содержащих специальные символы, их следует заключить в фигурные скобки. Имена полей, не содержащие специальных символов, можно использовать без скобок. Имя "Arrow Dest. Type" - неверное, имена "{Arrow Dest. Type}" и "Name" - не содержат ошибки. Если имя колонки содержит пробелы в начале или конце строки, эти пробелы должны быть заключены в фигурные скобки - "{ Name}" (два пробела в начале имени) или "{Name }" (два пробела в конце имени).
Операторы. RPTwin поддерживает три типа операторов:
арифметические: сложение +, вычитание -, умножение *, деление /;
текстовый оператор конкатенации &;
операторы сравнения, использующиеся в предикате конструкции If (<=, <, =, >=,>);
логические операторы (is in, contains, and, or, not, is null, is not null).
Арифметические операторы используются в обычном смысле. В арифметических выражениях могут быть использованы круглые скобки, при этом сначала выполняются действия в скобках.
Оператор конкатенации позволяет сложить значения текстовых полей. При создании формул, оперирующих с текстом, следует учитывать, что строковые константы заключаются в двойные кавычки. Так, если значение поля Arrow Dest. - "Брак", а поля Arrow Name - "Output", то результатом выполнения формулы "{Arrow Dest.}&" "&{ Arrow Name}" будет "Брак Output".
Типы данных. При выполнении действий над данными необходимо соблюдать правила соответствия типов. Если создать формулу ""Arrow" + 1.0", то RPTwin выдаст сообщение об ошибке несоответствия типов - текст не может быть сложен с числом. RPTwin различает пять типов данных:
Number;
Text;
Date;
Time;
Datetime.
Если возвращаемое значение формулы - строка, то в некоторых случаях при несоответствии типов RPTwin не выдает ошибки, а конвертирует операнды в соответствующий тип. Например, выражение "3&5" будет выполнено без ошибки. Число 3 конвертируется в строку "З", 5 - в "5", результатом выполнения формулы будет строка "35".
Если возвращаемое значение имеет тип Time, в качестве операнда можно использовать Datetime. Если возвращаемое значение имеет тип Datetime, в качестве операнда можно использовать Time, при этом в качестве даты используется 1 января 0001 года.
Арифметические операторы могут использоваться только с числами. Если возвращаемое значение - число, автоматически конвертация типов не производится. Для конвертации типов в этом случае следует явно использовать функции конвертации (см. табл. 5.3).
Учитывать типы данных необходимо также, если поля или константы используются в качестве аргументов функций. Список функций с указанием типов аргументов приведен в табл. 5.3.
5.3.2. Функции RPTwin
Функции RPTwin позволяют производить сложные вычисления и обработку данных отчета. Так же как и операторы, функции возвращают значение определенного типа. Для внесения функции в формулу можно дважды щелкнуть по функции в списке Functions диалога Formula Editor.
Агрегативные функции позволяют производить вычисления по нескольким строкам отчета. Некоторые функции (Sum, Avg, Min, Max, Count) выполняются контекстно, т. е. возвращают результат в зависимости от той секции отчета, в которой находятся. Например, если функция Sum(number) находится в секции Group Footer, она возвращает сумму, вычисленную по группе, если в Page Footer - то по странице. Другие агрегативные функции (GroupAvg GroupSum, GroupMin, GroupMax, GroupCount, ReportAvg, ReportCount, ReportMax, ReportMin, ReportSum) возвращают значение независимо от их расположения в отчете. Даже если функция ReportSum (number) находится в секции Group Footer, она возвращает сумму, вычисленную по всему отчету. Агрегативные функции группы, такие, как GroupAvg, вычисляют значения независимо от того, в какой секции текущей группы они расположены. Если такая функция располагается, например, в секции Report Footer, она вычисляет агрегативное значение по всему отчету.
RPTwin является двухпроходным (Two-Pass, другой термин - Look-Ahead) генератором отчетов. Это означает, что отчет выполняется в два этапа. На первом этапе просматриваются все данные и вычисляются значения функций. На втором этапе происходит непосредственно процесс печати или вывода на экран в режиме предварительного просмотра. Поэтому значения агрегативных функций Sum, Avg, Min, Мах, Count будут вычисляться одинаково, независимо от того, расположены ли они в секции Footer или Header.