Search  
Wednesday, September 20, 2017 ..:: Articole » Demistificarea fişierelor raport din Visual FoxPro ::.. Register  Login
 Articole Minimize

Demistificarea fişierelor raport din Visual FoxPro

Autor: John S. Koziol, IV
Notă: Fişierele raport din Visual FoxPro sunt stocate în tabele obişnuite, dar cu extensia .FRX. În această expunere veţi găsi un studiu aprofundat asupra lor.

Visual FoxPro stochează rapoartele în două fişiere, unul cu extensia .FRX şi celălalt cu extensia .FRT. Aceste fişiere sunt numite uneori "metadata" - informaţii stocate în tabele şi interpretate intern de către Visual FoxPro. Fişierul .FRX este o tabelă şi poate fi deschis ca orice altă tabelă; fişierul .FRT este echivalentul fişierului .FPT asociat unei tabele. Datele din câmpurile memo ale fişierului .FRX sunt stocate în fişierul .FRT, şi acesta nu trebuie deschis singur, ci numai prin intermediului lui .FRX.

Pentru a putea să ducem rapoartele dincolo de posibilităţile motorului nativ Visual FoxPro, este necesar să înţelegem ce este stocat în fişierul .FRX şi cum putem interpreta datele de acolo. Microsoft oferă detalii despre structura fişierului .FRX în nişte rapoarte aflate în subdirectorul FILESPEC. Aceste rapoarte sunt denumite 60FRX1 şi 60FRX2. Raportul 60FRX1 afişează structura fizică a fişierului .FRX, o descriere a valorilor fiecărui câmp şi obiectele din raport la care s-ar putea aplica acel câmp. 60FRX2 extinde raportul pentru a afişa mai multe informaţii despre obiectele din raport la care se aplică un anumit câmp.

Probabil gândiţi deja: "Deci definirea rapoartelor este bine documentată, aşa că trebuie să îmi bag nasul pe-acolo..."

Da şi nu. Am descoperit că fişierul .FRX stochează definirea raportului într-un mod care necesită o analiză foarte precisă. În acest fişier nu toate sunt ceea ce par, iar o parte din valorile câmpurilor, unele chiar critice pentru raport, pur şi simplu nu sunt documentate. Altele n-au sens decât dacă sunt analizate împreună cu alte proprietăţi ale raportului. Situaţia este şi mai rea decât atât: la o vedere de ansamblu, cele două rapoarte din directorul FILESPEC induc în eroare sau pur şi simplu sunt greşite.

Notă: Informaţiile din această expunere se aplică tuturor versiunilor de Visual FoxPro de la 5.0 până la 6.0 SP4. Există informaţii şi standarde care sunt importante pentru înţelegerea completă a fişierului .FRX. În principal, acestea sunt informaţiile care lipsesc din rapoartele din directorul FILESPEC. Fără ele, fişierul .FRX nu poate fi interpretat.

Mai trebuie să menţionez faptul că nu am răspuns la toate întrebările legate de fişierul .FRX. Unele din valorile anumitor câmpuri au rămas un mister şi pentru mine.

Structura de bază

Fiecare fişier .FRX are o singură înregistrare care conţine definirea raportului. Ea conţine informaţii generale despre raport, cum ar fi cele legate de driverul de imprimantă activ în momentul creării raportului.

În continuare sunt înregistrările care conţin datele benzilor de raport. Fiecare bandă de raport are câte o înregistrare. Apoi urmează înregistrările obiectelor din raport. Fiecare înregistrare conţine informaţii despre un singur obiect (etichetă, câmp, chenar, etc).

Urmează înregistrările care conţin informaţii despre variabilele folosite în raport, dacă aţi folosit vreuna.

Apoi veţi găsi înregistrarea aferentă lui DataEnvironment. Aceasta există sau nu, funcţie de folosirea lui Data Environment în raport.

La sfârşit sunt înregistrările corespunzătoare obiectelor din DataEnvironment. Ele conţin informaţii despre tabelele şi relaţiile folosite în raport.

Ordinea înregistrărilor din fişierul .FRX

Ordinea înregistrărilor este importantă pentru anumite obiecte, dar nu pentru toate. De exemplu, prima înregistrare este întotdeauna definiţia raportului. După ea urmează benzile de raport, în ordinea tipului lor.

Benzile de subsol sunt stocate în ordine inversă faţă de benzile de antet. Mai exact, înregistrările corespunzătoare vor fi GroupHeader1, GroupHeader2, Detail, GroupFooter2, GroupFooter1.

Înregistrările aferente celorlalte obiecte din raport sunt stocate în ordinea creării lor, după cele enumerate mai sus.

Unităţi de măsură

Este important să înţelegem unitatea de măsură folosită într-un fişier raport pentru a avea o imagine clară despre modul în care raportul este interpretat în runtime. Unitatea de măsură este folosită în câmpurile VPOS, HPOS, HEIGHT şi WIDTH (excepţiile sunt enumerate în tabelul care urmează). Voi numi aceste unităţi FoxPro Report Units (FRU). În fişierul .FRX nu există câmpuri care să atribuie obiecte benzilor; puteţi doar să calculaţi poziţia unui obiect aşa cum este descris în paragrafele următoare. Cu alte cuvinte, dvs. plasaţi un obiect în raport. Apoi definiţi o bandă a raportului, şi toate obiectele care se află între limitele benzii sunt atribuite acelei benzi.

Cât este de mare un FRU? Depinde de unitatea de măsură pe care o folosită în momentul creării raportului. Dacă aţi definit raportul folosind inch-ul ca unitate de măsură, un FRU este 1/10000 dintr-un inch. Dacă aţi folosit centimetri, un FRU este 1/1000 dintr-un centimetru. Versiunea engleză a lui Visual FoxPro are ca unitate de măsură implicită inch-ul, iar versiunile localizate au centimetrul. Puteţi afla aceasta în meniul Page Setup din Report Designer.

Cum sunt folosiţi aceşti FRU? Aceasta este o parte puţin mai dificilă.

În prima înregistrare (cea cu definirea raportului) singurul loc unde este folosită această unitate de măsură este câmpul WIDTH. Dacă raportul este multicoloană, acest câmp va conţine lăţimea fiecărei coloane, exprimată în FRU. Aceasta corespunde cu lăţimea definită în caseta Page Setup. În oricare din cazuri, VPOS conţine numărul de coloane.

În înregistrările care definesc benzile de raport, HEIGHT este singura valoare exprimată în FRU. Există o valoare şi în câmpul WIDTH din înregistrările subsolurilor benzilor; n-am aflat încă ce reprezintă acea valoare şi dacă poate fi ignorată. Cât despre HEIGHT, valoarea scrisă aici este înălţimea benzii.

Obiectele din raport - adică toate în afară de definirea raportului, definirea benzilor şi înregistrările corespunzătoare lui DataEnvironment - folosesc toate câmpurile. Valoarea VPOS este o valoare absolută, exprimată în FRU, a coordonatei verticale a obiectului, împreună cu valoarea (exprimată tot în FRU) a înălţimilor cumulate ale separatoarelor grafice dintre benzi (cele din Report Designer). CE? Le adună şi pe alea? Da. Vă povestesc imediat.

Valoarea HPOS este coordonata pe orizontală (mai exact, valoarea măsurată din extremitatea stângă a obiectului) faţă de marginea din stânga a coloanei. HEIGHT şi WIDTH sunt dimensiunile obiectului, exprimate în FRU.

Acum este momentul să vă familiarizaţi cu "numărul magic": înălţimea separatorului grafic dintre benzile raportului (separatoarele din Report Designer). Valoarea acestui "număr magic" este 1979.16666666, dacă aţi folosit inch-ul ca unitate de măsură. În cazul folosirii centimetrilor, valoarea sa este 502.7083333.

Pentru a înţelege mai bine acest concept, aruncaţi un ochi pe figura următoare. Este o poză a lui Report Designer, conţinând un raport extrem de simplu. Acest raport a fost creat folosind inch-ul ca unitate de măsură.

report.gif


Avem trei benzi: antetul de pagină, banda "Detail" şi subsolul paginii. Fiecare din ele conţine câte o etichetă. Tabelul următor ilustrează valorile fiecărei înregistrări.

Tabelul 1. Coordonatele benzilor şi ale obiectelor.
Înregistrare
VPOS
HPOS
HEIGHT
WIDTH
Banda Antet Pagină    
3646,000
 
Banda Detail    
5000,000
 
Banda Subsol Pagină    
5000,000
 
Eticheta din Antet Pagină
1250,000
19791,667
1666,667
35000,000
Eticheta din Details
6979,167
23750,000
1666,667
28333,333
Eticheta din Subsol Pagină
15312,000
20000,000
1666,667
35000,000


Remarcaţi că înregistrările sunt scrise în tabel de sus în jos, dar în fişierul .FRX sunt stocate în ordinea creării.

Ei bine, VPOS şi HPOS nu sunt folosite pentru benzi, iar WIDTH este determinată din înregistrarea cu definirea raportului şi este întotdeauna zero (0) pentru benzi. HEIGHT este înălţimea absolută a benzii, exprimată în FRU. Prin simpla adunare a înălţimilor benzilor nu obţineţi valorile corecte pentru plasarea obiectelor din raport. Trebuie să adunaţi şi înălţimea benzilor grafice care despart benzile de raport în Report Designer pentru a determina valorile corecte. Tabelul 2 ilustrează aceasta. Toate valorile sunt exprimate în FRU şi am făcut câteva rotunjiri.

Tabelul 2. Determinarea corectă a coordonatelor.
Banda
HEIGHT
Începe la
Început+HEIGHT
Înălţimea benzii
Dimensiune finală
Antet pagină
3646,000
0,000
3646,000
1979,16666666
5625,167
Detail
5000,000
5625,167
10625,167
1979,16666666
12604,333
Subsol pagină
5000,000
12604,333
17604,333
1979,16666666
19583,500


Vedeţi? Acum am determinat înălţimea fiecărei benzi şi putem spune despre fiecare obiect cărei benzi aparţine şi, de asemenea, poziţia fiecărui obiect în interiorul benzii. Poziţia relativă este calculată ca valoarea VPOS a obiectului minus valoarea "Începe la" pentru banda respectivă. În tabelul 3 veţi găsi un exemplu în care HPOS este valoare absolută faţă de marginea raportului (raportul are o singură coloană - este ignorată).

Tabelul 3. Calculul benzilor şi a poziţiei verticale relative.
Obiect
VPOS
Banda de care aparţine
VPOS Relativ
Eticheta din Antet Pagină
1250,000
Antet
1250,000
Eticheta din Detail
6979,167
Detail
1354,000
Eticheta din Subsol Pagină
15312,500
Subsol
2708,167


Şi cu asta am terminat de calculat locul în care este plasat fiecare obiect şi de ce bandă aparţine. Mi-ar fi plăcut ca Microsoft să documenteze aceste calcule şi, mai ales, să menţioneze faptul că în plasarea unui obiect în raport contează şi înălţimea benzilor grafice din Report Designer, fiindcă aceste lucruri par să fie cel mai dificil de sesizat de cineva care încearcă să lucreze direct cu fişierele metadata.

Structura fişierului .FRX şi valorile componentelor sale.

După cum am menţionat mai devreme, acest articol nu detaliază toate valorile posibile ale fiecărui câmp. Aceasta se datorează lipsei de documentaţii în domeniu. Eu nu le ştiu pe toate şi sunt convis că unele valori vor rămâne cunoscute numai tipilor care au lucrat la elaborarea lui Visual FoxPro.

Tabelul 4 este o încercare de a cataloga toate câmpurile din fişierul .FRX şi modul în care fiecare tip de înregistrare foloseşte aceste câmpuri. Dacă descoperiţi omisiuni, daţi-mi şi mie un e-mail...

Tabelul 4. Fişierul .FRX în toată splendoarea sa.
Nr.
Câmp
Tip
Valori
PLATFORM C(8) Toate înregistrările conţin şirul "WINDOWS".
UNIQUEID C(10) O valoare ca cea dată de SYS(2015). Când este folosită, fiecare înregistrare capătă o valoare unică. Nu este folosită pentru obiectul Font, pentru DataEnvironment sau pentru obiecte Data.
TIMESTAMP N(10,0) Data şi ora când a fost modificată înregistrarea.
OBJTYPE N(2,0) Tipul obiectului asociat înregistrării, astfel:
  • 1 = Înregistrare conţinând definirea raportului.
  • 5 = Etichetă (Label)
  • 6 = Linie (Line)
  • 7 = Chenar (Shape). Când este folosită, câmpul OBJCODE conţine valoarea 4 din motive necunoscute.
  • 8 = Câmp (Field)
  • 9 = Înregistrare conţinând definiţia unei benzi de raport.
  • 17 = Imagine bitmap, de sine stătătoare sau plasată într-un câmp de tip General.
  • 18 = Variabilă.
  • 23 = Obiect Font.
  • 25 = Înregistrare conţinând definiţia lui DataEnvironment.
  • 26 = Obiect data. Acestea sunt cursoare (Cursor) sau relaţii (Relations). Câmpul NAME conţine tipul obiectului.
OBJCODE N(3,0) Folosit în cazul în care anumite valori din OBJTYPE necesită mai multe amănunte.

Când OBJTYPE = 9 (Bandă de raport), sunt folosite următoarele valori:
  1. Titlu (Title)
  2. Antet de pagină (Page header)
  3. Antet de coloană (Column header)
  4. Antet de grup (Group header)
  5. Detaliu (Detail)
  6. Subsol de grup (Group footer)
  7. Subsol de coloană (Column footer)
  8. Subsol de pagină (Page footer)
  9. Sumar (Summary)
Înregistrarea conţinând definirea raportului, câmpul OBJCODE are valoarea 53.
Pentru chenare (Shape), valoarea este 4.
Pentru celelalte obiecte de raport, valoarea acestui câmp este 0 (zero).
Pentru variabile,ca şi pentru înregistrarea conţinând definirea lui DataEnvironment şi obiectele Data, valoarea din acest câmp este blank (mai exact,funcţia EMPTY(OBJCODE) întoarce .T.).
NAME Memo Pentru variabilele de raport (OBJTYPE = 18), conţine numele variabilei.
Pentru înregistrarea conţinând definirea lui DataEnvironment, conţine textul "environment".
Pentru cursoare şi relaţii, conţine "cursor" sau "relation", respectiv.
Documentaţia Microsoft susţine că numele fişierelor bitmap este şi el stocat aici. Această informaţie este greşită.
EXPR Memo Pentru înregistrarea conţinând definirea raportului, conţine informaţii despre driverul imprimantei şi setarea paginii.
Pentru antetele de grup, conţine expresia de grupare a înregistrărilor. Notă importantă: Nu există nici o referire pentru subsolurile de grup. Dacă doriţi să găsiţi expresiile din subsolul grupurilor, le găsiţi în antetele grupurilor respective.
Pentru etichete (Labels), conţine numele fiecăreia.
Pentru câmpuri (Fields), conţine expresia câmpului respectiv.
Pentru variabilele de raport, conţine valoarea care trebuie stocată (Value to store).
Pentru DataEnvironment şi înregistrările obiectelor data, conţine proprietăţile acelor obiecte: de exemplu Alias = Cursor1.
VPOS N(9,0) În înregistrarea conţinând definirea raportului, acest câmp conţine numărul de coloane din raport.
Este blank în înregistrările asociate benzilor de raport, DataEnvironment şi obiectele data.
Pentru obiectul Font, pare să conţină înălţimea fontului în pixeli, aşa cum o întoarce funcţia FONTMETRIC(1).
Pentru obiectele de raport, conţine informaţii despre poziţia lor în raport, aşa cum sunt prezentate în această expunere.
HPOS N(9,0) În înregistrarea conţinând definirea raportului, conţine marginea din stânga, exprimată în FRU. Dacă raportul a fost definit pentru pagina tipăribilă (Printable Page în dialogul Page Setup), acest câmp conţine valoarea 0,000 şi modificările aduse acestei margini par să fie relative la marginile paginii tipăribile. Dacă raportul a fost definit pentru toată pagina, acest câmp are valoarea 2500,000 (un sfert de inch) şi valoarea de aici este o valoare absolută exprimată în FRU şi măsurată de la marginea fizică a hârtiei.
În înregistrările asociate lui DataEnvironment, obiecte data, variabile şi benzi de raport, acest câmp este blank.
Pentru obiectul Font, pare să conţină lăţimea medie a fontului, aşa cum este dată de funcţia FONTMETRIC(6).
Pentru obiectele de raport acest câmp conţine informaţii despre plasarea lor în raport, aşa cum sunt prezentate în această expunere.
10 
HEIGHT N(9,0) Nu este folosită în definirea raportului, dar suspectez că este folosită acolo pentru etichete (Labels).
Pentru benzi, această valoare reprezintă înălţimea benzii exprimată în FRU - valoare absolută.
Pentru obiecte de raport reprezintă înălţimea absolută a obiectului, exprimată în FRU.
Pentru variabile, DataEnvironment şi obiecte data este blank.
Pentru obiectul Font, pare să corespundă cu valoarea întoarsă de funcţia FONTMETRIC(2).
11 
WIDTH N(9,0) Pentru înregistrarea conţinând definirea raportului, acest câmp conţine lăţimea fiecărei coloane din raport. Dacă este o singură coloană, ea reprezintă lăţimea tipăribilă totală a raportului.
Pentru cele mai multe benzi, este zero, dar în mod curios, câmpul conţine o valoare pentru benzile Sumar (Summary). Nu am reuşit să determin funcţionalitatea acestei valori.
Pentru obiectele de raport, valoarea reprezintă lăţimea absolută a obiectului, exprimată în FRU.
Pentru variabile, DataEnvironment şi obiecte data este blank.
Pentru obiectul Font, pare să corespundă cu valoarea întoarsă de funcţia FONTMETRIC(7).
12 
STYLE Memo Raportul 60FRX1 de la Microsoft susţine că în acest câmp sunt scrise stilul fontului şi informaţiile de aliniere ale câmpurilor şi etichetelor. Nici pe departe. Informaţiile despre stilul fontului sunt stocate în câmpul FONTSTYLE şi cele de aliniere sunt stocate ca expresii PICTURE standard FoxPro în câmpul PICTURE. Acest câmo nu este folosit de nici o altă înregistrare.
13 
PICTURE Memo Pentru câmpuri de raport (OBJTYPE = 8), conţine o expresie PICTURE standard FoxPro. Câteodată, Visual FoxPro adaugă o clauză PICTURE când alinierea textului sau alte setări nu sunt cele implicite.
Pentru imagini bitmap (OBJTYPE = 17), conţine ori câmpul de tip General în care este scrisă imaginea, ori calea relativă către fişierul grafic, cum ar fi "..\graphics\logo.bmp".
14 
ORDER Memo Pare să nu fie folosit.
15 
UNIQUE Logic Pentru variabile de raport, indică dacă variabila este eliminată din memorie la sfârşitul raportului.
În conformitate cu raportul 60FRX1 de la Microsoft, este poziţionat pe .T. şi în înregistrarea conţinând definirea raportului, dacă raportul este creat cu un wizard. N-am verificat asta încă.
De asemenea, tot din raportul 60FRX1 rezultă că este folosit în înregistrările corespunzătoare relaţiilor din DataEnvironment. Eu personal n-am văzut decât valori blank în acest câmp pentru acest tip de înregistrări, aşa că nu pot confirma lucrul acesta.
16 
COMMENT Memo Aici se stochează comentariile programatorului. Interesant, Visual FoxPro scrie aici un spaţiu (ASCII 32) în înregistrările corespunzătoare câmpurilor de raport.
17 
ENVIRON Logic Pare să nu fie folosit.
18 
BOXCHAR C(1) Pare să nu fie folosit.
19 
FILLCHAR C(1) Raportul 60FRX1 de la Microsoft susţine că acest câmp nu este folosit. Nu este corectă această afirmaţie.  Pentru toate înregistrările corespunzătoare câmpurilor de raport, în acest câmp se scrie "C" sau "N" - probabil tipul (caracter sau numeric). Totodată, se pare că nu sunt folosite şi alte tipuri de date în acest câmp, cum ar fi "D" sau "Y". De exemplu, DATE() are în câmpul FILLCHAR valoarea "C".
20 
TAG Memo Pentru înregistrarea conţinând definirea raportului, acest câmp conţine informaţiile despre driverul de imprimată, în format compilat sau binar.
Pentru înregistrările corespunzătoare variabilelor de raport, acest câmp conţine valoarea de început a variabilei - mai exact, valoarea la care este resetată variabila după folosire.
Documentaţia Microsoft susţine că acest câmp este folosit pentru indecşi şi relaţii, dar nu este adevărat.
21 
TAG2 Memo Conţine informaţii suplimentare despre driver-ul de imprimată, în format binar. Nu am văzut şi alte utilizări ale acestui câmp, contrar documentaţiei de la Microsoft.
22 
PENRED N(5,0) Valoarea componentei roşu din culoarea textului, aşa cum este folosită de funcţia RGB(). Trebuie să fiţi precauţi în folosirea ei, totuşi. Dacă nu este specificată nici o culoare pentru obiect, în acest câmp se scrie valoarea -1, care nu este interpretată de funcţia RGB().Pentru obiectul Font, pare să conţină valoarea întoarsă de funcţia FONTMETRIC(3).
23 
PENGREEN N(5,0) Valoarea componentei verde din culoarea textului. Vedeţi PENRED. Pentru obiectul Font, pare să conţină valoarea întoarsă de funcţia FONTMETRIC(5).
24 
PENBLUE N(5,0) Valoarea componentei albastru din culoarea textului. Vedeţi PENRED. Nu este folosită în alte scopuri.
25 
FILLRED N(5,0) Valoarea componentei roşu din culoarea de fundal. Vedeţi PENRED.
26 
FILLGREEN N(5,0) Valoarea componentei verde din culoarea de fundal. Vedeţi PENRED.
27 
FILLBLUE N(5,0) Valoarea componentei albastru din culoarea de fundal. Vedeţi PENRED.
28 
PENSIZE N(5,0) Dimensiunea peniţei pentru linii şi chenare.
29 
PENPAT N(5,0) Tipul modelului pentru linii şi chenare.
30 
FILLPAT N(5,0) Valoarea modelului de umplere pentru chenare.
31 
FONTFACE Memo Numele fontului pentru câmpurile de raport, etichete şi obiecte font. Înregistrarea conţinând definirea raportului conţine în acest câmp numele fontului implicit pentru raport.
32 
FONTSTYLE N(3,0) Fiindcă există un câmp FONTFACE, trebuie să existe şi unul FONTSTYLE. Valorile din acest câmp sunt:
0 = Normal
1 = Bold
2 = Italic
4 = Underline
128 = Strikethrough
Aceste valori pot fi adunate pentru a se obţine combinaţia efectelor individuale. De exemplu, valoarea 5 înseamnă Bold şi Underline.
33 
FONTSIZE N(3,0) Dimensiunea fontului pentru câmpurile de raport, etichete şi obiecte Font. În înregistrarea conţinând definirea raportului, acest câmp conţine dimensiunea fontului implicit al raportului.
34 
MODE N(3,0) Folosit de toate obiectele din raport. Valoarea 1 indică modul transparent, iar 0 indică modul opac.
35 
RULER N(1,0) Folosit numai în înregistrarea conţinând definirea raportului. Dacă are valoarea 1, în Report Designer este afişată rigla de pe marginile ferestrei. Dacă are valoarea 0, rigla nu se afişează.
36 
RULERLINES N(1,0) Folosit numai în înregistrarea conţinând definirea raportului. Dacă are valoarea 1, în Report Designer sunt afişate linii pe rigla de pe marginile ferestrei. Dacă are valoarea 0, liniile nu se afişează.
37 
GRID Logic Dacă este .T.,  obiectele se "lipesc" de grid (Snap to grid) în Report Designer. Este folosit numai în înregistrarea conţinând definirea raportului.
38 
GRIDV N(2,0) Spaţiul pe verticală dintre liniile grid-ului în Report Designer. Este exprimat în pixeli. Câmpul este folosit numai în înregistrarea conţinând definirea raportului.
39 
GRIDH N(2,0) Spaţiul pe orizontală dintre liniile grid-ului în Report Designer. Este exprimat în pixeli. Câmpul este folosit numai în înregistrarea conţinând definirea raportului.
40 
FLOAT Logic Folosit de obiectele din raport. Dacă are valoarea .T., obiectele se mişcă funcţie de dimensiunea câmpurilor învecinate.
41 
STRETCH Logic Este folosit de chenare şi câmpuri.
Dacă are valoarea .T., câmpurile îşi modifică dimensiunea verticală astfel încât să afişeze tot conţinutul.
Chenarele îşi modifică dimensiunea verticală astfel încât să afişeze în întregime şi cel mai înalt obiect din grup.
42 
STRETCHTOP Logic Este folosit numai de chenare. Dacă are valoarea .T., chenarul îşi modifică dimensiunea verticală astfel încât să corespundă cu cea a benzii de raport din care face parte.
43 
TOP Logic În înregistrarea conţinând definirea raportului, în mod normal câmpurile TOP şi BOTTOM au valoarea .F. Dacă raportul are mai multe coloane şi ordinea de tipărire este de la stânga spre dreapta (caseta de dialog Page Setup), atunci câmpul BOTTOM are valoarea .T.
Pentru obiectele din raport, acest câmp determină dacă obiectul este fix faţă de partea de sus a benzii din care face parte.
44 
BOTTOM Logic În înregistrarea conţinând definirea raportului are valoarea .T. dacă tipărirea este setată de la stânga spre dreapta. Pentru obiectele de raport, acest câmp specifică faptul că obiectul respectiv este fix faţă de partea de jos a benzii din care face parte.
45 
SUPTYPE N(1,0) Nefolosit.
46 
SUPREST N(1,0) Nefolosit.
47 
NOREPEAT Logic Este folosit de benzile de raport şi de obiecte. Pare să aibă îtotdeauna valoarea .F. pentru benzi, cu excepţia benzilor de sumar, unde are valoarea .T. Pentru obiectele de raport, corespunde cu setarea "Print repeated values" în caseta de dialog Print When.
48 
RESETRPT N(2,0) Nefolosit.
49 
PAGEBREAK Logic Folosit numai de către benzile de raport. Corespunde setării "Start new group on new page". Benzile de sumar au ca valoare implicită .T. în acest câmp.
50 
COLBREAK Logic Folosit în numai de către benzile de raport. Are sens numai în rapoartele cu mai multe coloane. Corespunde setării "Start new group în new column". Benzile de sumar au .T. ca valoare implicită în acest câmp.
51 
GENERAL N(2,0) Folosit numai de imagini bitmap (OBJTYPE = 17).Dacă valoarea este 1, obiectul provine dintr-un câmp de tip General. Dacă valoarea este 2, atunci obiectul provine dintr-un fişier (cum ar fi un fişier .BMP).
52 
SPACING N(3,0) Folosit de etichete şi câmpuri de raport. Indică spaţiul dintre linii.
53 
DOUBLE Logic Folosit numai de imagini bitmap. Dacă are valoarea .T., imaginea este centrată în câmp. Valoarea implicită este .F.
54 
SWAPHEADER Logic Nefolosit
55 
SWAPFOOTER Logic Nefolosit
56 
EJECTBEFOR Logic Nefolosit
57 
EJECTAFTER Logic Nefolosit
58 
PLAIN Logic Aparent nefolosit, dar benzile de sumar au întotdeauna valoarea .T. în acest câmp.
59 
ADDALIAS Logic Pare să aibă întotdeauna valoarea .T. în înregistrarea conţinând definirea raportului, dar Microsoft susţine că nu este folosit.
60 
OFFSET N(3,0) Folosit de câmpurile din raport, chenare şi imagini bitmap. Nu am reuşit să determin cu siguranţă ce funcţie îndeplineşte pentru imagini. Pentru câmpuri, se pare că valorile au următoarele semnificaţii:
0 = Align left (Aliniere la stânga)
1 = Align right (Aliniere la dreapta)
2 = Align center (Aliniere la centru).
Pentru chenare, pare să fie valoarea de rotunjire a colţurilor.
61 
TOPMARGIN N(3,0) Nefolosit.
62 
BOTMARGIN N(3,0) Nefolosit.
63 
TOTALTYPE N(3,0) Este folosit de câmpurile şi variabilele de raport. În acest câmp este stocat tipul calculului efectuat. Valorile sunt:
0 = Nimic (Nothing)
1 = Contorizare (Count)
2 = Sumă (Sum)
3 = Medie (Average)
4 = Minimum (Lowest)
5 = Maximum (Highest)
6 = Deviaţia standard (Standard deviation)
7 = Variaţia standard (Standard variance).
64 
RESETTOTAL N(2,0) Este folosit de câmpurile şi variabilele de raport. Valoarea implicită este 1 (At the end of report) pentru câmpuri. Corespunde setării Reset at din caseta de dialog Calculation. Valorile posibile sunt:
1 = La sfârşitul raportului (At the end of report)
2 = La sfârşitul paginii (At the end of page)
3 = La sfârşitul coloanei (At the end of column)
Grupurile sunt indicate prin valoarea 5+numărul grupului. Astfel, valoarea 6 indică faptul că valorile sunt resetate la sfârşitul primului grup, 7 - la sfârşitul celui de-al doilea grup, etc.
65 
RESOID N(3,0) Nefolosit. Lipseşte complet din documentaţia Microsoft.
66  CURPOS Logic Nedocumentat. Pare să aibă întotdeauna valoarea .F. în înregistrarea conţinând definirea raportului.
67 
SUPALWAYS Logic Folosit de obiectele din raport. Dacă are valoarea .F., valorile care se repetă nu sunt tipărite.
68 
SUPOVFLOW Logic Folosit de obiectele din raport. Dacă are valoarea .T., obiectul va fi tipărit atunci când detaliul trece pe pagina sau coloana următoare. Corespunde checkbox-ului "When detail overflows to new page/column" din caseta de dialog "Print When" din Report Designer.
69 
SUPRCOL N(1,0) Folosit de obiectele din raport. Are valoarea implicită 3, care indică faptul că obiectul trebuie tipărit în prima bandă întreagă a unei noi pagini sau coloane.
70 
SUPRGROUP N(2,0) Folosit de obiectele din raport. Indică dacă un obiect trebuie tipărit când se modifică grupul. Foloseşte aceleaşi valori ca şi RESETTOTAL, şi 0 indică faptul că obiectul este tipărit întotdeauna.
71 
SUPALVCHNG Logic Folosit de obiectele din raport. Documentaţia Microsoft susţine acest câmp este folosit pentru a împiedica tipărirea obiectului pe toate benzile de raport. Nu am putut să verific acest lucru.
72 
SUPEXPR Memo Folosit de obiectele din raport. Conţine expresia din caseta "Print when".
73 
USER Memo Poate fi folosit pentru comentariile programatorului. Visual FoxPro nu se atinge de acest câmp.


Concluzie

Înţelegerea elementelor care stau la baza fişierelor raport FoxPro este baza pentru dezvoltarea unei aplicaţii care să exporte rapoartele în alt format. Astfel, ele pot fi ataşate unui mesaj e-mail, pot fi deschise în alte aplicaţii, ş.a.m.d. Posibilităţile sunt nesfârşite.

Se pare că Microsoft nu intenţionează să includă în Visual FoxPro şi posibilitatea de a exporta rapoartele în alte formate de fişiere (cel puţin, nu prea curând), aşa că depinde de noi.


    

 Google Ads Minimize

    

Copyright 2002-2013 Profox   Terms Of Use  Privacy Statement