Οι αναφορές φτιάχνονται εύκολα με τη χρήση της γλώσσας Firebird SQL και κάποιες εντολές της EMDI που ενσωματώνονται στα σχόλια.
Μεταβλητές που μπορείς να συμπεριλάβεις στον SQL κώδικα:
Οι παρακάτω παράμετροι χρησιμοποιούνται μέσα στην WHERE που χρησιμοποιείται για τον περιορισμό των εγγραφών που επιστρέφονται:
| :apo | Ημερομηνία από |
| :ews | Ημερομηνία εως |
| Περιγραφή αναφοράς | 1η παράμετρος από εκτέλεση accounts |
| Κωδικός αναφοράς | 2η παράμετρος από εκτέλεση accounts |
| :param1 | 3η παράμετρος από εκτέλεση accounts. Ανάμεσα σε μονά εισαγωγικά αν είναι κείμενο |
| :param2 | 4η παράμετρος από εκτέλεση accounts. Ανάμεσα σε μονά εισαγωγικά αν είναι κείμενο |
| :search | Αναζήτηση για φόρμες που είναι τσεκαρισμένη η αναζήτηση. Ανάμεσα σε μονά εισαγωγικά αν είναι κείμενο |
| :orderby | Προστίθεται αντί για την εντολή order by για ταξινόμηση |
| :loydoc | Αριθμός παραστατικού πόντων |
| :loypro | Κωδικός είδους πόντων |
| :loypay | Κωδικός είδους εξαργύρωσης |
| :orderdoc | Πρώτη συντομογραφία από το πεδίο check_copy_balance (Πωλήσεις → Ρυθμίσεις → «συσχετισμένο αντίγραφο») |
| :orderdid | Λίστα Aa τύπων παραστατικών (eidhpar) από το πεδίο check_copy_balance — για IN (:orderdid) |
| :relatedabbreviation | CASE με %ΔΠΑΡ%, %ΔΑΠΟ% κ.λπ. ανά τύπο από το πεδίο check_copy_balance· αντικαθίσταται στο Sxetika LIKE (αναφορές εκκρεμών ποσοτήτων) |
| :dm | Δεκαδικά αξίας μονάδων |
| :ds | Δεκαδικά αξίας συνόλων |
| :df | Δεκαδικά αξίας ποσοστών |
| :dp | Δεκαδικά αξίας ποσοτήτων |
| –nodecimals– | Απεριόριστα δεκαδικά |
| –combo– | Αναπτυσσόμενη λίστα |
Συσχετισμένο αντίγραφο
Στις Ρυθμίσεις, Αγορές/Πωλήσεις στο πεδίο «συσχετισμένο αντίγραφο», καταχωρείς τις συντομογραφίες των τύπων παραστατικών που παρακολουθείς, χωρισμένες με κόμμα (π.χ. ΔΠΑΡ,ΔΑΠΟ). Αν ο SQL κώδικας της αναφοράς περιέχει μία από τις μεταβλητές :orderdoc, :orderdid ή :relatedabbreviation, η EMDI τις αντικαθιστά αυτόματα βάσει:
| :orderdoc | η πρώτη συντομογραφία της λίστας. Σε παλαιότερες αναφορές (π.χ. «02.Παραγγελίες») χρησιμοποιείται στο LIKE του Sxetika με μορφή '%:orderdoc%' |
| :orderdid | οι κωδικοί Aa (eidhpar) όλων των τύπων της λίστας· βάλε IN (:orderdid) στο WHERE |
| :relatedabbreviation | έκφραση CASE ανά τύπο (π.χ. %ΔΠΑΡ% ή %ΔΑΠΟ%)· απαραίτητη όταν έχεις πάνω από έναν τύπο, ώστε κάθε παραστατικό να ψάχνει μόνο τη δική του συντομογραφία στο Sxetika |
Παράδειγμα στο LIKE του Sxetika (πολλαπλοί τύποι):
|
1 |
and (pvl."Sxetika" || ',') like :relatedabbreviation || coalesce("pvlhseis"."Seira", '') || '#' || "pvlhseis"."Ariumospar" || ',%' |
Για αναφορές εκκρεμών ποσοτήτων (π.χ. «02.Εκκρεμή είδη προς έκδοση») χρησιμοποίησε και τις τρεις μεταβλητές. Εμφανίζονται μόνο γραμμές με υπόλοιπο > 0 από παραγγελίες ή δελτία αποστολής χωρίς τιμές· δελτία αποστολής με εμφάνιση τιμών δεν συμπεριλαμβάνονται.
Για παράδειγμα με το :search μπορούμε να βάλουμε μια συνθήκη στο where ώστε να κάνει πολλαπλή αναζήτηση στην περιγραφή προϊόντος:
|
1 |
and "grammes"."PerigrafhEidoys" similar to ':search' |
Πεδία στον SQL κώδικα
Τα παρακάτω aliases χρησιμοποιούνται μέσα στην εντολή SELECT που χρησιμοποιείται για την επιστροφή δεδομένων στον καλούντα:
| doc | Ο αριθμός γραμμής πώλησης “Aa” (δημιουργία κουμπιού που ανοίγει το αντίστοιχο παραστατικό στις πωλήσεις) |
| cus | Ο αριθμός γραμμής πελάτη “Aa” (δημιουργία κουμπιού που ανοίγει τον αντίστοιχο πελάτη στο πελατολόγιο) |
| pro | Ο αριθμός γραμμής προϊόντος “Aa” (δημιουργία κουμπιού που ανοίγει το αντίστοιχο είδος στην αποθήκη) |
| prd | Ο αριθμός γραμμής προϊόντος “Aa” (δημιουργία κουμπιού που ανοίγει τα παραστατικά του αντίστοιχου είδους στην αποθήκη) |
| ksq | Το αποτέλεσμά της χρησιμοποιείται στο script ενημέρωσης (δημιουργία κουμπιού που ανοίγει editor για επεξεργασία δεδομένων) |
| eml | Το e-mail για αποστολή|Όνομα|Αξία|Σύνδεσμος e-invoice|Αριθμός voucher (δημιουργία κουμπιού που στέλνει e-mail) |
| sms | Το κινητό για αποστολή|Όνομα|Αξία|Σύνδεσμος e-invoice|Αριθμός voucher (δημιουργία κουμπιού που στέλνει sms) |
| img | Εμφάνιση φωτογραφίας |
| NEXT VALUE FOR “gen_counter” | Ο αριθμός γραμμής |
Script ενημέρωσης
| :ksq | Τιμή που εκτελείται στο κώδικα με εισαγωγικά |
| :ksp | Τιμή που εκτελείται στο κώδικα χωρίς εισαγωγικά |
Υπάρχει δυνατότητα εκτέλεσης μέχρι 2 script χωρισμένα με ερωτηματικό “;”.
Στο παράδειγμα 1, μπορούμε να επεξεργαστούμε και να αποθηκεύσουμε τα πεδία του επιλεγμένου πελάτη. Σημαντικό είναι ότι πρέπει πάντα να συμπεριλαμβάνεται ένα πεδίο κλειδί που θα ονομάζεται “Aa” (εδώ συμπεριλαμβάνεται λόγω του *).
Παράδειγμα 1:
|
1 |
select * from "pelates" where "Kvdikos"=:ksq |
Στο παράδειγμα 2, αποτελείται από 2 scripts. Πρώτα δημιουργείται μια νέα γραμμή, αν δεν υπάρχει ήδη, στο πίνακα “kinhseis” και μετά επιλέγουμε να φανούν από τον ίδιο πίνακα 2 πεδία, “Order stage” και “Notes”. Χρησιμοποιούμε και σε αυτή τη περίπτωση το πεδίο κλειδί ως “Aa” (“kinhseis”.”Grammh”).
Παράδειγμα 2:
|
1 2 |
UPDATE OR INSERT INTO "kinhseis" ("kinhseis"."Grammh","kinhseis"."aapar") values (:ksq,(select first 1 "grammes"."Aapar" from "grammes" where "grammes"."Aa"=:ksq)); select "kinhseis"."Uesh" "Order stage","kinhseis"."Grammh" "Aa","kinhseis"."custom1" "Notes" from "kinhseis" where "kinhseis"."Grammh"=:ksq |
Στο παράδειγμα 3, επεξεργαζόμαστε και αποθηκεύουμε το “custom1” πεδίο του επιλεγμένου παραστατικού. Εδώ το πεδίο κλειδί είναι το “pvlhseis”.”Aa” και “Status” ο τίτλος που έχουμε βάλει για το πεδίο στο παράθυρο επεξεργασίας.
Παράδειγμα 3:
|
1 |
SELECT "Aa","custom1" "Status" FROM "pvlhseis" WHERE "pvlhseis"."Aa"=:ksq |
Αν ορισθεί ερώτημα με update ως πρώτο, τότε εκτελείται πριν την επιλογή του χρήστη. Σε περίπτωση που ορισθεί δεύτερο, τότε εφαρμόζεται μετά την επιλογή του χρήστη.
Άνοιγμα εξωτερικής εφαρμογής
Το “πεδίο επεξεργασίας” το χρησιμοποιούμε για να ορίσουμε μια λίστα επιλογών σε πεδίο που επιθυμούμε.
Στο “επιλογές πεδίου” γράφουμε χωρισμένες με κόμμα τις επιλογές που θέλουμε να έχει η λίστα. Δεν είναι υποχρεωτικό.
Το “πεδίο ανάγνωσης” το χρησιμοποιούμε για να λαμβάνουμε τα περιεχόμενα ενός πεδίου της επιλογής μας. Δεν είναι υποχρεωτικό.
Χρησιμοποιώντας το πεδίο του “συνδέσμου” μπορούμε να καλούμε μια εξωτερική εφαρμογή.
Όταν ο σύνδεσμος καλεί διεύθυνση διαδικτύου χρησιμοποιούμε τις μεταβλητές:
| #VL1 | πεδίο επεξεργασίας |
| #VL2 | πεδίο ανάγνωσης |
Για παράδειγμα:
|
1 |
https://www.mysite.com/myscript.php?number=#VL1&id=#VL2 |
Σε περίπτωση που καλούμε κάποιο τοπικό πρόγραμμα δεν χρειάζεται να χρησιμοποιήσουμε μεταβλητές γιατί ορίζονται σαν 1η και 2η παράμετρο αντίστοιχα.
Για παράδειγμα:
|
1 |
C:\Program Files (x86)\company\mysoftware.exe |
Εντολές της EMDI
Η πρώτη γραμμή μπορεί να περιλαμβάνει κάποιες εντολές της EMDI σαν σχόλιο της SQL και δημιουργείται αυτόματα κάθε φορά που κάνεις κάποια αλλαγή.
|
1 |
--search-searchtitle-asearch-searchtitle-graph x-xx-graph y-yy-graph labels-xxlabel-from-fromvalue-to-tovalue-step-stepvalue |
Περιλαμβάνει όλες τις ρυθμίσεις που κάνουμε για μια αναφορά.
Για παράδειγμα, αν θέλεις να δημιουργήσεις γράφημα, τότε συμπληρώνεις όπου xx το πεδίο για τον άξονα x, yy το πεδίο για τον άξονα y και xxlabel το πεδίο για τον τίτλο του άξονα x.
Για αρίθμηση γραμμών χρησιμοποιούμε τη παρακάτω μεταβλητή μετά το select:
|
1 2 |
select NEXT VALUE FOR "gen_counter" AS "Row #", ... |
Χρώματα
Για να δώσουμε χρώμα έχουμε δυνατότητα να ορίσουμε μια μεταβλητή που παίρνει κάποιες τιμές (μέχρι 9) χωρισμένες με κόμμα π.χ.:
1,22,2,45,3,90,3,111,9
Το χρώμα που παίρνει η γραμμή αντίστοιχα είναι:
κίτρινο,κόκκινο,πράσινο,κίτρινο,κόκκινο,πράσινο,κίτρινο,κόκκινο,πράσινο
Αναπτυσσόμενη λίστα
Υπάρχει η δυνατότητα να ενεργοποιήσουμε μία λίστα με επιλογές. Η κάθε επιλογή εισάγει ένα κώδικα στη μεταβλητή –combo–, που τον διαβάζει από αντίστοιχο αρχείο με κατάληξη psql.
Στο παρακάτω παράδειγμα δημιουργούμε 2 επιλογές, DELIVERY και RESERVED
|
1 |
sql1.psql|DELIVERY,sql2.psql|RESERVED |
Όταν ο χρήστης επιλέγει DELIVERY τότε το περιεχόμενο του αρχείου sql1.psql εισάγεται στη θέση της μεταβλητής –combo–.
Παράδειγμα αρχείου psql
|
1 |
where "color"=2 |
ή οποιοσδήποτε κώδικας sql που θέλουμε να συνδυαστεί με το κύριο κώδικά μας.
Τα αρχεία psql τα αποθηκεύουμε στον ίδιο φάκελο με τις αναφορές.
Δικαιώματα
Μπορούμε να ορίσουμε ποιοί χρήστες, βάσει δικαιωμάτων μπορούν να εκτελέσουν μια αναφορά. Στο πεδίο “Δικαιώματα” γράφουμε τον τίτλος δικαιωμάτων που ανήκουν οι χρήστες που θα έχουν πρόσβαση στην αναφορά.
Για πολλούς τίτλους χωρίζουμε με κόμμα.
Κενό πεδίο για κανένα περιορισμό.
Πρόσθετες λειτουργίες στην SQL (functions)
Λήψη πεδίου από κείμενο διαχωρισμένο:
|
1 |
SPLIT_STRING('test1;test2;test3',';',2) |
Αποτέλεσμα: test2
Μετατροπή κειμένου σε αριθμό με δεκαδικά
|
1 |
STRING_TO_FLOAT('152,33') |
Αποτέλεσμα: 152,33
|
1 |
STRING_TO_FLOAT('152.33') |
Αποτέλεσμα: 152,33
Μετατροπή κειμένου σε αριθμό χωρίς δεκαδικά
|
1 |
STRING_TO_INTEGER('152,33') |
Αποτέλεσμα: <null>
|
1 |
STRING_TO_FLOAT('152.33') |
Αποτέλεσμα: 152
* Σημείωση: Για εκτέλεση πολλαπλών queries βάζουμε στην αρχή του κώδικα:
|
1 |
--## |
