Scripts: различия между версиями
Sidminik (обсуждение | вклад) |
Sidminik (обсуждение | вклад) |
||
| Строка 105: | Строка 105: | ||
*большинство действий можно выполнить, используя только событие бэнда <code>BeforePrint</code> – любые изменения, внесенные в объект, будут тут же отображены; | *большинство действий можно выполнить, используя только событие бэнда <code>BeforePrint</code> – любые изменения, внесенные в объект, будут тут же отображены; | ||
*в событии <code>BeforePrint</code> невозможно анализировать, на какой странице будет напечатан бэнд, если он растягиваемый – ведь подсчет высоты бэнда будет выполнен в пункте <code>4.6</code>; | *в событии <code>BeforePrint</code> невозможно анализировать, на какой странице будет напечатан бэнд, если он растягиваемый – ведь подсчет высоты бэнда будет выполнен в пункте <code>4.6</code>; | ||
* | *определить номер страницы для растягиваемого бэнда можно с помощью следующих событий | ||
::*<code>AfterLayout</code> в пункте <code>4.7</code>; | ::*<code>AfterLayout</code> в пункте <code>4.7</code>; | ||
::*<code>AfterPrint</code> в пункте <code>4.10</code> (правда, в этом случае бэнд уже будет напечатан и действия над объектами ничего не дадут). | ::*<code>AfterPrint</code> в пункте <code>4.10</code> (правда, в этом случае бэнд уже будет напечатан и действия над объектами ничего не дадут). | ||
Версия от 02:04, 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– любые изменения, внесенные в объект, будут тут же отображены; - в событии
BeforePrintневозможно анализировать, на какой странице будет напечатан бэнд, если он растягиваемый – ведь подсчет высоты бэнда будет выполнен в пункте4.6; - определить номер страницы для растягиваемого бэнда можно с помощью следующих событий
AfterLayoutв пункте4.7;AfterPrintв пункте4.10(правда, в этом случае бэнд уже будет напечатан и действия над объектами ничего не дадут).