Referința câmpurilor bazei de date
Evenimente
Până acum am analizat scripturi cu doar o procedură principală, care este executată atunci când un raport începe să ruleze. În procedura principală pot fi făcute setări inițiale și variabile inițializate. Cu toate acestea, acest lucru nu este suficient pentru un control total asupra procesului de generare a raportului. Pentru a permite cât mai mult control posibil asupra generării raportului, fiecare obiect are mai multe evenimente la care pot fi atribuite handler-e (adică proceduri în script). De exemplu, conectarea unui handler la banda de date permite filtrarea înregistrărilor, astfel încât banda poate fi ascunsă sau dezvăluită în funcție de îndeplinirea unor condiții specifice.
Haideți să demonstrăm procesul de creare a raportului și evenimentele declanșate printr-un raport simplu care conține o pagină și are o bandă “MasterData”, cu două obiecte “Text” pe bandă:

Așa cum s-a descris mai sus, procedura principală a scriptului este apelată chiar la începutul rularii raportului. După aceea, încep esențele construcției raportului. În primul rând, evenimentul “OnStartReport” al obiectului "Report" este apelat. Apoi, înainte de a fi creată o pagină de ieșire, evenimentul “OnBeforePrint” al paginii este apelat. Acest eveniment este apelat o dată pentru fiecare pagină de design din șablonul raportului (pagini de design nu trebuie confundate cu paginile de ieșire ale unui raport!). În exemplul nostru, evenimentul este apelat o dată, deoarece designul raportului constă dintr-o singură pagină de design.
Apoi, evenimentele benzilor de date sunt apelate în următoarea ordine:
1. evenimentul “OnBeforePrint” al benzii este apelat
2. evenimentul “OnBeforePrint” al fiecărui obiect conținut în bandă este apelat
3. fiecare obiect este umplut cu date (în exemplul nostru cu valorile câmpurilor DB “Company” și “Addr1”)
4. evenimentul “OnAfterData” al fiecărui obiect este apelat
5. acțiuni precum poziționarea obiectelor pe bandă (dacă există obiecte extensibile printre ele), calcularea înălțimii benzii și întinderea acesteia (dacă este extensibilă) sunt efectuate
6. evenimentul “OnAfterCalcHeight” al benzii este apelat
7. o nouă pagină de ieșire este creată dacă banda nu are suficient spațiu în alb al paginii
8. banda și toate obiectele sale sunt afișate pe pagina de ieșire
9. evenimentul “OnAfterPrint” al fiecărui obiect din bandă este apelat
10. evenimentul “OnAfterPrint” al benzii în sine este apelat
Benzile continuă să fie tipărite atâta timp cât sursa conectată la bandă are date. După aceea, tipărirea raportului se oprește, evenimentul “OnAfterPrint” al paginii raportului este apelat și, în final, evenimentul “OnStopReport” al obiectului “Report”.
Așadar, folosind evenimentele diferitelor obiecte, practic fiecare pas al procesului de creare a raportului poate fi gestionat. Cheia utilizării evenimentelor este o înțelegere temeinică a procesului de ieșire a benzii, care este discutată în secțiunile următoare. Cele mai multe dintre acțiuni pot fi efectuate folosind doar evenimentul “OnBeforePrint” al benzii; orice modificări aduse unui obiect sunt afișate imediat. Cu toate acestea, dacă banda este extensibilă, este imposibil să se spună în acest eveniment pe ce pagină va fi tipărită banda, deoarece calculul înălțimii benzii este efectuat în pasul 5. Acest lucru poate fi realizat, totuși, fie în evenimentul “OnAfterCalcHeight” din pasul 6, fie în evenimentul “OnAfterPrint” din pasul 9. Rețineți că în ultimul eveniment banda va fi deja fost ieșită, astfel încât modificările aduse obiectelor nu vor avea niciun efect vizibil.
Este esențial să înțelegem clar “unde și când” benzile sunt ieșite și să înțelegem cronologia (ordinea apelurilor) fiecărui dintre evenimentele lor. La fel și pentru fiecare dintre obiectele conținute în benzi.