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

Объекты Report и Engine: различия между версиями

Материал из Химсофт Вики
 
(не показано 13 промежуточных версий этого же участника)
Строка 57: Строка 57:
|-
|-
|'''<code>float CurX</code><br/>'''
|'''<code>float CurX</code><br/>'''
|
|Текущее смещение координат по оси <code>X</code>.
Этому свойству можно присваивать значение, чтобы смещать печатаемые объекты.
|-
|-
|'''<code>float CurY</code><br/>'''
|'''<code>float CurY</code><br/>'''
|
|Текущая позиция печати по оси <code>Y</code>.
Этому свойству можно присваивать значение, чтобы смещать печатаемые объекты.
|-
|-
|'''<code>int CurColumn</code><br/>'''
|'''<code>int CurColumn</code><br/>'''
|
|Номер текущей колонки в многоколоночном отчете.
Первая колонка имеет номер <code>0</code>.
|-
|-
|'''<code>int CurPage</code><br/>'''
|'''<code>int CurPage</code><br/>'''
|
|Номер текущей печатаемой страницы.
Это значение можно получить из системной переменной <code>Page</code>.
|-
|-
|'''<code>float PageWidth</code><br/>'''
|'''<code>float PageWidth</code><br/>'''
|
|Ширина страницы минус размер левого и правого полей.
|-
|-
|'''<code>float PageHeight</code><br/>'''
|'''<code>float PageHeight</code><br/>'''
|
|Высота страницы минус размер верхнего и нижнего полей.
|-
|-
|'''<code>float PageFooterHeight</code><br/>'''
|'''<code>float PageFooterHeight</code><br/>'''
|
|Высота подвала страницы (и всех его дочерних бэндов).
|-
|-
|'''<code>float ColumnFooterHeight</code><br/>'''
|'''<code>float ColumnFooterHeight</code><br/>'''
|
|Высота подвала колонки (и всех ее дочерних бэндов).
|-
|-
|'''<code>float FreeSpace</code><br/>'''
|'''<code>float FreeSpace</code><br/>'''
|
|Размер свободного места на странице.
|-
|-
|'''<code>bool FirstPass</code><br/>'''
|'''<code>bool FirstPass</code><br/>'''
|
|Возвращает <code>true</code>, если выполняется первый (или единственный) проход отчета.
Количество проходов можно получить из свойства <code>Report.DoublePass</code>.
|-
|-
|'''<code>bool FinalPass</code><br/>'''
|'''<code>bool FinalPass</code><br/>'''
|
|Возвращает <code>true</code>, если выполняется последний (или единственный) проход отчета.
|-
|-
|}
|}
На рисунке ниже представлено изображение страницы отчета и название свойств, которые возвращают то или иное измерение страницы.
[[Файл: engine_obj_1.png | center | border]]
*Свойства <code>Engine.PageWidth</code> и <code>Engine.PageHeight</code> определяют размер области печати, которая почти всегда меньше физических размеров страницы.
*Размер области печати определяют поля страницы, которые задаются свойствами страницы отчета <code>LeftMargin</code>, <code>TopMargin</code>, <code>RightMargin</code>, <code>BottomMargin</code>.
*Свойство <code>Engine.FreeSpace</code> определяет высоту свободного места на странице. Если на странице есть бэнд <code>Подвал страницы</code> его высота учитывается при вычислении <code>FreeSpace</code>. Следует учесть, что после вывода очередного бэнда свободное место на странице уменьшается, что учитывается при вычислении <code>FreeSpace</code>.
===Формирование страниц готового отчета===
*Ядро дизайнера выводит бэнды на страницу до тех пор, пока на ней остается свободное место, достаточное для вывода бэнда.
*Когда свободного места не остается, печатается бэнд <code>Подвал страницы</code> (если он есть) и формируется новая пустая страница.
*После вывода очередного бэнда высота свободного места уменьшается.
*Вывод очередного бэнда начинается с текущей позиции, которая определяется координатами по оси <code>X</code> и <code>Y</code>. Эта позиция возвращается в свойствах <code>Engine.CurX</code>, <code>Engine.CurY</code>. После печати очередного бэнда позиция <code>CurY</code> автоматически увеличивается на высоту напечатанного бэнда. После формирования новой страницы позиция <code>CurY = 0</code>. Позиция <code>CurX</code> изменяется при печати многоколоночных отчетов.
<div style="background-color: #e7f3ff; border-left: 5px solid #2196f3; padding: 15px; margin: 10px 0;">
'''Примечания:'''
#Свойства <code>Engine.CurX</code> и <code>Engine.CurY</code> доступны не только для чтения, но и для записи (то есть можно смещать бэнды вручную, используя одно из подходящих событий).
#При работе со свойствами, которые возвращают размер, нужно учесть, что в дизайнере используются единицы измерения - ''экранные пиксели''.
</div>
===Список методов===
{|class="wikitable" style="margin:auto; background-color: #fff;"
|-
!Метод
!Описание
|-
|'''<code>void AddOutline(string text)</code>'''
|Добавляет элемент в структуру отчета и смещает текущую позицию на добавленный элемент.
|-
|'''<code>void OutlineRoot()</code>'''
|Смещает текущую позицию на корень структуры.
|-
|'''<code>void OutlineUp()</code>'''
|Смещает текущую позицию на уровень выше.
|-
|'''<code>void AddBookmark(string name)</code>'''
|Добавляет закладку.
|-
|'''<code>int GetBookmarkPage(string name)</code>'''
|Возвращает номер страницы, на которой расположена закладка с указанным именем.
|-
|'''<code>void StartNewPage()</code>'''
|Добавляет в отчет разрыв страницы.
Если отчет многоколоночный, добавляется новая колонка.
|-
|}
===Применение методов===
Используя методы <code>AddOutline</code>, <code>OutlineRoot</code> и <code>OutlineUp</code>, можно формировать структуру отчета программным способом. Обычно это делается автоматически с помощью свойства <code>OutlineExpression</code>, которое имеется у каждого бэнда и у страницы отчета.
Метод <code>AddOutline</code> добавляет к текущему узлу структуры дочерний узел и делает его текущим. С элементом ассоциируется текущая страница отчета и текущая позиция на странице. Таким образом, если несколько раз подряд вызвать <code>AddOutline</code>, то получится "лесенка" типа
<syntaxhighlight lang="C#">
Item1
    Item2
        Item3
</syntaxhighlight>
Для управления текущим элементом служат методы <code>OutlineUp</code> и <code>OutlineRoot</code>. Первый метод перемещает указатель на элемент, расположенный уровнем выше. Так, скрипт
<syntaxhighlight lang="C#">
Engine.AddOutline("Item1");
Engine.AddOutline("Item2");
Engine.AddOutline("Item3");
Engine.OutlineUp();
Engine.AddOutline("Item4");
</syntaxhighlight>
построит структуру вида
<syntaxhighlight lang="C#">
Item1
    Item2
        Item3
        Item4
</syntaxhighlight>
Метод <code>OutlineRoot</code> передвигает текущий элемент в корень структуры. Например, скрипт:
<syntaxhighlight lang="C#">
Engine.AddOutline("Item1");
Engine.AddOutline("Item2");
Engine.AddOutline("Item3");
Engine.OutlineRoot();
Engine.AddOutline("Item4");
</syntaxhighlight>
построит структуру следующего вида:
<syntaxhighlight lang="C#">
Item1
    Item2
        Item3
Item4
</syntaxhighlight>
Для работы с закладками используются методы <code>AddBookmark</code> и <code>GetBookmarkPage</code> объекта <code>Engine</code>. Обычно закладки добавляются автоматически при использовании свойства <code>Bookmark</code>, которое имеется у всех объектов отчета.
Используя метод <code>AddBookmark</code>, можно добавлять закладку программно. Этот метод создаст закладку на текущей странице, в текущей позиции печати.
Метод <code>GetBookmarkPage</code> возвращает номер страницы, на которой расположена закладка. Этот метод часто применяется при создании оглавлений, для отображении номеров страниц. В этом случае отчет должен быть двухпроходным.

Текущая версия от 03:53, 20 октября 2026

Кроме объектов, которые содержатся в отчете, в скрипте определены две переменные: Report и Engine.

Report

Переменная Report возвращает ссылку на текущий отчет.

Список методов

Метод Описание
object Calc(string expression) Вычисляет выражение и возвращает значение.

При вызове этого метода первый раз выражение компилируется, что требует некоторого времени.

object GetColumnValue(string complexName) Возвращает значение поля источника данных. Имя должно быть представлено в форме Источник.Поле.

Если поле имеет значение null, оно преобразуется в значение по умолчанию (0, пустая строка, false и др).

object GetColumnValueNullable(string complexName) Возвращает значение поля источника данных.

В отличие от предыдущего метода, не выполняет преобразование null-значений.

Parameter GetParameter(string complexName) Возвращает параметр отчета с указанным именем.

Имя может быть составным при обращении к вложенному параметру: MainParam.NestedParam.

object GetParameterValue(string complexName) Возвращает значение параметра отчета с указанным именем.
void SetParameterValue(string complexName, object value) Устанавливает значение параметра отчета с указанным именем.
object GetVariableValue(string complexName) Возвращает значение системной переменной, например, Date.
object GetTotalValue(string name) Возвращает значение итога, определенного в окне Данные, по его имени.
DataSourceBase GetDataSource(string alias) Возвращает источник данных, определенный в отчете, по его имени.

Engine

Объект Engine представляет собой движок, управляющий построением отчета (процессом размещения бэндов на странице).

Свойства объекта

Свойство Описание
float CurX
Текущее смещение координат по оси X.

Этому свойству можно присваивать значение, чтобы смещать печатаемые объекты.

float CurY
Текущая позиция печати по оси Y.

Этому свойству можно присваивать значение, чтобы смещать печатаемые объекты.

int CurColumn
Номер текущей колонки в многоколоночном отчете.

Первая колонка имеет номер 0.

int CurPage
Номер текущей печатаемой страницы.

Это значение можно получить из системной переменной Page.

float PageWidth
Ширина страницы минус размер левого и правого полей.
float PageHeight
Высота страницы минус размер верхнего и нижнего полей.
float PageFooterHeight
Высота подвала страницы (и всех его дочерних бэндов).
float ColumnFooterHeight
Высота подвала колонки (и всех ее дочерних бэндов).
float FreeSpace
Размер свободного места на странице.
bool FirstPass
Возвращает true, если выполняется первый (или единственный) проход отчета.

Количество проходов можно получить из свойства Report.DoublePass.

bool FinalPass
Возвращает true, если выполняется последний (или единственный) проход отчета.

На рисунке ниже представлено изображение страницы отчета и название свойств, которые возвращают то или иное измерение страницы.

  • Свойства Engine.PageWidth и Engine.PageHeight определяют размер области печати, которая почти всегда меньше физических размеров страницы.
  • Размер области печати определяют поля страницы, которые задаются свойствами страницы отчета LeftMargin, TopMargin, RightMargin, BottomMargin.
  • Свойство Engine.FreeSpace определяет высоту свободного места на странице. Если на странице есть бэнд Подвал страницы его высота учитывается при вычислении FreeSpace. Следует учесть, что после вывода очередного бэнда свободное место на странице уменьшается, что учитывается при вычислении FreeSpace.

Формирование страниц готового отчета

  • Ядро дизайнера выводит бэнды на страницу до тех пор, пока на ней остается свободное место, достаточное для вывода бэнда.
  • Когда свободного места не остается, печатается бэнд Подвал страницы (если он есть) и формируется новая пустая страница.
  • После вывода очередного бэнда высота свободного места уменьшается.
  • Вывод очередного бэнда начинается с текущей позиции, которая определяется координатами по оси X и Y. Эта позиция возвращается в свойствах Engine.CurX, Engine.CurY. После печати очередного бэнда позиция CurY автоматически увеличивается на высоту напечатанного бэнда. После формирования новой страницы позиция CurY = 0. Позиция CurX изменяется при печати многоколоночных отчетов.

Примечания:

  1. Свойства Engine.CurX и Engine.CurY доступны не только для чтения, но и для записи (то есть можно смещать бэнды вручную, используя одно из подходящих событий).
  2. При работе со свойствами, которые возвращают размер, нужно учесть, что в дизайнере используются единицы измерения - экранные пиксели.

Список методов

Метод Описание
void AddOutline(string text) Добавляет элемент в структуру отчета и смещает текущую позицию на добавленный элемент.
void OutlineRoot() Смещает текущую позицию на корень структуры.
void OutlineUp() Смещает текущую позицию на уровень выше.
void AddBookmark(string name) Добавляет закладку.
int GetBookmarkPage(string name) Возвращает номер страницы, на которой расположена закладка с указанным именем.
void StartNewPage() Добавляет в отчет разрыв страницы.

Если отчет многоколоночный, добавляется новая колонка.

Применение методов

Используя методы AddOutline, OutlineRoot и OutlineUp, можно формировать структуру отчета программным способом. Обычно это делается автоматически с помощью свойства OutlineExpression, которое имеется у каждого бэнда и у страницы отчета.

Метод AddOutline добавляет к текущему узлу структуры дочерний узел и делает его текущим. С элементом ассоциируется текущая страница отчета и текущая позиция на странице. Таким образом, если несколько раз подряд вызвать AddOutline, то получится "лесенка" типа

Item1
    Item2
        Item3

Для управления текущим элементом служат методы OutlineUp и OutlineRoot. Первый метод перемещает указатель на элемент, расположенный уровнем выше. Так, скрипт

Engine.AddOutline("Item1");
Engine.AddOutline("Item2");
Engine.AddOutline("Item3");
Engine.OutlineUp();
Engine.AddOutline("Item4");

построит структуру вида

Item1
    Item2
        Item3
        Item4

Метод OutlineRoot передвигает текущий элемент в корень структуры. Например, скрипт:

Engine.AddOutline("Item1");
Engine.AddOutline("Item2");
Engine.AddOutline("Item3");
Engine.OutlineRoot();
Engine.AddOutline("Item4");

построит структуру следующего вида:

Item1
    Item2
        Item3
Item4

Для работы с закладками используются методы AddBookmark и GetBookmarkPage объекта Engine. Обычно закладки добавляются автоматически при использовании свойства Bookmark, которое имеется у всех объектов отчета.

Используя метод AddBookmark, можно добавлять закладку программно. Этот метод создаст закладку на текущей странице, в текущей позиции печати.

Метод GetBookmarkPage возвращает номер страницы, на которой расположена закладка. Этот метод часто применяется при создании оглавлений, для отображении номеров страниц. В этом случае отчет должен быть двухпроходным.