Scripts: различия между версиями
Sidminik (обсуждение | вклад) |
Sidminik (обсуждение | вклад) |
||
| Строка 68: | Строка 68: | ||
==События== | ==События== | ||
Каждый объект отчета имеет несколько '''событий''', которым можно назначить '''обработчик''' – метод из вкладки кода. | |||
Чтобы максимально гибко управлять отчетом, нужно: | |||
*четко представлять, в какой момент времени вызывается каждое из событий; | |||
*использовать те события, которые соответствуют поставленной задаче. | |||
===Пример=== | |||
Рассмотрим процесс формирования отчета и события, которые при этом генерируются. | Рассмотрим процесс формирования отчета и события, которые при этом генерируются. | ||
| Строка 98: | Строка 101: | ||
#...и наконец – событие <code>FinishReport</code> объекта <code>Отчет</code>. | #...и наконец – событие <code>FinishReport</code> объекта <code>Отчет</code>. | ||
Таким образом, используя события разных объектов, можно контролировать практически каждый момент формирования отчета. | ===Выводы=== | ||
*Таким образом, используя события разных объектов, можно контролировать практически каждый момент формирования отчета. | |||
*Так, большинство действий можно выполнить, используя только событие бэнда BeforePrint – любые изменения, внесенные в объект, будут тут же отображены. | |||
*Но в этом событии невозможно анализировать, на какой странице будет напечатан бэнд, если он растягиваемый – ведь подсчет высоты бэнда будет выполнен в пункте 6. | |||
Так, большинство действий можно выполнить, используя только событие бэнда BeforePrint – любые изменения, внесенные в объект, будут тут же отображены. Но в этом событии невозможно анализировать, на какой странице будет напечатан бэнд, если он растягиваемый – ведь подсчет высоты бэнда будет выполнен в пункте 6. Это можно сделать с помощью событий AfterLayout в пункте 7 или AfterPrint в пункте 10, но в последнем случае бэнд уже будет напечатан и действия над объектами ничего не дадут | *Это можно сделать с помощью событий AfterLayout в пункте 7 или AfterPrint в пункте 10, но в последнем случае бэнд уже будет напечатан и действия над объектами ничего не дадут. | ||
==Обращение к объектам .NET== | ==Обращение к объектам .NET== | ||
Версия от 01:57, 20 октября 2026
Вкладка Код – содержит программу на языке высокого уровня, которая является частью отчета.
Программа может быть написана на одном из языков .NET:
C#(предпочтительно);VisualBasic.NET(нежелательно).
Область применения вкладки Код довольно обширна - она позволяет:
- выполнить обработку данных, которую невозможно сделать штатными средствами ядра дизайнера;
- управлять печатью страниц отчета и бэндов на странице;
- управлять взаимодействием элементов управления на диалоговых формах;
- управлять формированием динамических объектов
Таблица; - и многое другое.
Чтобы увидеть код отчета, переключитесь на закладку Код в дизайнере:

Язык для вкладки Код настраивается в меню Отчет|Свойства....
Делать это желательно сразу после создания нового отчета, так как при смене языка существующий код очищается.

Общая информация
Вкладка Код в дизайнере содержит только то, что написано вами.
Во вкладке можно
- добавить в главный класс кода свои переменные, методы, свойства;
- создать обработчики событий объектов отчета;
- добавлять новые классы, если это необходимо (класс может быть добавлен как перед главным классом
ReportScript, так и после него.
Во вкладке нельзя
- удалять, переименовывать или изменять область видимости главного класса
ReportScript; - переименовывать пространство имен, в котором находится главный класс.
Порядок действий дизайнера при запуске отчета
- дизайнер добавляет в код список переменных, имена которых совпадают с именами объектов отчета; это делается перед компиляцией кода и позволяет обращаться к объектам отчета по их имени;
- в код добавляются выражения, имеющиеся в отчете, в виде функций;
- выполняется компиляция кода, если главный класс не пустой;
- инициализируются переменные, которые были неявно добавлены в код;
- обработчики событий, определенные в коде, привязываются к объектам отчета;
- запускается отчет.
Обработчики событий
Создание обработчика события

- выбрать интересующее событие и сделать на нем двойной щелчок мышью - дизайнер добавит в код отчета пустой обработчик события:
private void Text2_BeforePrint(object sender, EventArgs e)
{
}
Удаление обработчика события
- выбрать событие в окне
Свойства; - выделить текст имени события и нажамть клавишу
Delete:

События
Каждый объект отчета имеет несколько событий, которым можно назначить обработчик – метод из вкладки кода.
Чтобы максимально гибко управлять отчетом, нужно:
- четко представлять, в какой момент времени вызывается каждое из событий;
- использовать те события, которые соответствуют поставленной задаче.
Пример
Рассмотрим процесс формирования отчета и события, которые при этом генерируются.
В качестве примера возьмем простой отчет, содержащий одну страницу, один бэнд Данные и два объекта Текст на бэнде:

Порядок событий
- В начале отчета вызывается событие
StartReportобъектаОтчет. - Перед формированием страницы вызывается событие страницы
StartPage. Это событие вызывается один раз для каждой страницы шаблона отчета (не путать со страницами готового отчета!). В нашем случае, сколько бы ни было страниц в готовом отчете – событие вызовется один раз, т.к. шаблон отчета состоит из одной страницы. - Затем вызывается событие
CreatePage, которое происходит как раз в тот момент, когда страница создается в подготовленном отчете. - Далее начинается печать строк бэнда
Данные. Происходит это следующим образом:- 4.1 вызывается событие бэнда
BeforePrint; - 4.2 вызываются события
BeforePrintвсех объектов, лежащих на бэнде; - 4.3 все объекты заполняются данными;
- 4.4 вызываются события
AfterDataвсех объектов, лежащих на бэнде; - 4.5 вызывается событие бэнда
BeforeLayout; - 4.6 происходит размещение объектов на бэнде (если среди них есть растягиваемые объекты) и подсчет высоты бэнда и его растягивание (если бэнд растягиваемый);
- 4.7 вызывается событие бэнда
AfterLayout; - 4.8 если бэнд не помещается на свободном месте страницы, формируется новая страница;
- 4.9 бэнд и все его объекты выводятся на страницу готового отчета;
- 4.10 вызывается событие
AfterPrintбэнда; - 4.11 вызывается событие
AfterPrintвсех объектов бэнда.
- 4.1 вызывается событие бэнда
- Печать строк бэнда происходит до тех пор, пока есть данные в источнике.
- После этого формирование отчета в нашем случае завершается и вызываются события
FinishPageстраницы отчета... - ...и наконец – событие
FinishReportобъектаОтчет.
Выводы
- Таким образом, используя события разных объектов, можно контролировать практически каждый момент формирования отчета.
- Так, большинство действий можно выполнить, используя только событие бэнда BeforePrint – любые изменения, внесенные в объект, будут тут же отображены.
- Но в этом событии невозможно анализировать, на какой странице будет напечатан бэнд, если он растягиваемый – ведь подсчет высоты бэнда будет выполнен в пункте 6.
- Это можно сделать с помощью событий AfterLayout в пункте 7 или AfterPrint в пункте 10, но в последнем случае бэнд уже будет напечатан и действия над объектами ничего не дадут.