---
title: "Atlantis Advanced Forms - Local Data Module & Master Form"
canonical: "https://wiki.soft1.eu/space/ATEL/182092789/Atlantis%20Advanced%20Forms%20-%20Local%20Data%20Module%20%26%20Master%20Form"
format: markdown
---
Τα παραδείγματα που ακολουθούν αφορούν αποκλειστικά την άμεση εξοικείωση σας με τα νέα Customization Tools του ATLANTIS. Για αυτόν το λόγο χρησιμοποιούνται Core πίνακες του ATLANTIS.  Σε καμία περίπτωση δεν προτείνεται να γίνονται καταχωρίσεις σε Core πίνακες με αυτόν τον τρόπο. Σχεδιασμός Local Data Module Μέσα από τα νέα Customization Tools σας δίνεται η δυνατότητα να σχεδιάσετε το δικό σας Data Module, το οποίο το συνδέετε με την Master φόρμα που θα κατασκευάσετε/σχεδιάσετε. Το Data module είναι ένα εργαλείο, το οποίο σας προσφέρει τη δυνατότητα να φτιάξετε το δικό σας <<πακέτο>> δεδομένων, το οποίο μπορείτε να το χρησιμοποιήσετε σε όποια φόρμα θέλετε. Σε αυτό το εργαλείο, δεν υπάρχει η έννοια του Run. Σε περίπτωση που το πατήσετε δεν θα υπάρξει αποτέλεσμα. Aκολουθεί παράδειγμα με τα βήματα κατασκευής ενός Data Module. Το συγκεκριμένο Data Module θα χρησιμοποιηθεί και στην κατασκευή της Master Form αργότερα. Αρχικά εκτελούνται τα βήματα που περιγράφονται στο tab των Οδηγιών Παραμετροποίησης > Βήματα Παραμετροποίησης και στη συνέχεια εκτελείτε τα επιμέρους βήματα για την συγκεκριμένη φόρμα. Βήμα 1 Επιλέγοντας την παλέτα (Palette), θα παρατηρήσετε ότι τα διαθέσιμα Control είναι πολύ λίγα. Από αυτά που διατίθενται θα χρησιμοποιηθούν τρία.   TBrowser    MemTable1   TLinkCliTable Βήμα 2 Τα πεδία που πρέπει να συμπληρωθούν σε κάθε Control είναι τα ακόλουθα:   TBrowser  SQL: Συμπληρώνετε το Query με τον πίνακα από τον οποίο θέλετε να εμφανίζει δεδομένα ο Browser της φόρμας. (βλ. Βήμα 2, Browser Form). 2. MemTable1 Load Query: Συμπληρώνετε το Query (βλ. Βήμα 2, Basic Form). 3. TLinkCliTable TableName: Το όνομα του πίνακα. UpdateKey: Το Primary Key του πίνακα. (βλ. Βήμα 2 Browser Table Edit Form) Πατώντας πάνω στο άσπρο κομμάτι της φόρμας θα εμφανιστούν τα Properties που πρέπει να συμπληρωθούν. Στο Key Fields συμπληρώνετε το πεδίο που θα συνδέει τον Browser με την Master φόρμα. Στο Main Browser και στο Main table τα ονόματα των components όπως είναι μέσα στην φόρμα του data module. Θα πραγματοποιηθεί εκτενέστερη ανάλυση στο Tab των Master Form. Σχεδιασμός Master Form Η Master Φόρμα αποτελείται από δυο σκέλη: 1. τη φόρμα του Browser και την 2. κύρια φόρμα που αποτελείται από το Header και τα Details.  Η συγκεκριμένη φόρμα χρησιμοποιείται για την προβολή των υπαρχουσών εγγραφών αλλά και την καταχώρηση νέων.  Aκολουθεί παράδειγμα με τα βήματα κατασκευής/σχεδιασμού μιας Master Form. Η φόρμα που θα κατασκευαστεί θα εμφανίζει στον Browser τους καταχωρημένους πελάτες ενώ στην κυρίως φόρμα θα εμφανίζονται όλα τα παραστατικά που έχουν καταχωρημένο το ID του εκάστοτε πελάτη που έχετε επιλέξει από τον Browser, καθώς επίσης και κάποιες πληροφορίες από τις γραμμές του αντίστοιχου παραστατικού που έχετε επιλέξει.   💡  Η συγκεκριμένη φόρμα του παραδείγματος προορίζεται μόνο για παρουσίαση δεδομένων, όχι για καταχωρίσεις. Αρχικά, εκτελούνται τα βήματα που περιγράφονται στο Tab των Οδηγιών Παραμετροποίησης > Βήματα Παραμετροποίησης και στη συνέχεια, εκτελείτε τα επιμέρους βήματα για την συγκεκριμένη φόρμα. Βήμα 1 Data module Controls Αρχικά κατασκευάζετε το data module, το οποίο θέλετε να συνδέσετε με την φόρμα σας. Για το παράδειγμα θα γίνει χρήση του προηγούμενου data module που κατασκευάστηκε (βλ. 5.Data Module).  brCus (TBrowser)   tblFintrade (TLinkCliTable)  MemTable1 (TMemTable) Έχει πραγματοποιηθεί μετονομασία του Browser σε brCus και του TLinkCliTable σε TblFintrade. Master Form Controls Με την αρχική είσοδο έρχεται το Tab του Browser και το TabData. Από την παλέτα των Controls χρειάζεστε τόσα Data Sources όσα και τα components που έχετε στο Data Module. Το Tab του Browser έρχεται έτοιμο, δεν χρειάζονται προσθήκες. Επιλέγετε το TabData και προσθέτετε το κομμάτι του Header και των Details.   UDataSource1(TUDataSource)   UDataSource2(TUDataSource)   UDataSource3(TUDataSource)   RDBEdit1(TRDBEdit)   RDBEdit2(TRDBEdit)   RDBEdit3(TRDBEdit)   RDBEdit4(TRDBEdit)   RDBEdit5(TRDBEdit)   RDBEdit6(TRDBEdit)   RDBEdit7(TRDBEdit)   RLabel1(TRLabel)   RLabel2(TRLabel)   RLabel3(TRLabel)     RLabel4(TRLabel)   RLabel5(TRLabel)   RLabel6(TRLabel)   RLabel7(TRLabel)   DBControlGrid1(TDBControlGrid)   DBControlGrid2(TDBControlGrid)   RColorButton1(TRColorButton)   RColorButton2(TRColorButton ) Βήμα 2 Τα πεδία που πρέπει να συμπληρωθούν σε κάθε Control είναι τα ακόλουθα: Data Module Controls   brCus:  SQL: Συμπληρώνετε το Query με τον πίνακα από τον οποίο θέλετε να εμφανίζει δεδομένα ο Browser της φόρμας. (βλ. Βήμα 2 στην Browser form). Query: SELECT  ID AS CUSID , NAME, CODE, AFM, STREET1, CITY1, ZIPCODE1, BRAID FROM CUSTOMER Όταν στον Browser και στην κυρίως φόρμα έχετε διαφορετικούς πίνακες, πρέπει το πεδίο που τους συνδέει να έχει την ίδια ονομασία και στους δυο, για αυτό το λόγο στο παραπάνω Query το ID γίνετε SELECT AS CUSID. 2. tblFintrade (TLinkCliTable) TableName: Το όνομα του πίνακα. UpdateKey: Το Primary Key του πίνακα. Όταν συμπληρώνετε το Table Name και το UpdateKey δεν πρέπει να αφήνετε κενά. Διαφορετικά θα εμφανίσει Error. 3. MemTable1 : Παραμένει άδειο και γεμίζει μέσα από την φόρμα, όπως θα δείτε παρακάτω. Αυτό σας δίνει το πλεονέκτημα ότι μπορείτε να έχετε έναν άδειο MemTable στο Data Module σας και να τον γεμίζετε με ό,τι θέλετε ανάλογα με το τι χρειάζεστε για την εκάστοτε Master φόρμα που κατασκευάζετε. 4. Φόρμα Πατώντας στο λευκό κομμάτι της φόρμας θα εμφανιστούν τα Properties για να συμπληρώσετε τα ακόλουθα: Στο Key Fields συμπληρώνετε το πεδίο που συνδέει τον Browser με την Master φόρμα, ενώ στο Main Browser και στο Main Table τα ονόματα από τα αντίστοιχα Components. Master Form Controls   UDataSource1 -3 : Data set: Συμπληρώνετε το όνομα του Data Module όπως το έχετε ορίσει, βάζετε τελεία(.) και στη συνέχεια, το όνομα του component με το οποίο θέλετε να συνδέετε το συγκεκριμένο DataSource. Το DataSource1 είναι συνδεδεμένο με το Control που περιέχει δεδομένα για τον Browser, άρα αυτό το DataSource θα συνδεθεί με το Browser. Ομοίως συμπληρώνετε τα  DataSource2  και  DataSource3. 2. RDBEdit  1-7 Σε αυτά τα πεδία συμπληρώνετε το πεδίο της βάσης που θέλετε να εμφανίζεται ή να καταχωρείται.  Προσοχή, θα πρέπει να ορίσετε το σωστό Data Source για κάθε πεδίο. Αν π.χ. θέλετε να φέρετε το όνομα του πελάτη, θα πρέπει το πεδίο να συνδεθεί με το DataSource1 που είναι συνδεδεμένο με το brCus που διαβάζει τον πίνακα Customer μέσα στην βάση. Δεν έχει σημασία που τα πεδία βρίσκονται στην master φόρμα και όχι στον browser. Data Field: Το όνομα του πεδίου στην βάση. Data Source: Συμπληρώνετε το όνομα του DataSource από το οποίο θα παίρνει δεδομένα. RDBEdit1: RDBEdit2: RDBEdit3: RDBEdit4: RDBEdit5: RDBEdit6: RDBEdit7: 3. RLabel1-7 Αυτό είναι ένα Λεκτικό Control και δεν περιέχει δεδομένα.  Χρησιμοποιείται σαν προσδιοριστικό για τα παραπάνω RDBEdit Controls. Caption: Συμπληρώνετε ότι λεκτικό θέλετε να εμφανίζεται. Πχ. RLabel1 Ομοίως συμπληρώνετε και τα υπόλοιπα. 4. DBControlGrid1 Για το TDBControlGrid ακολουθείτε τα ίδια βήματα του TDBControlGrid της Basic Form (βλ. Basic Form >Βήμα 2). Προσοχή, το DBControlGrid1 συνδέεται με το DataSource2. Ορίστηκαν οι παρακάτω στήλες για το DBControlGrid1: Το TRADECODE, TOTTAMOUNT, COMID, DSRID, FTRDATE είναι πεδία της βάσης, το DSRIDDESCR είναι ένα πεδίο που δεν υπάρχει στην βάση και κατασκευάστηκε στο Fields Editor ώστε να έρχεται η περιγραφή της κάθε σειράς. Μεταβαίνετε   στο   Data Module : Control:  tblFintrade (TLinkCliTable) : Fields Editor: Φτιάχνετε ένα δικό σας πεδίο στο οποίο εκεί θα φέρνετε μέσα την περιγραφή της σειράς (βλ. 4. BrowserTable Edit form>3 Βήματα> Βήμα 2> RSelector1  Μόνο το πρώτο Βήμα ). Στο Fields Editor αυτήν την στιγμή έχετε το DSRIDDESCR και αριστερά έχετε τα Properties του πεδίου. Το FieldKind που είναι fkData το αλλαζετε σε fkInternalCalc. Επιστρέφετε στα  Properties  του tblFintrade (TLinkCliTable): Relations Συμπληρώνετε τα πεδία με τον ίδιο τρόπο που συμπληρώσατε για το Selector Control (βλ. 4. BrowserTable Edit form> Βήματα> Βήμα 2> RSelector1  Μόνο το πρώτο Βήμα ). Η διαφορά είναι στο ότι εδώ  δεν  υπάρχει Selector άρα το Selector Name δεν το συμπληρώνετε. 5. DBControlGrid2 Για το TDBControlGrid ακολουθείτε τα ίδια βήματα του TDBControlGrid της Basic Form (βλ. Basic Form ->Βήμα 2). Προσοχή, το DBControlGrid2 συνδέεται με το DataSource3. Ορίστηκαν οι παρακάτω στήλες για το DBControlGrid2: To DBControlGrid2 έχει οριστεί Visible= False και εμφανίζεται μετά το κλικ του RColorButton1. 6. RColorButton1 Για τον ορισμό του Button και της Sub βλ. Basic form> Βήμα 2. Μέσα στην Sub του συγκεκριμένου Button θα γεμίζει το MemTable. Sub RColorButton1Click (Sender) IForm.IClientDM.MemTable1.Data = IClientDM.IDB.QueryData ("SELECT DISTINCT STL.ITEID,STL.PRIMARYQTY,STL.VTCID,STL.STOID,ITE.DESCRIPTION FROM STORETRADELINES STL  INNER JOIN  MATERIAL ITE ON STL.ITEID=ITE.ID WHERE FTRID= " &(IForm.RDBEdit7.Text),NULL) IForm.DBControlGrid2.VISIBLE=TRUE IForm.RColorButton2.VISIBLE=TRUE End Sub Η στήλη DESCRIPTION στο Grid Columns φέρνει την περιγραφή των Ειδών. Για να έρθει η περιγραφή δεν ακολουθήθηκε η συνηθισμένη διαδικασία όπως περιγράφηκε παραπάνω. Για την περιγραφή των Σειρών (θα μπορούσε να γίνει και έτσι), ήρθε μέσα από τον κώδικα με ένα INNER JOIN του STORETRADELINES και του MATERIAL κατά το γέμισμα του MemTable. Κάνοντας κλικ στο Button εμφανίζεται το DBControlGrid2 και το RColorButton2. Το Caption έχει αλλάξει σε “Λεπτομέρειες”. 7. RColorButton2 Για τον ορισμό του Button και της Sub βλ. Basic form> Βήμα 2. To RColorButton2 έχει οριστεί .Visible = False και εμφανίζεται μετά το κλικ του RColorButton1. Sub RColorButton2Click(Sender)     IForm.DBControlGrid2.VISIBLE=FALSE     IForm.RColorButton2.VISIBLE=FALSE End Sub Με την επιλογή του Button θα κρυφτεί το RColorButton2 και το DBControlGrid2. Το Caption έχει αλλάξει σε “HIDE”. Επειδή η συγκεκριμένη φόρμα προορίζεται μόνο για επίδειξη δεδομένων και όχι για καταχωρίσεις, θα απενεργοποιούν τα Buttons "Εισαγωγή" και "Διαγραφή" τόσο από τον Browser όσο και από την κυρίως φόρμα, από την κυρίως φόρμα θα απενεργοποιηθεί και το Button Καταχώρηση. 8. frmCustom > Event > OnCreate Sub UniDsgMasterFRMCreate(Sender)       IForm.DeleteBtn.VISIBLE =FALSE       IForm.NewRecBtn.VISIBLE =FALSE       IForm.MPagesDelBtn.VISIBLE =FALSE       IForm.MPagesNewBtn.VISIBLE =FALSE       IForm.PostBtn.VISIBLE =FALSE     End Sub Τέλος, γίνεται αλλαγή στο Caption (βλ. Basic Form>Βήμα 2) της φόρμας από Untitled1 σε Πελάτης-Παραστατικά. Βήμα 3 Επιλέγοντας Run (συντ. F9) παρουσιάζεται αρχικά ο Browser και μόλις πατήσετε το πλήκτρο "Refresh" ή κάποιο φίλτρο εμφανίζονται όλοι οι Πελάτες. Επιλέγοντας τον πρώτο οδηγείστε στη Master Φόρμα. Στο σημείο αυτό, βλέπετε όλα τα παραστατικά που περιέχουν τον συγκεκριμένο πελάτη. Επιλέγοντας το button "Λεπτομέρειες" εμφανίζεται από κατω ένα Grid με κάποια στοιχεία από τις γραμμές του παραστατικού. Μόλις επιλέξετε άλλο παραστατικό και ξανά το button "Λεπτομέρειες" το Grid θα φέρει τις πληροφορίες για το εκάστοτε παραστατικό. Πατώντας το "HIDE" το Grid θα κρυφτεί καθώς και το ίδιο το κουμπί HIDE. Όλα τα Buttons που έρχονται By Default στoν Browser και στη Master φόρμα μπορούν να γίνουν Non-Visible στο Event OnShow της φόρμας, θέτοντας το όνομα της κλάσης τους .visible=false. Πχ. IForm.DeleteBtn.visible=FALSE (το κουμπί Διαγραφή στον Browser) Σε αυτόν τον τύπο φόρμας κάνετε καταχωρίσεις, άρα θα πρέπει να προσέξετε τα Non-Nullable πεδία του πίνακα. Αν προσπαθήσετε να καταχωρίσετε κάτι και δεν έχετε συμπεριλάβει όλα τα Non-Nullable πεδία θα εμφανίσει Error.