Строковые формулы

Оценить
(0 голоса)

Очень часто база данных содержит строки и текстовые данные, которых недостаточно для создаваемого отчета. Например, вам может потребоваться отсортировать почтовые индексы, однако база данных содержит их только как часть поля City State Zip. Либо может возникнуть необходимость в подготовке отчета для печати чеков, в которых суммы печатаются прописью с использованием числовых полей и полей денежных значений базы данных. Все это является примером применения формул, которые либо создают строки, либо манипулируют строковыми данными.

Строки могут быть конкатенированы, или сцеплены вместе, с помощью знака + (плюс) или знака & (амперсанд). И хотя знак плюс означает также операцию сложения чисел, результаты будут зависеть от типа данных. Например, формула

25 + -J + 100

вернет числовой результат, равный 132. Поскольку все элементы формулы являются числами, знак плюс просто складывает эти числа вместе и в качестве ответа возвращает число.

Сравните эту формулу с такой формулой:

”25” + ”7” + "100"

или

”25” & "7" & ”100”

которая возвращает строку 257100. Когда цифры заключаются в кавычки, Crystal Reports интерпретирует значения в формуле как строки, а не как числа. А когда знак плюс или амперсанд применяется со строками, в результате выполняется конкатенация отдельных строковых элементов.

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

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

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

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

Результат очевиден: независимо от того, какую длину имеют имена или названия городов, они размещаются четко друг за другом (через один пробел).

Разумеется, получить такой же результат можно, скомпоновав эти поля базы данных в текстовые объекты (для получения более подробной информации о том, как можно скомпоновать данные в текстовые объекты, обратитесь к главе 2), формулы все же предлагают намного большую гибкость в том, что касается оформления внешнего вида отчета.

Строковые формулы

Строковые формулы

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

Конкатенация строковых полей выполняется очень просто путем обычного использования амперсанда, о чем свидетельствует следующий пример:

{Customer.Contact Title} & " " & {Customer.Contact First Name} & " " & {Customer.Contact Last Name}

Обратите внимание на то, что пробелы жестко закодированы в формуле посредством строкового литерала, который представляет собой просто заключенную в кавычки фиксированную строку. Вам придется часто пользоваться строковыми литералами в формулах конкатенации и в формулах If-Then-Else (которые еще будут рассматриваться далее в этой главе). В этой формуле литералы пробела будут отделять должность от имени, а имя от фамилии.

С помощью строковых литералов также можно создать и строку приветствия, например:

"Dear " & {Customer.Contact Title} & " " &

{Customer.Contact Last Name} &

Обратите внимание, что теперь должности предшествует слово ^DearwH пробел; помимо этого имеется также пробел, отделяющий должность от фамилии, и запятая, следующая за фамилией.

На заметку! Операция конкатенации & доступна как в синтаксисе Crystal, так и в синтаксисе Basic. А операция конкатенации +, которая не поддерживалась в предыдущих версиях

Crystal Reports, теперь также стала доступна в синтаксисе Crystal.

Существует множество ситуаций, когда может понадобиться сделать так, чтоб использовались только какие-нибудь определенные части строк в формуле, а не вся строка. Например, вы можете пожелать, чтобы в качестве части контактного имени в стандартном письме использовался только первый инициал. Извлечь из строкового поля только определенные символы можно, поместив после имени строкового поля число или набор чисел, заключенных в квадратные скобки (синтаксис Crystal) или в круглые скобки (синтаксис Basic). Эта функция получила название функции индексирования (subscript). Например, взгляните на следующую формулу, составленную с помощью синтаксиса Crystal:

{Customer.Contact Title} & " " & {Customer.Contact First Name}[1] &

". " & {Customer.Contact Last Name}

Обратите внимание на то, что в эту формулу будет включаться только первый символ имени, а также на то, что в литерал пробела между именем и фамилией была добавлена точка.

Многие из старых систем баз данных содержат информацию о датах в строковых полях, поскольку в ранних версиях больших вычислительных машин и старых системах баз данных данные типа даты не использовались. Чтобы сортировка по датам выполнялась правильно, нужно, чтобы год в этом поле предшествовал месяцу и дню. Таким образом, вовсе не редкость, когда дата 10 января 1999 года кодируется в строковом поле базы данных как 19990110.

Если вы хотите отобразить дату в формате мм/дд/гггг, чтобы сделать ее более удобочитаемой, вы должны использовать операции индексирования строки для выбора отдельных частей даты, добавления некоторых строковых литералов и изменения внешнего вида даты.

Решение вопроса со значениями NULL
Функция ToText
Разделение строк/извлечение строк по частям
Формулы, работающие с типом даты/времени
Количество дней между двумя датами

Добавить комментарий


Защитный код
Обновить