A táblaleírók a Keretrendszer - Konfigurációs fájlok topicban találhatók. Az átmeneti táblák leírói ezen belül a TMP topicba kerülnek. Fizikailag a táblaleíró topic-ok a Topics\Config könyvtárba, az átmeneti fájlokat leíró topic-ok pedig a Topics\Config\TMP könyvtárba kerülnek.
A Nagy Machinátor a táblaleírókat közvetlenül a topic-okból (az XML fájlokból) veszi, ezért lényeges, hogy a topic-okat a megfelelő néven a megfelelő könyvtárba hozzuk létre. A topic-ok formátuma is kötött.
A táblaleírókat a kezdőbetűjüknek megfelelő topic-ba kell rakni, a magyar ékezetes betűk a nekik megfelelő ékezettelen betűhöz kerülnek, a kettős betűk pedig az első betűhöz, a nem betűvel kezdődő állományok (ami kerülendő) pedig az 'Egyéb' topicba. Ha valamelyik kezdőbetű topic nem létezik, akkor létre kell hozni számára egy szöveg nélküli topic-ot. A kezdőbetű topic-ok és ezen belül a táblaleíró topic-ok ABC sorrendben vannak, a kis- nagy- és ékezetes betűket nem különböztetjük meg (tehát az o, O, ö, Ö, ő, Ő mind egyenlő), a kettős betűk pedig a két betűnek megfelelően kerülnek a helyükre (pl. a Cs a Cr és a Ct közé kerül).
Új topic-ot legegyszerűbben úgy vehetünk fel, hogy megkeressük az ABC-ben előtte álló topic-ot a TOC-ban, majd azon jobb egérgombot nyomunk, és kiválasztjuk az Add after selected topic menüpontot.
A Topic Heading mezőbe írjuk a tábla logikai nevét, lehet ékezetes is, maximális hossza 12 karakter.
A Topic ID mezőt automatikusan kitölti a program, de ezen kicsit faragnunk kell: az ékezeteket ugyan leveszi, de az 'ö'-ből 'oe'-t csinál, az 'ü'-ből pedig 'ue'-t, ezt nekünk kell kézzel kijavítani 'o'-ra és 'u'-ra. A táblák Topic ID-je a 'Config_' előtaggal kezdődik, az átmeneti tábláké pedig a 'Config_TMP_' előtaggal, ezt nekünk kell kézzel eléírni. A topic-okat így kell elnevezni. Ha elrontottuk, később a topic szerkesztésekor a Topic Options fülön kijavíthatjuk.
Ha nincs nyitva, nyissuk le a More topic options lehetőséget. A Create in mezőben válasszuk a 'Topics/Config/' könyvtárat, átmeneti táblák esetén pedig a 'Topics/Config/TMP/' könyvtárat. Nagyon lényeges, hogy a topic-ot a megfelelő könyvtárban hozzuk létre, mert ha nem jó könyvtárba rakjuk, akkor nem megfelelő tábla lesz belőle, vagy egyáltalán nem is keletkezik tábla. Ha elrontottuk, később is áthelyezhetjük: nyissuk meg a Project Files részt, azon belül a Topics könyvtárat, és keressük meg a topic-unkat (ha nem adtunk meg semmit, akkor ide került, ha megadtunk könyvtárat, csak rosszat, akkor ott keressük). A topic-ot egyszerűen húzzuk át a jó könyvtárba.
A Topic Template mezőben válasszuk a 'config.template.xml' fájlt, ez megadja az új topic formáját, nekünk már csak az információt kell beleírni.
Kattintsunk az OK gombra, és elkészül az üres táblaleíró.
Kattintsunk a Topic Options fülre. A Keywords mezőbe írjuk be a tábla logikai és fizikai nevét (pl. 'ÁllKódFüggés' és '?_AKFUGG'), az A-Keywords mezőbe pedig a tábla logikai nevét a 'Config_', illetve 'Config_TMP_' előtaggal (pl. 'Config_ÁllKódFüggés'). Ezekre a keresésekkor lesz szükség.
Az első bekezdésben írjuk le, mire való a tábla.
Ezután következik a táblát alkotó rekordok felépítésének leírása.
A táblaleíró sorait Code Example stílussal kell írni. Ez lényeges, mert a Nagy Machinátor csak a Code Example sorokat tekinti táblaleírónak, a többi csak körítés.
Az első sor a DATAFILE kulcsszót tartalmazza:
DATAFILE ÁllKódFüggés = ?_AKFUGG <module:B1>
DATAFILE Cikktörzs = ?_CIKKT <module:KL> <displayname:"Cikk">
A DATAFILE után a tábla logikai neve következik, amely maximum 12 karakteres lehet. Ha nincs annyi, akkor szóközökkel ki kell egészíteni 12 karakteresre. A logikai név után egy szóköz, majd az '=', majd még egy szóköz van, majd a tábla fizikai neve következik, mely maximum 8 karakteres lehet. Ha a tábla kötetfüggő, akkor az első két karaktere '?_' (pontosabban az első '?', és valahol máshol van benne egy '_', de az új kötetfüggő táblákat úgy kell felvenni, hogy az első két karakterük a '?_' legyen). Az átmeneti táblák fizikai nevének a '$_' karakterekkel kell kezdődnie. Minden egyéb név kötetfüggetlen táblát jelöl. A tábla fizikai nevét szóközökkel 8 karakteresre kell kiegészíteni. A fizikai név után következhet a modul megadása, ez nem kötelező, azt mutatja meg, hogy mely modulhoz kapcsolható leginkább a tábla (pontosabban azt, hogy régen mi volt annak a konfigurációs fájlnak a neve, amelyben a táblaleíró volt). Megadható egy displayname is, mely kereséskor, adatállomány karbantartáskor jelenik meg.
A következő sorban a tábla verziója található:
VERSION 1
A verziót minden változtatáskor növelni kell eggyel. Csak pozitív egész szám lehet, nincs 1A, meg hasonló verzió.
A következő sorokban a tábla opcióit adhatjuk meg:
DIARY OFF
A tábla változásai nem kerülnek be a naplóba. Az összes átmeneti táblánál kötelező megadni.
PACK OFF
A tábla változásai nem kerülnek be a tranzakciós naplóba, a tranzakció visszagörgetésekor a tábla változásai megmaradnak. A konfigurációs állományok (Session, FileSes, MezőParam) használják, de bármely más állományban is használható, ha az adott állományt ki akarjuk hagyni a tranzakcióból.
GUARD [0..255]
A tábla tartalma a megadott számmal titkosítva lesz (0 esetény nem lesz titkosítva). Nem túl erős titkosítás, csak a közvetlen belenézés ellen jó, viszont gyorsan kódolható és dekódolható.
Ezután egy üres sor következik, majd a táblát alkotó rekordok leírója.
Egy táblán belül a rekordoknak 15-féle típusa lehet, melyeket 1..15-ig sorszámozunk meg (a nullás típus törölt rekordot jelent, ezért az nem használható). A rekord típusát a rekord első bájtjában kell megadni, ezért minden rekord egy 'Típus' nevű felsorolt (ENUM) mezővel kezdődik, melynek minden típusváltozatban szerepelnie kell.
Minden mezőre meg kell adni, hogy mely típusokban szerepel.
A típusok egymásba ágyazhatók. Egymásba ágyazás esetén a típusok felsorolását két szóközzel beljebb tabuláljuk, de a mezőket nem. A lezáró ']' is oda van tabulálva, ahova nyitó felsorolás. Minden típusfelsorolás előtt egy üres sort hagyunk, de a záró ']' előtt nem, azok csak egyenként egy sorba kerülnek.
[ 1, 2, 3:
Típus : ENUM '|Első|Második|Harmadik'
MezőMindben : CARD8
[ 2, 3:
Mező23 : CARD8
[ 3:
Mező3 : CARD8
]
]
[ 1, 3:
Mező13 : CARD8
]
]
A mező neve maximum 12 karakteres lehet, és magyar ékezetes betűket is tartalmazhat. A mezőnevet a sor elejétől 6 szóközzel jobbra tabuláljuk, függetlenül attól, hogy a típusok milyen mélyen vannak egymásba ágyazva. A mező nevét követő ':' mindig a mező elejétől 13 karakternyire kerül (12 karakteres mezőnév, plusz egy karakter szóköz). A ':' után is van egy szóköz, majd a mező típusa következik, mely az alábbiak valamelyike lehet:
Név |
Méret (bájt) |
Leírás |
ASCII |
megadott |
Karakterlánc. Összehasonlításkor minden karakter a saját kódján szerepel, a kis- és nagybetűk különböznek, az ékezetes betűk pedig a CWI kódtábla szerinti helyükön vannak. |
BYTES |
megadott |
Típus nélküli mező. A többi kategóriába nem besorolható mező. |
CARD8 |
1 |
Előjel nélküli egész szám, 0..255 |
CARD16 |
2 |
Előjel nélküli egész szám, 0..65535 |
CARD32 |
4 |
Előjel nélküli egész szám, 0..4294967295 |
CWI |
megadott |
Karakterlánc. Az összehasonlítás a magyar ABC szabályai szerint történik, a kis- és nagybetűk nem különböznek, a magyar ékezetes betűk az ABC szerinti helyükön vannak. |
DOSDATE |
2 |
DOS-os dátum formátum, 2 bájton, 1980-2079-ig. |
ENUM |
1 |
Felsorolt típus. Az értékek a maszkban felsorolt elemeknek felelnek meg, az első elem értéke nulla. |
INT8 |
1 |
Előjeles egész szám, -128..127 |
INT16 |
2 |
Előjeles egész szám, -327688..32767 |
INT32 |
4 |
Előjeles egész szám, -2147483648..2147483647 |
LBCD |
megadott / 2, felfelé kerekítve |
Balra rendezett, binárisan kódolt decimális szám. Egy bájtban két decimális számjegyet tárol el, a számokat balra rendezi, a maradékot BCD szóközzel tölti fel. Kódok (pl. ügyfélkód) tárolására alkalmas, számolni közvetlenül nem lehet vele. Mivel egy bájton két számjegy fér el, ezért helytakarékos. |
LONGREAL |
4 |
Lebegőpontos szám, ±10±308, 15 értékes jegy. A bináris ábrázolás miatt a tizes számrendszerben 'kerek' tizedes számok (pl. 0,1) nem ábrázolhatók pontosan. Az egész számok mindig pontosan ábrázolhatók. |
RBCD |
megadott / 2, felfelé kerekítve |
Jobbra rendezett, binárisan kódolt decimális szám. Egy bájtban két decimális számjegyet tárol el, a számokat jobbra rendezi, az elejét BCD '0'-val tölti fel. Kódok, sorszámok (pl. számlaszám) tárolására alkalmas, számolni közvetlenül nem lehet vele. Mivel egy bájton két számjegy fér el, ezért helytakarékos. |
REAL |
8 |
Lebegőpontos szám, ±10±38, 7 értékes jegy. A bináris ábrázolás miatt a tizes számrendszerben 'kerek' tizedes számok (pl. 0,1) nem ábrázolhatók pontosan. Az egész számok mindig pontosan ábrázolhatók. |
A 'megadott' méretű mezőknél a méretet a típus után egy szóközzel írjuk:
String1 : CWI 40
String2 : ASCII 30
BCD1 : LBCD 10
Buf : BYTES 200
A további elemek opcionálisak. Ha van valami, akkor a típus elejétől 10 karakternyire kezdjük. Ha a típus (és a méret) több, mint 9 karakter helyet foglal, akkor a típus után egy szóközzel kezdődik a következő elem.
A típus után következhet a Picture. A Picture-el adhatjuk meg a bevitel és megjelenítés módját, felsorolt típusnál az elemek megnevezését.
A Picture elé vagy mögé (tetszőleges sorrendben) '< >'-ök közé zárva további paraméterek írhatók:
•<default:'érték'> alapértelmezett érték megadása
•<displayname:"név"> mező megjelenített neve, pl. keresőablakokban
Típus : ENUM '|Első|Második|Harmadik'
Valami : %ValamiTípus% 'Ez|Az|Emez|Amaz'
Százalékos : CARD8 <default:'1'>
Cikknév1 : CWI 40 <displayname:"Cikk megnevezés">
A mezők leírását az első típusfelsorolást lezáró ']'-al fejezzük be. Egy sorköz után következnek az indexek.
Minden index külön sorban szerepel, a típusfelsorolás (CONDITION) megelőzi a duplikált kulcsokat lehetővé tevő DUPKEY kulcsszót (ha van), végül '[ ]'-ek között az indexben szereplő mezők következnek, '+' jelekkel elválasztva. A '[' jel után és a ']' jel előtt nincs szóköz, a '+' jel mindkét oldalán van szóköz.
INDEX DUPKEY [Pénztár + Dátum + BizSzám]
INDEX [Pénztár + BizSzám + Sorszám]
INDEX CONDITION 2, 8 DUPKEY [Jelleg + SzámlaSzám]
A leírót az 'END DATAFILE' sorral zárjuk le, mely előtt és után egy-egy üres sort hagyunk.
END DATAFILE PallasSzámla;
A leíróba bárhova írhatunk megjegyzést, de a leíró formáját lehetőleg ne verjük szét, ezért a megjegyzést vagy külön sorba, vagy a sor végére rakjuk. A megjegyzést a '{' és '}' jelek, vagy a '(* és '*)' jelek közé írhatjuk. A megjegyzések egymásba ágyazhatók.