Продолжаем обсуждение темы "Шаг 20 - Некоторые особенности синтаксиса формул".
Функции даты и времени
Мы уже рассмотрели функции форматирования значений даты/времени. Однако по своей сущности, тип данных дата/время – числовой, что подразумевает некоторые арифметические операции. В Crystal Reports допустимы две таких операции:
Вычитание одной даты из другой.
Например: {Orders.PayDate}-{Orders.OrderDate}
Возвращает разницу (в днях) между датой оплаты и датой заказа.
Сложение даты с целым числом
Возвращает дату, отстоящую от исходной на число дней, определенное числом. Это число может быть как положительным, так и отрицательным.
Формулы If-Then-Else
Людям, мало-мальски знакомым с программированием нет смысла объяснять предназначение этой формулы. В Crystal Reports ее синтаксис таков:
If <проверка> Then <результат для true> Else <выражение для false>
Ключевое слово Else и выражение для него необязательны. Тестовая часть формулы использует операторы сравнения. Для создания сложных условий проверки можно одновременно использовать несколько операторов, объединенных булевыми операторами And, Or и Not.
If IsNull({Orders.Pay}) Then “Не оплачено” Else {Orders.Pay}
Для того, чтобы формула работала, необходимо привести выражения к одинаковому типу:
Так правильно:
If IsNull({Orders.Pay}) Then “Не оплачено” Else ToText({Orders.Pay},”#0.00”)
Бывает, что внутри секций формулы необходимо выполнить несколько операторов. В таком случае группу операторов необходимо заключить в круглые скобки.
Формулы "контролирующие" поля БД
Бывает, что для каких-либо действий необходимо знать значение предыдущего или следующего поля БД. Для этого Crystal Reports содержит специальные функции Previous(fld) и Next(fld).
Пример:
If {Persons.LName}=Previous({Persons.LName}) Then “ -----/------ “ Else {Persons.LName}
Эта формула подавляет повторение фамилий в отчете.
Область действия переменных
Основная идея применения переменных заключается в сохранении информации во время обработки отчета. Бывает необходимо уточнить, как долго и где будет храниться переменная. Для этого при объявлении переменной можно указать область ее действия
Примеры:
Local NumberVar Bonus; Global StringVar BonusName; Shared DateVar BonusDate;
По умолчанию, если не указано ключевое слово области действия, область действия переменной - Global.