Τρίτη 1 Μαρτίου 2016

Εγχειρίδιο της Μ2000 - Τεύχος 23ο

12. Βάσεις Δεδομένων


Σε αυτό το εγχειρίδιο σκοπός είναι να δούμε τι εντολές έχει η Μ2000 για βάσεις δεδομένων, να δούμε μερικά θέματα πάνω σε αυτές αλλά όχι να σταθούμε σε θέματα ποιοτικά, το πώς σχεδιάζουμε βάσεις δεδομένων. Το κομμάτι του σχεδιασμού είναι μια άλλη επιστήμη. Εδώ θα δούμε τη διεπαφή, προγραμματιστικά που έχει η Μ2000 με τις βάσεις δεδομένων. Πριν την 7η έκδοση το υποσύστημα που χρησιμοποιούνταν ήταν το DAO .3.5 ή ένα data access object με την "μηχανή" Jet της Microsoft (διαχείριση βάσεων τύπου Access 97). Από την 7η έκδοση και μετά άλλαξε το σύστημα, χωρίς να αλλάξουν οι βασικές εντολές την λειτουργικότητά τους, αλλά προστέθηκαν και άλλες, και μπήκε το ADO Object Model. Αυτό το μοντέλο αν και διαφορετικό από το DAO, έχει προσαρμοστεί στις εντολές και έχει την ίδια απόκριση (αν χρησιμοποιηθεί όπως στις παλαιές εκδόσεις της Μ2000).

Μια διαφορά του παλιού με του νέου συστήματος (κρυμμένη εσωτερικά) είναι ότι παλιά υπήρχε το WorkSpace ενώ τώρα όλα αρχίζουν και τελειώνουν με το Connection. Η M2000 κρατάει μια σύνδεση μέχρι να την κλείσουμε ή μέχρι να τερματίσει το πρόγραμμα. Κάθε φορά που πετυχαίνουμε σύνδεση μπορούμε να κρατάμε αποκλειστικά την σύνδεση για μας. Οπότε αν θέλουμε κάνουμε ότι ενέργεια έχουμε και κλείνουμε την σύνδεση.
Ένα ενδιαφέρον θέμα με το ADO είναι ότι μπορεί να λειτουργήσει με ODBC (Open Database Connectivity) δηλαδή βάσεις που  διαχειρίζονται από το λειτουργικό, και εμείς απλά λέμε ποια θέλουμε (χωρίς να ξέρουμε καν που είναι, μπορεί να είναι η βάση σε υπολογιστή δικτύου), δίνουμε κωδικό και συνθηματικό και έχουμε σύνδεση! Μάλιστα εδώ υπάρχουν και χρήστες με κωδικό (διαφορετικό από τυχόν κωδικό για ξεκλείδωμα της βάσης).

Οι βάσεις που φτιάχνει η Μ2000 με τον καθορισμένο απλό τρόπο είναι κλειδωμένες με ένα απλό κλειδί, όχι για να κρύβουμε τα στοιχεία αλλά για να ξέρει ο διερμηνευτής ότι η βάση είναι δική του! Αν το ξέρει αυτό τότε μπορεί να την σβήσει. Θέλουμε να σβήνουμε με ευκολία μια βάση αν κάνουμε δοκιμές! Επειδή ο κώδικας είναι ανοικτός, μπορεί κανείς να βρει το κωδικό εύκολα.

Οι εντολές για τις βάσεις δεδομένων είναι οι παρακάτω: (η εντολή Επιστροφή χωρίς τιμές δεν είναι εντολή για βάσεις δεδομένων, αλλά για επιστροφή από κλήση ρουτίνας σε ετικέτα)

ΑΝΑΖΗΤΗΣΗ, ΑΝΑΚΤΗΣΗ, ΑΡΧΕΙΟ, ΑΦΑΙΡΕΣΗ, ΒΑΣΗ, ΒΑΣΗ.ΠΑΡΟΧΟΣ, ΒΑΣΗ.ΧΡΗΣΤΗΣ, ΔΕΙΞΕ, ΔΟΜΗ, ΕΚΤΕΛΕΣΗ, ΕΠΙΣΤΡΟΦΗ, ΠΡΟΣΘΗΚΗ, ΣΥΜΠΙΕΣΗ, ΤΑΞΗ




Υπάρχει μια διαφορά με τις παλιές εκδόσεις της Μ2000, όταν στον τελεστή LIKE χρησιμοποιούσαμε το *. Στο DAO έχει αντικατασταθεί με % και η Μ2000 δεν ελέγχει το ερώτημα πριν το στείλει, για να το αλλάξει. Αν θέλουμε να βρούμε κάτι που ξεκινάει από Α θα βάλουμε Like 'A%'  ενώ αν βάλουμε >= 'Α' τότε μπορεί να πάρουμε και κάτι από Β αν λείπει όλο το Α..

12.1 Τυπική Βάση Δεδομένων


Οι τυπικές βάσεις δεδομένων που χρησιμοποιεί η M2000 είναι Access97 αλλά μπορούμε να το αλλάξουμε αυτό όπως εδώ στην Σημ 1 έχουμε την εντολή Βάση.Πάροχος. που δίνει τα απαιτούμενα στοιχεία. Επειδή κάνουμε δοκιμές και αλλάζουμε τύπο, καλό είναι να σβήσουμε το αρχείο με άμεση εντολή μέσω κονσόλας (που δεν θα ανοίξει, θα εκτελέσει απλά την εντολή).
Στο παράδειγμα φτιάχνουμε ένα αρχείο (table με την ονομασία της Access, αλλά εδώ δεν χρησιμοποιούμε τον όρο Πίνακας γιατί τον έχουμε για άλλη χρήση) με δυο στοιχεία, ένα κλειδί και ένα υπόμνημα. Το υπόμνημα δεν έχει μέγεθος, Είναι κείμενο που καταχωρούμε στο πεδίο. Την πρώτη φορά καταχωρούμε κείμενο σε τρεις γλώσσες με την εντολή Προσθήκη. Πριν όμως έχουμε δώσει μια εντολή Τάξη που ρυθμίζει ποια είναι τα κλειδιά ταξινόμησης. Η εντολή Ανάκτηση αναζητά και αν βρει μας φέρνει το πρώτο, στο σωρό, με πρώτο στοιχείο πόσες εγγραφές βρήκε με το συγκεκριμένο κριτήριο (μπορούμε αντί για όνομα πίνακα να δώσουμε SQL ερώτημα, στην θέση του ονόματος  και έχουμε κενά τα τελευταία δυο αλφαριθμητικά). Η εντολή επιστροφή χωρίς τιμές κάνει επιστροφή από κλήση με διαμέσου, αλλά με τιμές είναι η επιστροφή τιμών στην εγγραφή του πίνακα. Αν θέλουμε να παραλείψουμε κάποια τιμή (όπως εδώ δεν θέλουμε να βάλουμε πάλι το όνομα russian, τότε δεν βάζουμε τιμή και βάζουμε απλά ένα δεύτερο κόμμα.
Η βάση για να κλείσει πριν κλείσει το διερμηνευτής θέλει την Κλείσε με μονοπάτι(κατάλογο), όνομα και τύπο.

Η πρώτη εντολή αδειάζει το σωρό τιμών αν και παρακάτω χρησιμοποιούμε την Σωρός Νέος { } και απομονώνουμε τις εγγραφές πεδίων στο σωρό στο μπλοκ αυτό.

Σε αυτό το παράδειγμα φτιάχνουμε ένα μόνο αρχείο, σε μια βάση δεδομένων. Η βάση δεδομένων είναι ένα μόνο αρχείο στο δίσκο αλλά μπορεί να ενσωματώνει σε αυτό πολλά αρχεία (Tables στην SQL). (Δουλεύω την 174 αναθεώρηση, και έχω ήδη βάλει αντικείμενο Event)

Άδειασε
τυπ$=".mdb"
α$= {Американские суда находятся в международных водах.
Giời nắng hay giời mưa Bần không bao giờ quan-tâm.
Ελληνικά
}
Σημ 1 : Βάση.Πάροχος "Microsoft.ACE.OLEDB.12.0","Jet OLEDB"
\\\ αν θέλουμε να αλλάξουμε τύπο βάσης τότε καλό είναι να την διαγράψουμε
\\ χωρίς τον έλεγχο που κάνει η εντολή Βάση . Βγάζουμε τις σημειώσεις 1 και 2
Σημ 2 : Κονσόλα "Del "+Παράθεση$(κατ$+"ηΒάσηΜου1"+τυπ$);
Βάση "ηΒάσηΜου1"
Δες οκ {
      Αρχείο "ηΒάσηΜου1","UNI", "key", Κείμενο, 20, "MyMemo", Υπόμνημα, 0
      Τάξη "ηΒάσηΜου1","UNI", "key", Αύξουσα
      Προσθήκη "ηΒάσηΜου1","UNI", "russian", α$
      Σωρός Νέος {
            Ανάκτηση "ηΒάσηΜου1","UNI", 1, "key","russian"
            ΔείξεΜου()
      }
      Επιστροφή "ηΒάσηΜου1","SELECT * FROM UNI WHERE key='russian'", ,"ok"+str$(now)
      Σωρός Νέος {
            Ανάκτηση "ηΒάσηΜου1","UNI", 1, "key","russian"
            ΔείξεΜου()
      }      
}
Αν λάθος ή όχι οκ Τότε {
      Αναφορά "Δεν βρέθηκε η βάση, ή κάποιο άλλο λάθος"
      Αναφορά Λάθος$
}
\\ Στο Κλείσε Βάση πρέπει να δώσουμε όλο το μονοπάτι και τον τύπο!
Κλείσε Βάση κατ$+"ηΒάσηΜου1"+τυπ$
Ρουτίνα ΔείξεΜου()
      τοπικές Πόσα, χώρα$, αναφορά$
      Διάβασε Πόσα
            Αν Πόσα>0 τότε {
                  Διάβασε χώρα$, αναφορά$
                  Τύπωσε χώρα$
                  Αναφορά αναφορά$
            }
Τέλος Ρουτίνας



12.2 Δομή Απλής Βάσης


Υπάρχει τρόπος η Μ2000 να διαβάσει τη δομή μιας βάσης. Σε αυτό το πρόγραμμα φαίνεται και ο επιλογέας (λίστα επιλογών). Η εντολή Αρχεία με τον διακόπτη "+" στέλνει την εξαγωγή στη λίστα επιλογών. Δοκιμάστε αυτό Επιλογή "Ναι","Όχι" και μετά το Τύπωσε Επιλογή.

α=Στήλη ' κρατάμε στο α το πλάτος νοητής στήλης στην οθόνη
Τύπωσε $(0,8) ' ορίζουμε πλάτος 8
Επιλογή ' σβήνουμε την λίστα επιλογών
Αρχεία + "mdb"  ' βάζουμε στην λίστα επιλογών όλα τα αρχεία τύπου "mdb"
                          ' από τον τρέχον κατάλογο
Αν Επιλογές>0 Τότε { ' Αν υπάρχουν επιλογές στην λίστα
      Τύπωσε "Επέλεξε ένα αρχείο:";
      Επιλογή ! ' εμφάνιση της λίστας για να επιλέξουμε
      Αν Επιλογή>0 Τότε {
            ΒΑΣΗ$=Επιλογή$( Επιλογή )
            Τύπωσε Πεζ$(ΒΑΣΗ$)+".mdb"
            Τύπωσε "Δομή"
            Τύπωσε "Αρχεία:";
            Δομή ΒΑΣΗ$
            Διάβασε ΑΡΧΕΙΑ ' εδώ δεν έχουμε την εντολή ΑΡΧΕΙΑ
                     'αλλά φτιάχνουμε μια μεταβλητή με το ίδιο όνομα και δίνουμε τιμή
                     ' από τον σωρό
            Τύπωσε ΓΡΑΦΗ$(ΑΡΧΕΙΑ)
            Αν ΑΡΧΕΙΑ>0 Τότε {
                  ΓΙΑ Ι=1 Έως ΑΡΧΕΙΑ {
                        Διάβασε ΟΝΟΜΑΤΑ$, ΤΑΞΕΙΣ
                        Τύπωσε Ι,") "+ΟΝΟΜΑΤΑ$
                        Δομή ΒΑΣΗ$, ΟΝΟΜΑΤΑ$
                        Διάβασε Πεδία
                        ΤΑΞΕΙΣ=0
                        Αν Ειναρ Τότε Διάβασε ΤΑΞΕΙΣ
                                    ' Αν υπάρχει αριθμός στο σωρό και όχι λέξη τότε...
                        Αν Πεδία>0 Τότε {
                              ΓΙΑ Π=1 Έως Πεδία {
                                    Διάβασε ΠΕΡΙΓΡΑΦΗ$, ΤΥΠΟΣ$, ΜΗΚΟΣ
                                    Τύπωσε "",Π,") "+Πεδίο$(ΠΕΡΙΓΡΑΦΗ$,17),"",ΤΥΠΟΣ$, ΜΗΚΟΣ
                              }
                        }
                        Αν ΤΑΞΕΙΣ>0 Τότε {
                              Τύπωσε "","ΤΑΞΗ:"
                              Διάβασε Πεδία
                              Αν Πεδία>0 Τότε {
                                    ΓΙΑ Π=1 Έως Πεδία {
                                          Διάβασε ΠΕΡΙΓΡΑΦΗ$, ΤΥΠΟΣ$
                                          Τύπωσε "",Π,") "+Πεδίο$(ΠΕΡΙΓΡΑΦΗ$,17),"",ΤΥΠΟΣ$
                                    }
                              }
                        }
                  }
            }
      }
}
Τύπωσε $(0,α)



12.3 Ετοιμασία Βάσης με εντολή Εκτέλεσε



Υπάρχει τρόπος να δώσουμε μέσω SQL γλώσσας εντολές για να κάνουμε διάφορες εργασίες, όπως και να δημιουργήσουμε αρχεία (Tables στην ορολογία της SQL).
Έχουμε δώσει στα πεδία του πίνακα κάποιες ιδιότητες, όπως autoincrement primary key, ή NOT NULL (δεν το δέχεται άδειο)

Βάση.Πάροχος "" \\  επαναφορά στην αρχική ρύθμιση
Βάση "άλφα"  ' διαγράφει αν βρει όνομα
Εκτέλεση "άλφα", { CREATE TABLE Employees(ID autoincrement primary key,  LastName   VARCHAR(40) ,  FirstName  VARCHAR(40)  NOT NULL, MyMemo TEXT )}
Προσθήκη "άλφα","Employees",,"Γιώργος","Κύριος","Γεια χαρά από Ελλάδα"
Ανάκτηση "άλφα", "Employees", 1,"",""
Διάβασε Πόσα, Κωδ, Όνομα$, Επώνυμο$, Σημείωση$
Τύπωσε $(4, 6),  "Βάση:","άλφα"
Τύπωσε  "¨Ονοματεπώνυμο:",Επώνυμο$ + " " + Όνομα$
Τύπωσε "Σημείωση:"
Τύπωσε "",
Αναφορά Σημείωση$
Κλείσε Βάση Κατ$+"άλφα.mdb"
Τύπωσε


Οι εντολές της SQL δεν θα εξηγηθούν εδώ αλλά ας είναι γνωστό ότι περιλαμβάνουν τρόπους να διαγράψουμε στήλες ή να βάλουμε ή να διαμορφώσουμε τις τιμές τους βάσει κριτηρίων.


12.4 Χρήση της Εκτέλεσε και άλλων εντολών


Λίγα λόγια για το πρόγραμμα. Εδώ φτιάχνουμε μια βάση με πίνακες (αρχεία τα λέμε εδώ). Βάζουμε τρία αρχεία μέσα στη βάση καθώς και δύο που λέγονται Τάξεις και κρατάνε τα αρχεία ταξινομημένα. Το τρίτο αρχείο μπήκε στο κώδικα για να σβήσουμε τις εγγραφές του και να δούμε τη διαφορά στο μέγεθος του αρχείου της βάσης. Η βάση δηλαδή είναι ένα αρχείο στο δίσκο που έχεις τα δικά της αρχεία μέσα. Μπορούμε να εκτελέσουμε εντολές που δεν γυρνάνε κάτι όπως αυτήν με την Εκτέλεση,αλλά μπορούμε να δημιουργούμε με ερωτήματα πίνακες με ότι θέλουμε ακόμα και μια μόνο εγγραφή με ένα πεδίο, όπως με την εντολή Ανάκτηση και  το ερώτημα "SELECT SUM(ΠΟΣΟ) FROM ΚΙΝΗΣΕΙΣ". Οι βάσεις υποστηρίζουν Unicode.

Φόρμα 60,30
Κ$="βαση1"
Ευρώ$=Χαρκωδ$(0X20AC)
Βάση Κ$
Τύπωσε "ΕΦΤΙΑΞΑ ΝΕΑ ΒΑΣΗ "+Κ$+".mdb"
Τύπωσε "ΣΤΟΝ ΚΑΤΑΛΟΓΟ "+κατ$


\\ Φτιάχνουμε ένα αρχείο μέσα στη βάση με πεδία
Αρχείο Κ$, "ΛΟΓΑΡΙΑΣΜΟΙ", "ΚΩΔ", ΜΑΚΡΥΣ, 0, "ΤΙΤΛΟΣ", ΚΕΙΜΕΝΟ, 20, "ΠΡΟΣΗΜΟ", ΚΕΙΜΕΝΟ, 1
Αρχείο Κ$, "ΚΙΝΗΣΕΙΣ", "ΚΩΔ", ΜΑΚΡΥΣ, 0,"ΗΜΕΡΟΜΗΝΙΑ",ΛΟΓΙΣΤΙΚΟ, 0,  "ΤΥΠΟΣ", ΜΑΚΡΥΣ, 0, "ΠΟΣΟ", ΛΟΓΙΣΤΙΚΟ, 0
Αρχείο Κ$, "ΣΒΗΣΕΜΕ", "ΚΩΔ", ΜΑΚΡΥΣ, 0,"ΥΠΟΜ", ΥΠΟΜΝΗΜΑ, 0
\\ Διορθώνουμε τον ΚΩΔ για να αλλάζει μόνος του
Εκτέλεση Κ$, "ALTER TABLE [ΚΙΝΗΣΕΙΣ] ALTER COLUMN [ΚΩΔ] AUTOINCREMENT"
\\ Ορίζουμε τάξεις
Τάξη Κ$, "ΛΟΓΑΡΙΑΣΜΟΙ", "ΤΙΤΛΟΣ",ΑΥΞΟΥΣΑ
Τάξη Κ$, "ΚΙΝΗΣΕΙΣ","ΗΜΕΡΟΜΗΝΙΑ",ΑΥΞΟΥΣΑ, "ΚΩΔ", ΑΥΞΟΥΣΑ
\\ Τώρα θα βάλουμε τίτλους λογαριασμών, και αν προσθέτουν ή αφαιρούν από το ταμείο
Σωρός Νέος {
      Σειρά "ΒΕΝΖΙΝΕΣ","-","ΑΓΟΡΕΣ ΥΛΙΚΩΝ" ,"-", "ΑΤΟΜΙΚΑ", "-", "ΜΙΣΘΟΙ", "-", "ΕΞΩΤΕΡΙΚΑ", "+", "ΚΑΤΑΘΕΣΗ", "-", "ΑΝΑΛΗΨΗ", "+", "*", "*"
      Διάβασε Α$,Β$
      Κ=1
      Ενώ Α$<>"*" {
            Προσθήκη Κ$, "ΛΟΓΑΡΙΑΣΜΟΙ",Κ,Α$, Β$
            Διάβασε Α$,Β$
           Κ++
      }
}
\\ βάζω δική μου αρίθμηση
Κ--
Τύπωσε ΜΟΡΦΗ$("ΕΒΑΛΑ {0} ΛΟΓΑΡΙΑΣΜΟΥΣ", Κ)
\\ τώρα διαβάζουμε με σειρά ταξινόμησης
Για Ι=1 Έως Κ
      Σωρός Νέος {
            Ανάκτηση Κ$, "ΛΟΓΑΡΙΑΣΜΟΙ", Ι,"",""
            Διάβασε ΠΟΣΑ, ΚΩΔ, ΤΙΤ$, ΠΡΟ$
            Τύπωσε ΜΟΡΦΗ$("{0::-2} {1::-4} {2:20} {3}", Ι, ΚΩΔ, ΤΙΤ$, ΠΡΟ$)
      }
Επόμενο Ι
\\ Τώρα θα κάνουμε μερικές κινήσεις
Σωρός Νέος {
      Σειρά "12-1-2015","ΕΞΩΤΕΡΙΚΑ", 20000,"12-3-2015","ΚΑΤΑΘΕΣΗ", 3000,"14-3-2015", "ΒΕΝΖΙΝΕΣ",50.5
      Ενώ ΟΧΙ ΚΕΝΟ {
            Διάβασε ΗΜ$,ΤΥΠ$, ΠΟΣΟΝ
            ΗΜ=ΗΜΕΡΑ(ΗΜ$) \\ μετατροπή σε αριθμό
            Σωρός Νέος {
                  Αναζήτηση Κ$, "ΛΟΓΑΡΙΑΣΜΟΙ",1,"ΤΙΤΛΟΣ","=", τυπ$
                  Διάβασε ΠΟΣΑ
                  Αν ΠΟΣΑ>0 Τότε {
                        Διάβασε ΚΩΔ : Πέτα : Διάβασε ΠΡΟ$
                  } ΑΛΛΙΩΣ ΛΑΘΟΣ "ΔΕΝ ΒΡΙΣΚΩ ΤΙΤΛΟ ΛΟΓΑΡΙΑΣΜΟΥ!"
            }
            Αν ΠΡΟ$="-" Τότε ΠΟΣΟΝ-!
            Προσθήκη Κ$,"ΚΙΝΗΣΕΙΣ",, ΗΜ, ΚΩΔ, ΠΟΣΟΝ
      }
}
Τύπωσε "ΕΓΓΡΑΦΕΣ"
Σωρός Νέος {
      Ανάκτηση Κ$, "ΚΙΝΗΣΕΙΣ", 1,"",""
      Διάβασε ΠΟΣΑ
      \\ τα υπόλοιπα που βάζει η ανάκτηση στο σωρό τα πετάμε
}
Για Ι=1 Έως ΠΟΣΑ
      Σωρός Νέος {
            Ανάκτηση Κ$, "ΚΙΝΗΣΕΙΣ", Ι,"",""
            Διάβασε ΠΟΣΑ, ΚΩΔ1, ΗΜ, ΚΩΔ, ΠΟΣΟΝ
            ΤΙΤΛ$="<???>"
            Σωρός Νέος {
                  \\ μπορώ να έχω φωλιασμένους νέους σωρούς
                  Αναζήτηση Κ$, "ΛΟΓΑΡΙΑΣΜΟΙ", Ι,"ΚΩΔ","=",ΚΩΔ
                  Αν Αριθμός>0 Τότε Πέτα: Διάβασε ΤΙΤΛ$
            }
            Τύπωσε ΜΟΡΦΗ$("{0::-2} {1:10} {2:20} {3:2:-12}"+Ευρώ$, Ι, Ημέρα$(ΗΜ),ΤΙΤΛ$, ΠΟΣΟΝ)
      }
Επόμενο Ι
Ανάκτηση Κ$,"SELECT SUM(ΠΟΣΟ) FROM ΚΙΝΗΣΕΙΣ",1,"",""
Αν Αριθμός>0 Τότε Διάβασε ΠΟΣΟΝ : Τύπωσε "ΤΑΜΕΙΟ:";ΠΟΣΟΝ;Ευρώ$
Τύπωσε Αρχείου.Μήκος(Κ$+".mdb")
Για Ι=1 Έως 100 {
      Προσθήκη Κ$,"ΣΒΗΣΕΜΕ",Ι , {Κείμενο
                        Άλλη παράγραφος
                        Και άλλη
                        }
}
Τύπωσε Αρχείου.Μήκος(Κ$+".mdb")
Για Ι=1 Έως 100 {
      Αφαίρεση Κ$,"ΣΒΗΣΕΜΕ","ΚΩΔ",Ι
}
Σωρός Νέος {
      Ανάκτηση Κ$, "ΣΒΗΣΕΜΕ", 1,"",""
      Τύπωσε "Συνολικές Εγγραφές στο ΣΒΗΣΕΜΕ", Αριθμός
}
Τύπωσε Αρχείου.Μήκος(Κ$+".mdb") \\ ίδιο μήκος
Κλείσε Βάση Κατ$+Κ$+".mdb"
Συμπίεση Κ$+".mdb"
Τύπωσε Αρχείου.Μήκος(Κ$+".mdb")




Από την έκδοση 8.7 αναθεώρηση 6 η Ημερομηνία μπορεί να οριστεί ως πεδίο Ημερομηνία και θα επιστρέφεται ως αλφαριθμητικό και θα καταχωρείται ως αλφαριθμητικό (βέβαια τρέχει και το προηγούμενο πρόγραμμα). Στο πεδίο είναι αριθμός, και τις μετατροπές τις κάνει η Μ2000.
Οι αλλαγές είναι εδώ:
Αρχείο Κ$, "ΚΙΝΗΣΕΙΣ", "ΚΩΔ", ΜΑΚΡΥΣ, 0,"ΗΜΕΡΟΜΗΝΙΑ",ΗΜΕΡΟΜΗΝΙΑ, 0,  "ΤΥΠΟΣ", ΜΑΚΡΥΣ, 0, "ΠΟΣΟ", ΛΟΓΙΣΤΙΚΟ, 0

(αφαιρέθηκε η μετατροπή ημερομηνίας σε αριθμό)
Σωρός Νέος {
      Σειρά "12-1-2015", "ΕΞΩΤΕΡΙΚΑ",20000,"12-3-2015", "ΚΑΤΑΘΕΣΗ",3000, "14-3-2015","ΒΕΝΖΙΝΕΣ",50.5
      Ενώ ΟΧΙ ΚΕΝΟ {
            Διάβασε ΗΜ$,ΤΥΠ$, ΠΟΣΟΝ
            Σωρός Νέος {
                  Αναζήτηση Κ$, "ΛΟΓΑΡΙΑΣΜΟΙ",1,"ΤΙΤΛΟΣ","=", τυπ$
                  Διάβασε ΠΟΣΑ
                  Αν ΠΟΣΑ>0 Τότε {
                        Διάβασε ΚΩΔ : Πέτα : Διάβασε ΠΡΟ$
                  } ΑΛΛΙΩΣ ΛΑΘΟΣ "ΔΕΝ ΒΡΙΣΚΩ ΤΙΤΛΟ ΛΟΓΑΡΙΑΣΜΟΥ!"
            }
            Αν ΠΡΟ$="-" Τότε ΠΟΣΟΝ-!
            Προσθήκη Κ$,"ΚΙΝΗΣΕΙΣ",, ΗΜ$, ΚΩΔ, ΠΟΣΟΝ
      }
}


και εδώ διαβάζαμε το ΗΜ και δίναμε στην Τύπωσε το Ημέρα$(ΗΜ):
Για Ι=1 Έως ΠΟΣΑ
      Σωρός Νέος {
            Ανάκτηση Κ$, "ΚΙΝΗΣΕΙΣ", Ι,"",""
            Διάβασε ΠΟΣΑ, ΚΩΔ1, ΗΜ$, ΚΩΔ, ΠΟΣΟΝ
            ΤΙΤΛ$="<???>"
            Σωρός Νέος {
                  \\ μπορώ να έχω φωλιασμένους νέους σωρούς
                  Αναζήτηση Κ$, "ΛΟΓΑΡΙΑΣΜΟΙ", Ι,"ΚΩΔ","=",ΚΩΔ
                  Αν Αριθμός>0 Τότε Πέτα: Διάβασε ΤΙΤΛ$
            }
            Τύπωσε ΜΟΡΦΗ$("{0::-2} {1:10} {2:20} {3:2:-12}"+Ευρώ$, Ι, ΗΜ$,ΤΙΤΛ$, ΠΟΣΟΝ)
      }
Επόμενο Ι







Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.