Scripts: различия между версиями
Sidminik (обсуждение | вклад) |
Sidminik (обсуждение | вклад) |
||
| Строка 95: | Строка 95: | ||
#*вызывается событие <code>AfterPrint</code> всех объектов бэнда. | #*вызывается событие <code>AfterPrint</code> всех объектов бэнда. | ||
#Печать строк бэнда происходит до тех пор, пока есть данные в источнике. | #Печать строк бэнда происходит до тех пор, пока есть данные в источнике. | ||
#После этого формирование отчета в нашем случае завершается и вызываются события <code>FinishPage</code> страницы отчета | #После этого формирование отчета в нашем случае завершается и вызываются события <code>FinishPage</code> страницы отчета... | ||
#и наконец – событие <code>FinishReport</code> объекта <code>Отчет</code>. | #...и наконец – событие <code>FinishReport</code> объекта <code>Отчет</code>. | ||
Таким образом, используя события разных объектов, можно контролировать практически каждый момент формирования отчета. Ключ к правильному использованию событий – полное понимание процесса печати бэндов, изложенного выше в одиннадцати пунктах. | Таким образом, используя события разных объектов, можно контролировать практически каждый момент формирования отчета. Ключ к правильному использованию событий – полное понимание процесса печати бэндов, изложенного выше в одиннадцати пунктах. | ||
Версия от 01:49, 20 октября 2026
Вкладка Код – содержит программу на языке высокого уровня, которая является частью отчета.
Программа может быть написана на одном из языков .NET:
C#(предпочтительно);VisualBasic.NET(нежелательно).
Область применения вкладки Код довольно обширна - она позволяет:
- выполнить обработку данных, которую невозможно сделать штатными средствами ядра дизайнера;
- управлять печатью страниц отчета и бэндов на странице;
- управлять взаимодействием элементов управления на диалоговых формах;
- управлять формированием динамических объектов
Таблица; - и многое другое.
Чтобы увидеть код отчета, переключитесь на закладку Код в дизайнере:

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

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

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

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

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