Скриптове в - FastReport

Обща информация

За разлика от други генератори на отчети, скриптът вFastReport съдържа само това, което сте написали. В скрипт можете:

  • добавете вашите променливи, методи, свойства към главния клас на скрипта;
  • създаване на манипулатори на събития за обекти на отчет;

  • добавете нови класове към скрипта, ако е необходимо. Класът може да се добави преди или след основния класReportScript.
  • изтриване, преименуване или промяна на обхвата на основния класReportScript ;
  • преименувайте пространството от имена, в което се намира главният клас.
  • FastReport добавя към скрипта списък от променливи, чиито имена съвпадат с имената на обектите на отчета. Това се прави преди скриптът да бъде компилиран и ви позволява да се обръщате към обектите на отчета по техните имена;

При стартиране на отчета се случва следното:

  • наличните в отчета изрази се добавят към скрипта под формата на функции;
  • скриптът се компилира, ако не е празен;
  • променливите, които са имплицитно добавени към скрипта, се инициализират;
  • манипулаторите на събития, дефинирани в скрипта, са обвързани с обекти на доклад;
  • отчетът започва.

Манипулатори на събития

Скриптът се използва предимно за създаване на манипулатори на обектни събития. За да създадете манипулатор на събитие, изберете желания обект. В прозорецаСвойства щракнете върху бутона, за да превключите към списъка със събития:

скриптове

Изберете събитието, което ви интересува, и щракнете двукратно върху него.FastReport ще добави празен манипулатор на събитие към кода на отчета:

ОбектътОтчет също има събития. Можете да изберете този обект по следните начини:

  • изберетеОтчет в прозорецаДърво на отчети ;
  • изберетеОтчет от падащия списък с обекти в прозорецаСвойства.

За да изтриете манипулатор на събитие, изберете събитието в прозорецаProperties, маркирайте текста на името на събитието и натиснете клавишаDelete :

скриптове

Събития

За да управлявате отчета възможно най-гъвкаво, всеки обект на отчета има няколко събития, на които може да бъде назначен манипулатор - метод от скрипта. Например в манипулатора, прикрепен към лентатаДанни, можете да филтрирате записи, т.е. скриване или показване на лентата в зависимост от всякакви условия.

Нека разгледаме процеса на генериране на отчет и събитията, които се генерират. Като пример, нека вземем прост отчет, съдържащ една страница, една лента -Данни - и два обектаТекст в лентата:

В началото на отчета се извиква събитиетоStartReport на обектаReport. Преди страницата да бъде генерирана, се извиква събитието на страницатаStartPage. Това събитие се извиква веднъж за всяка страница от шаблона на отчета (да не се бърка със страниците на готовия отчет!). В нашия случай, без значение колко страници има в готовия отчет, събитието ще бъде извикано веднъж, т.к. Шаблонът за отчет се състои от една страница.

След това започва отпечатването на редовете от лентатаData. Това се случва така:

  1. Извиква се събитиетоBeforePrint.
  2. Извикват се събитияBeforePrint на всички обекти, разположени върху лентата.
  3. Всички обекти се попълват с данни.
  4. Извикват се събитияAfterData на всички обекти, разположени на лентата.
  5. Обектите се поставят върху лентата (ако сред тях има разтегливи обекти) и височината на лентата се изчислява и разтяга (ако лентата е разтеглива).
  6. НареченСъбитие на групатаBeforeLayout.
  7. Извиква се събитието лентаAfterLayout.
  8. Ако лентата не се побира на свободното място на страницата, се оформя нова страница.
  9. Лентата и всички нейни обекти се показват на страницата на готовия отчет.
  10. Извиква се събитиетоAfterPrint на всички лентови обекти.
  11. Извиква се събитиетоAfterPrint на лентата.

Лентовите линии се отпечатват, докато има данни в източника. След това генерирането на отчет в нашия случай завършва и се извикват събитиятаFinishPage на страницата с отчета и накрая събитиетоFinishReport на обектаReport.

По този начин, използвайки събитията на различни обекти, можете да контролирате почти всеки момент от генерирането на отчет. Ключът към правилното използване на събитията е да разберете напълно процеса на отпечатване на лентата, описан в единадесетте точки по-горе. Така че повечето действия могат да бъдат извършени само с помощта на събитиетоBeforePrint : всички промени, направени в обекта, ще бъдат незабавно показани. Но в това събитие е невъзможно да се анализира на коя страница ще бъде отпечатана лентата, ако е разтеглива - в края на краищата височината на лентата ще бъде изчислена в стъпка 6. Това може да стане с помощта на събитиятаAfterLayout в стъпка 7 илиAfterPrint в стъпка 10, но в последния случай лентата вече ще бъде отпечатана и действията върху обектите няма да дадат нищо. Накратко, трябва ясно да разберете в кой момент от време се извиква всяко от събитията и да използвате тези, които съответстват на задачата.

Препратка към .Net обекти

От скрипта можете да получите достъп до всички .Net обекти, които са дефинирани в следните сборки:

Освен това можете да използвате всякакви обекти, дефинирани в сборкитеFastReport. Ако се нуждаешза достъп до друга сглобка, добавете името й към списъка с сглобки на отчети. Това може да стане в менютоReportProperties…, като изберете елементаScript в прозореца.

fastreport

Например, ако искате да скриптирате функция, декларирана във вашето приложение, добавете препратка към сборката на приложението (.exe или .dll) към списъка с модули на отчета. След това можете да извикате функцията, като използвате пространството от имена на вашето приложение. Например, приложението дефинира следната функция:

Можете да получите достъп до него в скрипт като този:

Ако добавите директиватаusing Demo към скрипта, това ще съкрати формата на извикването на функцията:

Позоваване на обекти на отчет

За да се обърнете към обекти на отчет (например обектТекст ), използвайте името на обекта. Следният пример ще върне височината на обектаText1 :

Обърнете внимание, че естествените мерни единици на отчета са екранни пиксели. Трябва да имате това предвид, когато осъществявате достъп до свойства на обекти катоLeft,Top,Width,Height. За да конвертирате пиксели в сантиметри и обратно, използвайте константите, дефинирани в класаUnits :

Препратка към източници на данни

За разлика от изразитеFastReport (обсъдени в главата Изрази), не можете да използвате квадратни скоби в скрипт, за да препращате към данните от отчета. Вместо това се използва методътGetColumnValue на обектаReport, който връща стойността на полето:

За да улесните работата си, използвайте прозорецаДанни. Можете да плъзгате елементи от данни от него в скрипта, докатоFastReport автоматично генерира кода за достъп до елемента.

За достъп до самия източник на данни използвайте методаGetDataSource на обектаReport :

Помощ за имотии методите на класаDataSourceBase могат да бъдат получени отFastReport.Net Class Reference. Обикновено този обект се използва в скрипт като този:

Достъп до системни променливи

За достъп до системна променлива използвайте методаGetVariableValue на обектаReport :

Списъкът със системните променливи може да се види в прозорецаДанни. Променливите могат да се влачат от него към скрипта, докатоFastReport автоматично генерира код за достъп до променливата.

Позоваване на общи суми

За достъп до общата стойност използвайте методаGetTotalValue на обектаReport :

Списъкът с общите суми може да се види в прозорецаДанни. Можете да плъзгате и пускате общи суми от него в скрипта иFastReport автоматично генерира кода, който да препраща към общата сума.

Получената стойност е от типFastReport.Variant. Може да се използва директно във всеки израз, защото типътFastReport.Variant автоматично се преобразува към всеки тип. Например:

Можете да се обърнете към общата стойност в момента, в който се изчислява. Обикновено сумата е "готова за използване" в момента на отпечатване на лентата, на която се намира в отчета.

Позоваване на параметрите на отчета

За достъп до параметър на отчета използвайте методаGetParameterValue на обектаReport :

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

Параметрите имат специфичен тип данни. Задава се в свойствотоDataType на параметъра. Трябва да вземете това предвид при достъп до параметъра. Списъкът с параметри може да се види в прозорецаДанни. От него можете да плъзгате параметри в скрипта, докатоFastReport автоматично генерира код за достъп до параметъра.

За да промените стойността на параметъра, използвайте методаSetParameterValue на обектаReport :

Пример 1. Промяна на външния вид на обект

В този пример ще покажем как да промените цвета на текста на обект в зависимост от стойността, която е отпечатана в обекта. Ще използваме:

  • BeforePrint събитие;
  • Достъп до поле на база данни от скрипт.

Създайте прост отчет като този:

За обекта, който отпечатва цената на продукта, създайте манипулатор на събитиеBeforePrint :

За да вмъкнете стойността на полетоProducts.UnitPrice в скрипта, плъзнете я от прозорецаData. В този случай редът ще бъде вмъкнат в скрипта:

Ако изпълним отчета, можем да видим, че всички продукти с цена > 20, подчертано в червено:

скриптове

Пример 2. Изчисляване на общи суми

В този пример ще покажем как програмно да изчислим общата стойност. Ще използваме:

  • събитиеBeforePrint на групата;
  • достъп до полето на базата данни от скрипта;
  • локална променлива, чиято стойност ще бъде отпечатана в отчета.

Създайте отчет като този:

В скрипта декларирайте променливатаsumma и създайте манипулатор на събитиеBeforePrint за групата: