Выражения: различия между версиями
Sidminik (обсуждение | вклад) Нет описания правки |
Sidminik (обсуждение | вклад) Нет описания правки |
||
| (не показано 30 промежуточных версий этого же участника) | |||
| Строка 3: | Строка 3: | ||
Так, объект <code>Текст</code> может содержать выражения, обрамленные квадратными скобками. | Так, объект <code>Текст</code> может содержать выражения, обрамленные квадратными скобками. | ||
'''Пример:''' | '''Пример:''' | ||
<syntaxhighlight lang="js"> | <syntaxhighlight lang="js"> | ||
[2 + 2] | [2 + 2] | ||
| Строка 11: | Строка 10: | ||
==Редактор выражений== | ==Редактор выражений== | ||
'''Редактор выражений''' - предназначен для удобства написания выражения и может вызываться в тех местах интерфейса дизайнера, где поддерживается ввод выражений. | |||
[[Файл: expression_editor_1.png | center | border]] | [[Файл: expression_editor_1.png | center | border]] | ||
Редактор выражений представляет собой окно, в котором можно ввести текст выражения и вставить в него элементы из окна | Редактор выражений представляет собой окно, в котором можно ввести текст выражения и вставить в него элементы из окна <code>Данные</code>: | ||
[[Файл: expression_editor_2.png | center | border]] | [[Файл: expression_editor_2.png | center | border]] | ||
==Обращение к объектам отчета== | |||
'''Пример 1.''' Высота объекта Text1 (обращение по имени): | |||
::::<syntaxhighlight lang="js"> | |||
Text1.Height | |||
</syntaxhighlight> | |||
'''Пример 2.''' Имя файла, из которого был загружен отчет (использование переменной Report): | |||
::::<syntaxhighlight lang="js"> | |||
Report.FileName | |||
</syntaxhighlight> | |||
'''Пример 3.''' Название отчета (обращение к вложенным свойствам объекта): | |||
::::<syntaxhighlight lang="js"> | |||
Report.ReportInfo.Name | |||
</syntaxhighlight> | |||
==Использование функций .NET== | |||
Вы можете использовать любые объекты <code>.NET</code> в выражениях. | |||
'''Пример:''' использование функции <code>Max</code>: | |||
::::<syntaxhighlight lang="C#"> | |||
Math.Max(5, 10) | |||
</syntaxhighlight> | |||
===Сборки .NET=== | |||
По умолчанию отчет использует следующие сборки <code>.NET</code>: | |||
<syntaxhighlight lang="C#"> | |||
System.dll | |||
System.Drawing.dll | |||
System.Windows.Forms.dll | |||
System.Data.dll | |||
System.Xml.dll | |||
</syntaxhighlight> | |||
Вам доступны все объекты <code>.NET</code>, объявленные в этих сборках. | |||
Если вам нужно получить доступ к другой сборке, добавьте ее название в список сборок отчета. | |||
Это можно сделать в меню <code>Отчет|Свойства…</code>, выбрав в окне элемент <code>Скрипт</code>. | |||
[[Файл: net_function_1.png | center | border]] | |||
Например, если вы хотите использовать в отчете функцию, объявленную в вашем приложении, добавьте ссылку на сборку приложения (<code>.exe</code> или <code>.dll</code>) в список сборок отчета. | |||
===Обращение к функциям=== | |||
После этого можно обращаться к функции, используя пространство имени (<code>namespace</code>) вашего приложения. Например, если в приложении определена следующая функция: | |||
<syntaxhighlight lang="C#"> | |||
namespace Demo | |||
{ | |||
public static class MyFunctions | |||
{ | |||
public static string Func1() | |||
{ | |||
return "Hello!"; | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
Обратиться к ней в отчете можно так: | |||
<syntaxhighlight lang="C#"> | |||
Demo.MyFunctions.Func1() | |||
</syntaxhighlight> | |||
Если добавить в скрипт директиву <code>using Demo</code>, это позволит укоротить форму обращения к функции: | |||
<syntaxhighlight lang="C#"> | |||
MyFunctions.Func1() | |||
</syntaxhighlight> | |||
Для обращения к переменным или функциям, которые были вами определены в скрипте отчета, используйте имя переменной или функции: | |||
<syntaxhighlight lang="C#"> | |||
myPrivateVariableThatIHaveDeclaredInScript | |||
MyScriptFunction() | |||
</syntaxhighlight> | |||
Использовать в выражении можно функции, которые возвращают значение. | |||
==Обращение к данным отчета== | |||
Помимо стандартных языковых элементов, в выражениях можно использовать следующие элементы отчета: | |||
*поля источников данных; | |||
*системные переменные; | |||
*итоговые значения; | |||
*параметры отчета. | |||
Все эти элементы содержатся в окне <code>Данные</code>. | |||
Любой из этих элементов можно использовать в выражении, заключив его в квадратные скобки. Например: | |||
<syntaxhighlight lang="C#"> | |||
[Page] + 1 | |||
</syntaxhighlight> | |||
Это выражение возвращает номер следующей печатаемой страницы. | |||
В выражении используется системная переменная <code>Page</code>, которая возвращает номер текущей страницы отчета. Она заключена в квадратные скобки. | |||
==Обращение к источникам данных== | |||
'''Пример 1.''' Обращение к полям источников данных: | |||
::::<syntaxhighlight lang="C#"> | |||
[Имя источника.Имя поля] | |||
</syntaxhighlight> | |||
'''Пример 2.''' Имя источника отделяется от имени поля точкой, например: | |||
::::<syntaxhighlight lang="C#"> | |||
[Employees.FirstName] | |||
</syntaxhighlight> | |||
'''Пример 3.''' Имя источника может быть составным в случае, если мы обращаемся к источнику данных, используя связь (<code>relation</code>). | |||
::::<syntaxhighlight lang="C#"> | |||
[Products.Categories.CategoryName] | |||
</syntaxhighlight> | |||
'''Пример 4.''' Операции с полями одинаковых типов данных. | |||
::::<syntaxhighlight lang="C#"> | |||
[Employees.FirstName] + " " + [Employees.LastName] | |||
</syntaxhighlight> | |||
Каждое поле имеет определенный тип данных - он задается в свойстве DataType поля (его можно увидеть в окне "Свойства", если предварительно выбрать поле данных в окне "Данные"). От того, какой тип имеет поле, зависит, каким образом его можно использовать в выражении. Так, в примере выше, оба поля (имя и фамилия) имеют строковый тип и поэтому их допустимо использовать таким образом. | |||
'''Пример 5.''' Операции с полями разных типов данных. | |||
В следующем примере мы попробуем использовать поле <code>Employees.Age</code> числового типа, что приведет к ошибке: | |||
::::<syntaxhighlight lang="C#"> | |||
[Employees.FirstName] + " " + [Employees.Age] | |||
</syntaxhighlight> | |||
Ошибка происходит потому, что нельзя напрямую складывать строку и число. Для этого число надо явным образом преобразовать в строку: | |||
::::<syntaxhighlight lang="C#"> | |||
[Employees.FirstName] + " " + [Employees.Age].ToString() | |||
</syntaxhighlight> | |||
В данном случае мы обращаемся с полем <code>Employees.Age</code> так, будто это целочисленная переменная. Так оно и есть. Мы уже знаем, что все выражения компилируются в исполняемый код. Все нестандартные с точки зрения компилятора вещи (вроде обращения к системным переменным и полям данных) конвертируются в другой вид, понятный компилятору. Так, последнее выражение будет преобразовано в следующий вид: | |||
::::<syntaxhighlight lang="C#"> | |||
(string)(Report.GetColumnValue("Employees.FirstName")) + " " + (int)(Report.GetColumnValue("Employees.Age")).ToString() | |||
</syntaxhighlight> | |||
Как видно, дизайнер при компиляции выражений заменяет обращения к полям данных следующим образом: | |||
<code>[Employees.FirstName]</code> --> <code>(string)(Report.GetColumnValue("Employees.FirstName"))</code> | |||
<code>[Employees.Age]</code> --> <code>(int)(Report.GetColumnValue("Employees.Age"))</code> | |||
То есть, мы можем использовать поле БД в выражениях, как будто это переменная, имеющая определенный тип. | |||
Например, следующее выражение вернет первый символ имени сотрудника: | |||
::::<syntaxhighlight lang="C#"> | |||
[Employees.FirstName].Substring(0, 1) | |||
</syntaxhighlight> | |||
==Обращение к системным переменным== | |||
В выражениях можно использовать следующие системные переменные (они доступны в окне <code>Данные</code>): | |||
{|class="wikitable" style="background-color: #fff;" | |||
|- | |||
! Переменная | |||
! Тип данных .NET | |||
! Описание | |||
|- | |||
| '''<code>Date</code>''' | |||
|DateTime | |||
|Дата и время старта отчета. | |||
|- | |||
| '''<code>Page</code>''' | |||
|int | |||
|Номер текущей страницы. | |||
|- | |||
| '''<code>TotalPages</code>''' | |||
|int | |||
|Общее количество страниц в отчете. Чтобы использовать эту переменную, надо включить двойной проход у отчета. Это можно сделать в меню <code>Отчет/Свойства…</code>. | |||
|- | |||
| '''<code>PageN</code>''' | |||
| string | |||
|Номер страницы в виде: <code>Страница N</code>. | |||
|- | |||
| '''<code>PageNofM</code>''' | |||
| string | |||
|Номер страницы в виде: <code>Страница N из M"</code>. | |||
|- | |||
| '''<code>Row#</code>''' | |||
| int | |||
|Номер строки данных внутри группы. Это значение сбрасывается при старте новой группы. | |||
|- | |||
| '''<code>AbsRow#</code>''' | |||
| int | |||
|Абсолютный номер строки данных. Это значение не сбрасывается при старте новой группы. | |||
|- | |||
|} | |||
Каждая переменная имеет определенный тип данных, от этого зависит, как ее можно использовать в выражении. | |||
'''Пример:''' использование даты: | |||
::::<syntaxhighlight lang="C#"> | |||
[Date].Year | |||
</syntaxhighlight> | |||
Это выражение возвращает текущий год. | |||
Так как переменная <code>Date</code> имеет тип <code>DateTime</code>: | |||
*можно обратиться к ее свойству <code>Year</code>; | |||
*аналогичным образом можно получить текущий месяц (<code>[Date].Month</code>). | |||
Дизайнер преобразует обращение к системной переменной в следующий вид (на примере переменной <code>Date</code>): | |||
::::<syntaxhighlight lang="C#"> | |||
((DateTime)Report.GetVariableValue("Date")) | |||
</syntaxhighlight> | |||
==Обращение к итоговым значениям== | |||
Для обращения к итоговому значению используйте его имя: | |||
<syntaxhighlight lang="C#"> | |||
[TotalSales] | |||
</syntaxhighlight> | |||
При этом дизайнер преобразует обращение к итогу в следующую форму: | |||
<syntaxhighlight lang="C#"> | |||
Report.GetTotalValue("TotalSales") | |||
</syntaxhighlight> | |||
Как видно, здесь тип значения не используется. | |||
Это потому, что итоговое значение имеет тип <code>FastReport.Variant</code>. | |||
Оно может быть напрямую использовано в любых выражениях, потому что тип <code>FastReport.Variant</code> автоматически приводится к любому типу. | |||
Например: | |||
<syntaxhighlight lang="C#"> | |||
[TotalSales] * 0.2f | |||
</syntaxhighlight> | |||
==Обращение к параметрам отчета== | |||
Для обращения к параметру отчета используйте его имя: | |||
<syntaxhighlight lang="C#"> | |||
[Parameter1] | |||
</syntaxhighlight> | |||
Параметры могут быть вложенными. В этом случае указывается имя родительского параметра и через точку имя дочернего параметра: | |||
<syntaxhighlight lang="C#"> | |||
[ParentParameter.ChildParameter] | |||
</syntaxhighlight> | |||
Параметры, как и поля данных, и системные переменные, имеют определенный тип данных. Он задается в свойстве <code>DataType</code> параметра. От того, какой тип данных имеет параметр, зависит, как его можно использовать в выражении. | |||
Дизайнер преобразует обращение к параметру отчета в следующий вид (на примере строкового параметра): | |||
<syntaxhighlight lang="C#"> | |||
((string)Report.GetParameterValue("Parameter1")) | |||
</syntaxhighlight> | |||
Текущая версия от 01:10, 20 октября 2026
Выражение – это строка кода на языке C#, которая возвращает какое-либо значение.
Так, объект Текст может содержать выражения, обрамленные квадратными скобками.
Пример:
[2 + 2]
Редактор выражений
Редактор выражений - предназначен для удобства написания выражения и может вызываться в тех местах интерфейса дизайнера, где поддерживается ввод выражений.

Редактор выражений представляет собой окно, в котором можно ввести текст выражения и вставить в него элементы из окна Данные:

Обращение к объектам отчета
Пример 1. Высота объекта Text1 (обращение по имени):
Text1.Height
Пример 2. Имя файла, из которого был загружен отчет (использование переменной Report):
Report.FileName
Пример 3. Название отчета (обращение к вложенным свойствам объекта):
Report.ReportInfo.Name
Использование функций .NET
Вы можете использовать любые объекты .NET в выражениях.
Пример: использование функции Max:
Math.Max(5, 10)
Сборки .NET
По умолчанию отчет использует следующие сборки .NET:
System.dll
System.Drawing.dll
System.Windows.Forms.dll
System.Data.dll
System.Xml.dll
Вам доступны все объекты .NET, объявленные в этих сборках.
Если вам нужно получить доступ к другой сборке, добавьте ее название в список сборок отчета.
Это можно сделать в меню Отчет|Свойства…, выбрав в окне элемент Скрипт.

Например, если вы хотите использовать в отчете функцию, объявленную в вашем приложении, добавьте ссылку на сборку приложения (.exe или .dll) в список сборок отчета.
Обращение к функциям
После этого можно обращаться к функции, используя пространство имени (namespace) вашего приложения. Например, если в приложении определена следующая функция:
namespace Demo
{
public static class MyFunctions
{
public static string Func1()
{
return "Hello!";
}
}
}
Обратиться к ней в отчете можно так:
Demo.MyFunctions.Func1()
Если добавить в скрипт директиву using Demo, это позволит укоротить форму обращения к функции:
MyFunctions.Func1()
Для обращения к переменным или функциям, которые были вами определены в скрипте отчета, используйте имя переменной или функции:
myPrivateVariableThatIHaveDeclaredInScript
MyScriptFunction()
Использовать в выражении можно функции, которые возвращают значение.
Обращение к данным отчета
Помимо стандартных языковых элементов, в выражениях можно использовать следующие элементы отчета:
- поля источников данных;
- системные переменные;
- итоговые значения;
- параметры отчета.
Все эти элементы содержатся в окне Данные.
Любой из этих элементов можно использовать в выражении, заключив его в квадратные скобки. Например:
[Page] + 1
Это выражение возвращает номер следующей печатаемой страницы.
В выражении используется системная переменная Page, которая возвращает номер текущей страницы отчета. Она заключена в квадратные скобки.
Обращение к источникам данных
Пример 1. Обращение к полям источников данных:
[Имя источника.Имя поля]
Пример 2. Имя источника отделяется от имени поля точкой, например:
[Employees.FirstName]
Пример 3. Имя источника может быть составным в случае, если мы обращаемся к источнику данных, используя связь (relation).
[Products.Categories.CategoryName]
Пример 4. Операции с полями одинаковых типов данных.
[Employees.FirstName] + " " + [Employees.LastName]
Каждое поле имеет определенный тип данных - он задается в свойстве DataType поля (его можно увидеть в окне "Свойства", если предварительно выбрать поле данных в окне "Данные"). От того, какой тип имеет поле, зависит, каким образом его можно использовать в выражении. Так, в примере выше, оба поля (имя и фамилия) имеют строковый тип и поэтому их допустимо использовать таким образом.
Пример 5. Операции с полями разных типов данных.
В следующем примере мы попробуем использовать поле Employees.Age числового типа, что приведет к ошибке:
[Employees.FirstName] + " " + [Employees.Age]
Ошибка происходит потому, что нельзя напрямую складывать строку и число. Для этого число надо явным образом преобразовать в строку:
[Employees.FirstName] + " " + [Employees.Age].ToString()
В данном случае мы обращаемся с полем Employees.Age так, будто это целочисленная переменная. Так оно и есть. Мы уже знаем, что все выражения компилируются в исполняемый код. Все нестандартные с точки зрения компилятора вещи (вроде обращения к системным переменным и полям данных) конвертируются в другой вид, понятный компилятору. Так, последнее выражение будет преобразовано в следующий вид:
(string)(Report.GetColumnValue("Employees.FirstName")) + " " + (int)(Report.GetColumnValue("Employees.Age")).ToString()
Как видно, дизайнер при компиляции выражений заменяет обращения к полям данных следующим образом:
[Employees.FirstName] --> (string)(Report.GetColumnValue("Employees.FirstName"))
[Employees.Age] --> (int)(Report.GetColumnValue("Employees.Age"))
То есть, мы можем использовать поле БД в выражениях, как будто это переменная, имеющая определенный тип.
Например, следующее выражение вернет первый символ имени сотрудника:
[Employees.FirstName].Substring(0, 1)
Обращение к системным переменным
В выражениях можно использовать следующие системные переменные (они доступны в окне Данные):
| Переменная | Тип данных .NET | Описание |
|---|---|---|
Date
|
DateTime | Дата и время старта отчета. |
Page
|
int | Номер текущей страницы. |
TotalPages
|
int | Общее количество страниц в отчете. Чтобы использовать эту переменную, надо включить двойной проход у отчета. Это можно сделать в меню Отчет/Свойства….
|
PageN
|
string | Номер страницы в виде: Страница N.
|
PageNofM
|
string | Номер страницы в виде: Страница N из M".
|
Row#
|
int | Номер строки данных внутри группы. Это значение сбрасывается при старте новой группы. |
AbsRow#
|
int | Абсолютный номер строки данных. Это значение не сбрасывается при старте новой группы. |
Каждая переменная имеет определенный тип данных, от этого зависит, как ее можно использовать в выражении.
Пример: использование даты:
[Date].Year
Это выражение возвращает текущий год.
Так как переменная Date имеет тип DateTime:
- можно обратиться к ее свойству
Year; - аналогичным образом можно получить текущий месяц (
[Date].Month).
Дизайнер преобразует обращение к системной переменной в следующий вид (на примере переменной Date):
((DateTime)Report.GetVariableValue("Date"))
Обращение к итоговым значениям
Для обращения к итоговому значению используйте его имя:
[TotalSales]
При этом дизайнер преобразует обращение к итогу в следующую форму:
Report.GetTotalValue("TotalSales")
Как видно, здесь тип значения не используется.
Это потому, что итоговое значение имеет тип FastReport.Variant.
Оно может быть напрямую использовано в любых выражениях, потому что тип FastReport.Variant автоматически приводится к любому типу.
Например:
[TotalSales] * 0.2f
Обращение к параметрам отчета
Для обращения к параметру отчета используйте его имя:
[Parameter1]
Параметры могут быть вложенными. В этом случае указывается имя родительского параметра и через точку имя дочернего параметра:
[ParentParameter.ChildParameter]
Параметры, как и поля данных, и системные переменные, имеют определенный тип данных. Он задается в свойстве DataType параметра. От того, какой тип данных имеет параметр, зависит, как его можно использовать в выражении.
Дизайнер преобразует обращение к параметру отчета в следующий вид (на примере строкового параметра):
((string)Report.GetParameterValue("Parameter1"))