Перейти к содержанию

Выражения: различия между версиями

Материал из Химсофт Вики
Нет описания правки
Нет описания правки
 
(не показано 30 промежуточных версий этого же участника)
Строка 3: Строка 3:
Так, объект <code>Текст</code> может содержать выражения, обрамленные квадратными скобками.
Так, объект <code>Текст</code> может содержать выражения, обрамленные квадратными скобками.


'''Пример:'''
'''Пример:'''  
 
<syntaxhighlight lang="js">
<syntaxhighlight lang="js">
[2 + 2]
[2 + 2]
Строка 11: Строка 10:
==Редактор выражений==
==Редактор выражений==


Для удобства написания выражения используйте редактор выражений. Его можно вызывать в тех местах интерфейса FastReport, где поддерживается ввод выражений:
'''Редактор выражений''' - предназначен для удобства написания выражения и может вызываться в тех местах интерфейса дизайнера, где поддерживается ввод выражений.


[[Файл: 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"))