Шаг 20 - Некоторые особенности синтаксиса формул

Поскольку Crystal Reports использует свой собственный язык формул, в нем имеется ряд "тонких моментов", о которых следует помнить.

Перегруженные функции.

Многие функции имеют несколько форм, которые имеют одинаковое имя, но принимают разное количество аргументов. Таковыми являются, например, практически все функции вычисления общих и промежуточных итогов. Например, функция Sum имеет три варианта синтаксиса: с одним, двумя и тремя аргументами.

  1. Sum({Orders.Qv}) - Возвращает общее количество заказов.
  2. Sum({Orders.Qv},{Customers.Name}) - Возвращает промежуточное количество заказов для группы, связанной с конкретным потребителем.
  3. Sum({Orders.Qv},{Orders.Date},”weekly”) - Возвращает промежуточное количество заказов для группы (итог за неделю), связанной с конкретной датой. Третий аргумент соответствует периоду времени, если группа сформирована по полю даты. Если надо еще более детализировать промежуточные итоги, в качестве третьего аргумента может выступать еще одно поле БД.

Обработка значений Null.

Вообще-то очень желательно, чтобы поля с таким значением вообще не попадали в отчет, так как сильно тормозят его формирование. Если поле БД просто вставлено в отчет, и в нем попадется значение Null, в готовом отчете так и будет написано: <Null>. Если поле со значением Null попадется в формуле, формула также возвратит Null независимо от синтаксиса. Единственное исключение – функция IsNull(), которая, собственно, и предназначена для обработки таких значений.

Для борьбы с Null существует еще один способ. Идем в меню File->Report Options…. В открывшемся окошке устанавливаем флажок Convert NULL Field to Default:

20_1.gif (11881 b)

Особенности работы со строками.

При вычислении формул Crystal Reports сам пытается понять тип переданного аргумента. Поэтому следует быть осторожным, в частности с операцией сложения. Оператор "+" проводит как сложение чисел, так и конкатенацию строк. (Для того, чтобы гарантировать конкатенацию, используйте оператор "&").

В "Шаг 16 - Комбинирование текстовых полей с другими" мы провели комбинирование текстового поля с полем базы данных. А вот как можно сделать тоже самое с помощью формулы:

“Продано “ & {Order Details.Quantity} & “ штук”

Еще раз обращаю внимание на пробелы в строках (после продано и перед штук). Нельзя о них забывать. С формулами, конечно, больше возни, но и работают они быстрее. Если для вас важен фактор скорости формирования отчета (т.е. если полученный отчет будет распространятся в электронном виде), лучше использовать формулы. Бумаге, естественно, все равно.

В общем, функции для работы со строками очень похожи на аналогичные в других языках программирования. Например, имеются функции Left, Right, Mid.

Пример:
Имеется база данных с фамилиями, именами и отчествами. А в отчет требуется вывести фамилию и инициалы:

{Persons.LName} & “ “ & Left({Persons.Name},1) & “. “ & Left({Persons.SName},1) & “.”

Crystal Reports позволяет также интерпретировать любые данные как массивы символов, и следовательно, применять к ним функции, принимающие массивы и операторы массивов. Нумерация этих массивов начинается с 1.

Приведенный выше пример можно переписать так:

{Persons.LName} & “ “ & {Persons.Name}[1] & “. “ & {Persons.SName}[1] & “.”

Если надо выделить три первых символа имени:

{Persons.Name}[1 to 3]

Особенно удобен такой синтаксис при работе с датами (которые тоже бывают представлены в символьном формате). Он позволяет "разобрать дату на части": день, месяц, год. Подробнее о датах чуть позже.

Среди строковых функций Crystal Reports имеется одна, заслуживающая особого внимания. Это функция ToText. О ней – в следующем шаге.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Юрий Гвоздев.