Primer - pas cu înălțime variabilă
Pentru exemplele din acest subiect, creați un duplicat al raportului '241 - Factură' care se află în meniul programului 'Bunuri| Emitere| Document | Document (de exemplu, 300 - Vânzare)'. Veți lucra pe acest raport.
Bandă cu înălțime extensibilă
Să analizăm exemplul proprietăților obiectului "Text" "SerialNo" (Număr de serie) și banda "bSerialNo".
Așa cum puteți vedea în inspectorul de obiecte, următoarele valori ale proprietăților sunt setate:
Pentru obiectul "Text" "SerialNo":
- "AutoWidth" (permite obiectului să ajusteze lățimea în funcție de lungimea textului) la 'False'
- "StretchMode" (cum ajustează obiectul înălțimea în funcție de lungimea textului) la 'smActualHeight'
- "WordWrap" (permite textului să treacă pe o linie nouă) la 'True.'
Pentru banda "bSerialNo":
- Stretched (dacă înălțimea benzii ar trebui ajustată la înălțimea obiectelor din ea) la 'True'
De asemenea, are atribuit evenimentul "OnBeforePrint" cu următorul script:
procedură bSerialNoOnBeforePrint(Sender: TfrxComponent);
begin
CallQRBeforeBandPrint(Sender, TfrxBand(sender).visible);
end;
Procedura CallQRBeforeBandPrint apelează codul din program care, în acest caz, afișează numerele de serie aparținând poziției din factură. Dacă nu există număr de serie, îl ascunde.
Ascunderea Objectelor
Să analizăm un exemplu de ascundere a unui obiect. Marcați obiectul "Imaginea companiei noastre" și debifați proprietatea "Visible" din meniul contextual.
Salvați modificările și vizualizați previzualizarea. Veți observa că obiectul nu apare în previzualizare - spațiul rezervat pentru obiect este păstrat.

 |
Nu schimbați numele obiectelor din astfel de rapoarte, deoarece codul programului poate afecta valoarea afișată în raport și unele date importante nu vor fi afișate. Dacă nu aveți nevoie de ele, doar ascundeți-le. |
 |
Unele obiecte sunt prescrise de legi și acte normative și nu trebuie șterse în legislația în care sunt necesare. |
Ștergerea obiectului "Text" referit de cod
Să analizăm un exemplu de ștergere a unui obiect care este referit de cod (dar nu știm acest lucru încă). Ștergeți linia groasă de sub textul "Factură". După cum se va dovedi în pasul următor, aceasta se numește "mTitle2". Închideți designerul și salvați modificările. Închideți și previzualizarea raportului. Apoi rulați raportul. Va apărea următorul mesaj de eroare:

Închideți fereastra de mesaj și deschideți designerul. Rulați raportul din designer. Veți obține următoarea imagine:

Deschideți editorul de cod și "comentați" linia
mTitle2.Width := mTitle1.CalcWidth + fKljuc.CalcWidth - 8;
Adăugăm '//' la începutul acestei rânduri astfel încât să devină
// mTitle2.Width := mTitle1.CalcWidth + fKljuc.CalcWidth - 8;
Cealaltă posibilitate în acest caz este doar să ascundeți obiectul. Acesta va exista în continuare în raport, dar nu va fi afișat.
 |
-
Dacă mutăm un obiect pe un astfel de raport într-o altă bandă, trebuie să mutăm și codul corespunzător acolo. În caz contrar, raportul poate să nu funcționeze corect.
-
Când deschidem designul raportului din fereastra de previzualizare a raportului și rulăm raportul din designer, rezultatele pot fi incorecte.
|
Ascunderea benzilor
Putem ascunde banda scriind o linie de script. Pentru a ascunde banda "bTehPostopek", scriem o linie de script marcată cu fontul îngroșat. Trebuie să o scriem ca ultima instrucțiune înainte de end; într-o procedură cu același nume. Cuvintele italicizate trebuie să se potrivească.
procedură bTehPostopekOnBeforePrint(Sender: TfrxComponent);
begin
CallQRBeforeBandPrint(Sender, TfrxBand(sender).visible);
// bTehPostopek.visible := VarToStr(<tbIzpisPrometPoz."MSTEMPTEHPOSTOPEK">) = 'T';
bTehPostopek.visible := False; // linia anterioară este înlocuită cu aceasta
end;
Ștergerea benzii referite de cod
Să vedem cum să ștergem banda "DetailFooter2", pe care este afișată nota documentului. Operațiunea este puțin complicată. Înainte de a începe, creați o copie de rezervă a raportului și scrieți ordinea benzilor din raport. Este o practică bună să creați o captură de ecran a designului raportului. În cazul nostru, banda anterioară este "DetailFooter" și următoarea este "bIzjavaTekst". Ștergeți banda "DetailFooter2".
 |
Dacă nu ștergem banda, ci doar codul pentru vizibilitate atribuit acestei benzi în evenimentul "OnBeforePrint", apare spațiu gol în locul notei documentului.
|
Când rulăm raportul din designer, apare o eroare similară ca în cele două cazuri anterioare. După ștergerea scriptului:
DetailFooter2.visible := VarToStr(<qReportIzpisD."acNote">) <> '';
raportul se va deschide, dar datele de după nu vor fi afișate.
.
Pentru a afișa din nou datele, doar faceți clic pe banda "bNacinPlacI" și deschideți inspectorul de obiecte. Setați numele benzii care era anterior după banda pe care tocmai am șters-o ca proprietate "Child". În cazul nostru, este "bIzjavaTekst". Raportul va afișa din nou datele la sfârșitul raportului, ca înainte.

Obiecte ajustate
Datorită alinierii mai precise și proiectării mai rapide, marea majoritate a obiectelor din rapoartele sistemului sunt ajustate fie la marginea benzii, fie la alte obiecte.
Proprietatea care specifică acest comportament al obiectelor din cadrul benzii este "Align".
Accesăm această proprietate doar în inspectorul de obiecte, care poate fi afișat sau ascuns în comanda meniului „View>Toolbars...”. Valorile proprietății sunt: Valoare
Descriere |
baNone |
Obiectul nu este ajustat. Aceasta este valoarea implicită. |
baLeft |
Obiectul este |
ajustat la stânga. baRight |
Obiectul este |
ajustat la dreapta. baWidth |
Obiectul este |
ajustat la stânga și la dreapta. baCenter |
Obiectul este |
ajustat în centru. baBottom |
Obiectul este |
ajustat la partea inferioară. baClient |
Obiectul este |
ajustat pe întreaga suprafață a obiectului. Înainte |
 |
de a muta obiectele, este recomandabil să schimbați proprietatea "Align" la " baNone" și să o setați la sfârșitul proiectării, dacă este necesar.Exemplu de inserare a coloanelor |
În tabelul din raport, vom înlocui rata totală de reducere cu reducerea 1 și reducerea 2. În coloana unde valoarea anterioară era reducerea, vom afișa reducerea 1, iar în dreapta acesteia vom insera coloana reducerea 2. Mai jos este o parte din raport cu antetul tabelului și poziția documentului înainte
și după modificări.

Mai întâi, marcăm toate obiectele de pe benzile "QRBand1" și "Detail". Pentru a face acest lucru, țineți apăsată tasta 'Ctrl', faceți clic cu mouse-ul pe "Item" și trageți-l spre dreapta și jos. Apoi, în inspectorul de obiecte, setați valoarea proprietății

" Align"la 'baNone', astfel încât obiectele să nu fie ajustate la altele. Mutați obiectul "Text" cu textul "D%" și câmpul corespunzător cu datele de mai jos ușor spre stânga. Apoi copiați și lipiți-le în dreapta lor. Setați proprietatea "Align" a obiectelor "Text" "Quantity", "U/M" și ambele obiecte cu textul "D %" la 'baRight', astfel încât să fie aliniate la dreapta. Obiectul cu textul "Name" este aliniat pe ambele părți. Acest lucru se face prin setarea proprietății "Align" la 'baWidth'. Faceți același lucru cu obiectele de date din rândul de jos.
Obiectul copiat în antetul tabelului este afișat deasupra liniei, astfel încât nu este vizibil în întregime. Pentru a remedia acest lucru, faceți clic pe elementul "SendToBack" din meniul contextual. Acum linia va fi trasată peste el și va fi vizibilă în întregime.
Aliniem obiectele de date pe orizontală. Pentru a face acest lucru, marcați toate obiectele din banda Detail și faceți clic pe butonul
din bara de instrumente de aliniere.
Schimbați textul în ambele obiecte în care textul este "D %" în "D1 %" și "D2" respectiv.
În obiectele cu date despre reducere, din meniul derulant, selectați câmpurile cu date anRebate1 pentru reducerea 1 și anRebate2 pentru reducerea 2.
Explicație: De exemplu, în imagine, reducerile sunt: reducerea1 50 %, reducerea2: 20 % și superreducerea 0 %. Reducerea totală este mai mică decât suma ambelor reduceri, deoarece reducerile nu se adună.
Explanation: For example on the picture discounts are: discount1 50 %, discount2: 20 % and superdiscount 0 %. Total discount is smaller then sum of both discounts because discounts are not adding up.