---
title: "Σχεδιασμός φορμών εκτύπωσης"
canonical: "https://wiki.soft1.eu/space/ATEL/182091926/%CE%A3%CF%87%CE%B5%CE%B4%CE%B9%CE%B1%CF%83%CE%BC%CF%8C%CF%82%20%CF%86%CE%BF%CF%81%CE%BC%CF%8E%CE%BD%20%CE%B5%CE%BA%CF%84%CF%8D%CF%80%CF%89%CF%83%CE%B7%CF%82"
format: markdown
---
Περιεχόμενα Εισαγωγή   Θέση των Φορμών στην εφαρμογή Atlantis Εκτυπωτές Βήματα Δημιουργίας μίας Φόρμας   Δομή   Script   Escape Sequences  Laser Printers & Φόρμες  Σχόλια - Εμφάνιση στοιχείων υπό συνθήκη  Λοιπά   Πεδία   Διαθέσιμες Συναρτήσεις   Κατηγορία Φόρμας   Αριθμός σελίδας PageNo Αριθμός γραμμής LineNo  Πλήθος σελίδων TotPages και LastPageNo  Αριθμός αντιγράφου CopyNo  Σημερινή ημερομηνία  Ώρα εκτύπωσης  StrUniParam()  NumUniParam() Κατηγορία Μετατροπής   Σε αλφαριθμητικό STRING()  Σε πραγματικό NUMBER()  Σε ακέραιο INTEGER()  Σε αλφαριθμητικό (Όχι μηδέν) NZSTRING()  Σε ημερομηνία(αλφαριθμ.) DATETOSTR()  Τοπικό νόμισμα σε EURO LOCALTOEURO()  EURO σε τοπικό νόμισμα EUROTOLOCAL( ) Κατηγορία Διάφορες Έλεγχος μάσκας Mask( ) Περιλαμβάνεται INCLUDES( ) Μέγιστη τιμή MAX( ) Τμήμα COPY( ) Αντιστοίχιση CASE( ) Εύρεση θέσης POS( ) Ώρα (τωρινή) CURTIME Συνθήκη IF( )  Μήκος LENGTH( )  Ολογράφως SPELL( ) Ολογράφως SPELLDEC( )  Άθροισμα SUM( ) LOOKUP( )  DMFIELD( )  DMFIELDLOC( )  FLINEV( )  LNLOOPSUM( )  GETQUERY( )  Ακέραιο μέρος TRUNC( )  Στρογγυλοποίηση ROUND( )  PLV( ) Αντιστοίχιση CaseOf()  SumUp()  SumOf()  LogCompanyField()  LogUserField()  LogBranchField()  Ελάχιστη τιμή Min()  IsNull()  Στοιχεία τιμ. πολιτικής GetPrPolicyData()  Σχετικά παραστατικά RELATIVS  Ημερομηνία σχετικών παραστατικών RELATIVSDATE  Σχετικά παραστατικά αναλυτικά RELATIVSFULL() Εισαγωγή Αλφαριθμητικού INPUTSTRING()  Εισαγωγή Αριθμoύ INPUTNUMBER() Εισαγωγή Ημερομηνίας INPUTDATE() Χωροθέτηση σήμανσης Tax Agent TAXAGENTSIG()  Κείμενο που δεν θα εκτυπωθεί NOPRINT() Άλλες Δυνατότητες & Χρήσιμα Παραδείγματα Κλήση Πεδίων από Διάφορα Κυκλώματα   Κλήση πεδίων πινάκων, διαθέσιμα ανά κύκλωμα Ανάλυση Φ.Π.Α   Απαλοιφή Μηδενικών – ΝΖSTRING( )   Οι εντολές filter και formulaflt Υποστήριξη Εγγυοδοσίας Απαλοιφή Γραμμής Φ.Π.Α Directives   Χρώμα / Μέγεθος   Ανάλυση  Γραμμές παραστατικού  Συμπύκνωση Κωδικών Ειδών Φορολογικοί Εκτυπωτές   Σχεδιασμός Φόρμας με Προκαθορισμένη Συμπεριφορά  Σχεδιασμός Φόρμας με Συμπεριφορά Οριζόμενη από το Χρήστη Εισαγωγή Το παρόν έγγραφο περιέχει οδηγίες σχετικά με την κατασκευή φορμών Atlantis. Με τον όρο αυτό χαρακτηρίζονται οι εκτυπώσεις οι οποίες προορίζονται κυρίως για εκτυπωτές dot-matrix (όπως πχ. Παραστατικά πωλήσεων, δελτία αποστολής, αποδείξεις είσπραξης κ.τ.λ.) και για τις οποίες δίνεται το προτυπωμένο χαρτί.  Για να φτιάξει κανείς μία φόρμα χρειάζεται: Να έχει γνώση της δομής και των objects της βάσης (πχ tables, views) Να έχει γνώσεις SQL Να έχει το manual του εκτυπωτή στον οποίο θα εκτυπωθεί η φόρμα. Το manual πρέπει οπωσδήποτε να περιέχει τα  escape   sequences  του εκτυπωτή (ή αλλιώς τα control codes) Να έχει στη διάθεσή του τον εκτυπωτή (ή μοντέλο εκτυπωτή που να ακολουθεί ή να μπορεί να προσομοιώσει τον αυθεντικό εκτυπωτή) Nα έχει στη διάθεσή του δοκιμαστικό χαρτί, ΙΔΙΟ με αυτό που θα χρησιμοποιηθεί στην πράξη. Από τα παραπάνω συμπεραίνει κανείς εύκολα πως: Μία φόρμα atlantis φτιάχνεται ειδικά για κάποιον εκτυπωτή Μία φόρμα atlantis δεν θα τρέξει σωστά αν αλλαχθεί ο αυθεντικός εκτυπωτής με εκτυπωτή άλλης εταιρίας, ή αν αλλαχθεί με μοντέλο πολύ διαφορετικό από αυτό του αυθεντικού. Θέση των Φορμών στην εφαρμογή Atlantis Για να κατασκευαστούν ή να αλλαχθούν τα στοιχεία μίας φόρμας ο χρήστης μεταβαίνει στα μενού της εφαρμογής όπως φαίνεται παρακάτω:  *Ενότητες->Οργάνωση Λειτουργίας ->Σχεδιασμός Συναλλαγών ->Φόρμες Παραστατικών*   Κάθε μία φόρμα μπορεί να συσχετιστεί με μία σειρά. Αυτό γίνεται από τις σειρές στα εξής σημεία:  *Ενότητες ->Οργάνωση Λειτουργίας ->Σχεδιασμός Συναλλαγών ->Σειρές αρίθμησης παραστατικών ->Επιλογή Κυκλώματος / Επιλογή Σειράς* Στη θέση  Φόρμα εκτύπωσης  ο χρήστης επιλέγει τη φόρμα που θα εκτυπώνεται για τα παραστατικά της συγκεκριμένης σειράς. Στη θέση  Αριθμός αντιγράφων  ο χρήστης πληκτρολογεί το πλήθος των αντιγράφων της εκτύπωσης που θέλει να βγαίνουν. Στη θέση  εκτυπωτής , επιλέγει τον εκτυπωτή ο οποίος θα εκτυπώνει το παραστατικό της συγκεκριμένης σειράς. (βλ. Παρακάτω για τις δυνατές περιπτώσεις επιλογής εκτυπωτών). Οι επιλογές 437 και 928 αφορούν το  Code   Paging  (σειρές χαρακτήρων) του εκτυπωτή. (Συνήθως είναι 928). Στη θέση  Εκτύπωση κατά την καταχώρηση , ερωτάται για το αν επιθυμεί η εκτύπωση της φόρμας του παραστατικού να γίνεται αμέσως μετά την καταχώρηση του παραστατικού ή αν θέλει να εμφανίζεται μήνυμα επιβεβαίωσης εκτύπωσης. Εκτυπωτές Γενικά, όσον αφορά τους εκτυπωτές που θα εκτυπώσουν το παραστατικό έχουμε τις εξής δυνατότητες: Ο χρήστης ορίζει εκτυπωτές για το μηχάνημά του ανά σειρά παραστατικού.           Ενότητες ->Οργάνωση Λειτουργίας ->Σχεδιασμός συναλλαγών ->Εκτυπωτές Παραστατικών ανά σταθμό εργασίας{*} . Αν δεν έχει οριστεί εκτυπωτής ανά σταθμό εργασίας, τότε από τη θέση  εκτυπωτής , στη μεταβολή σειράς, ο χρήστης επιλέγει τον εκτυπωτή ο οποίος θα εκτυπώνει το παραστατικό της συγκεκριμένης σειράς. Αυτή η επιλογή είναι πιο γενική και αφορά όλους τους σταθμούς εργασίας. Προσοχή! Σε αυτήν την περίπτωση όλοι οι σταθμοί εργασίας θα πρέπει να έχουν δηλώσει τους εκτυπωτές που βλέπουν με τα ίδια ακριβώς ονόματα! Αν δεν έχει δηλωθεί εκτυπωτής ούτε ανά σταθμός εργασίας, ούτε ανά σειρά, τότε το παραστατικό θα εκτυπωθεί σε εκτυπωτή που έχει οριστεί by default από τη θέση:  Ενότητες ->Οργάνωση Λειτουργίας ->Γενικές Παράμετροι ->Παράμετροι Σταθμού Εργασίας{*} , όπου ορίζεται ο default εκτυπωτής για draft και για γραφικά. Σημείωση Τα παραδείγματα που υπάρχουν σε αυτό το manual έχουν γίνει για εκτυπωτή ΟΚΙ ΜΙCROLINE 520 ELITE, o οποίος με drivers Oki ML 520 Elite (Microline), ή Oki ML 590 Elite Βήματα Δημιουργίας μίας Φόρμας Σε γενικές γραμμές για να κατασκευαστεί μία φόρμα θα πρέπει: Να ορίσει ο χρήστης τα πεδία που θα συμμετάσχουν στην εκτύπωση είτε αυτά εμφανίζονται είτε είναι βοηθητικά  (βλ. Παράγραφο 3.3. Πεδία). Να τοποθετήσει τα πεδία σε κατάλληλες θέσεις μέσα στη φόρμα  (βλ. Παράγραφο 3.1 Script). Να προσδιορίσει τα αναγνωριστικά (ταυτότητα) της εκτύπωσης  (βλ. Παράγραφο 3.2 Λοιπά). Να συνδέσει τη φόρμα με τη σειρά. Δομή Script Σε αυτή τη σελίδα καθορίζεται το layout της φόρμας. Κάθε πεδίο δηλώνεται με το πρόθεμα @, ενώ ο ορισμός των πεδίων γίνεται στη σελίδα Πεδία ( βλ. Παράγραφο 3.3 ). Κάθε φόρμα χωρίζεται σε έξι μέρη τα οποία διαχωρίζονται μεταξύ τους με το σύμβολο της δίεσης  #  και τα οποία είναι: 1 ο  Μέρος: Σταθερά στοιχεία παραστατικού – Επικεφαλίδα (header) Στο επάνω μέρος της φόρμας (header) καθορίζονται τα στοιχεία εκείνα που θα εκτυπώνονται στο επάνω μέρος του παραστατικού. Σε περίπτωση που για την εκτύπωση του παραστατικού απαιτούνται περισσότερες από μία σελίδες, ο χρήστης μπορεί, είτε να καθορίσει να εκτυπώνονται και στις επόμενες σελίδες τα ίδια ή να χρησιμοποιήσει το τέταρτο μέρος της φόρμας για να ορίσει άλλα στοιχεία. 2 ο   Μέρος: Στοιχεία γραμμών παραστατικού (repeated lines -details) Στο σημείο αυτό της φόρμας ορίζονται τα πεδία των επαναλαμβανόμενων γραμμών του παραστατικού. Ο αριθμός των επαναλαμβανόμενων γραμμών που θα εκτυπώνονται σε κάθε σελίδα ορίζεται στη δεύτερη σελίδα στο πεδίο "Επαναλαμβανόμενες γραμμές". 3 ο  Μέρος: Σύνολα παραστατικού (footer - totals) Στο σημείο αυτό ορίζονται τα πεδία που θα εμφανίζουν τα σύνολα του παραστατικού, δηλαδή συνολική αξία, ποσότητα, πληρωτέο κλπ. Σε περίπτωση που το παραστατικό εκτυπώνεται σε περισσότερες από μία σελίδες, τα σύνολα θα εμφανιστούν στο κάτω μέρος της τελευταίας σελίδας. 4 ο   Μέρος: Εναλλακτικό header Στο σημείο αυτό ορίζονται τα στοιχεία που θα εκτυπώνονται στο επάνω μέρος των σελίδων εάν το παραστατικό εκτυπώνεται σε περισσότερες από μια σελίδες.  5 ο   Μέρος: Εναλλακτικό footer Στο σημείο αυτό ορίζονται τα στοιχεία που θα εκτυπώνονται στο κάτω μέρος των σελίδων εάν το παραστατικό καταλαμβάνει περισσότερες από μια σελίδες. 6 ο   Μέρος: Ανάλυση σύνθετων ειδών στα συστατικά τους Σε αυτό το μέρος ο χρήστης μπορεί να παρατάξει και να επιλέξει από τα πεδία που είναι διαθέσιμα σαν γραμμές συστατικών. Εφόσον επιθυμεί να υπάρχει αυτό το μέρος είναι υποχρεωτικό να υπάρχουν και όλα τα προηγούμενα.  Τα μέρη 1, 2 και 3 πρέπει υποχρεωτικά να υπάρχουν στη φόρμα ενώ το τέταρτο και πέμπτο μέρος εκτυπώνονται μόνο εάν το παραστατικό καταλαμβάνει περισσότερες από μια σελίδες, ή αν υπάρχει και το έκτο μέρος. Line και Column   Τα πεδία αυτά εμφανίζουν τις συντεταγμένες του σημείου όπου βρίσκεται ο cursor.  Όπως φαίνεται και στην παραπάνω εικόνα, εκτός από τα διαχωριστικά μέρη, και τα πεδία, μέσα στο script μπορούν να εισαχθούν και αυτούσια λεκτικά, τα οποία παραμένουν σταθερά στην θέση στην οποία τοποθετούνται. Το ίδιο συμβαίνει και με τις κενές γραμμές. Escape Sequences Τα  Escape   Sequences  αποτελούν μία σειρά εντολών που δίνονται σε γλώσσα εκτυπωτή κατευθείαν στον εκτυπωτή που χρησιμοποιείται για τη φόρμα. Προκειμένου να περάσει ο χρήστης μία τέτοια εντολή χρησιμοποιεί την εξής σύνταξη: Esc( κωδικοί που περιέχονται στο manual του εκτυπωτή στο δεκαδικό σύστημα, διαχωρισμένοι με κόμμα ) Οι περισσότεροι εκτυπωτές είναι παραμετροποιημένοι είτε σε EPSON mode, είτε σε IBM mode. Στα manuals των εκτυπωτών δίνονται για κάθε mode διαφορετικά escape sequences, καθώς επίσης και escape sequences τα οποία είναι κοινά και στα δύο mode. Προς αποφυγή αλλαγής του mode του εκτυπωτή,  προτείνεται να χρησιμοποιούνται πάντα escape   sequences που είναι κοινά και σε EPSON και σε IBM   mode . Αν παρά ταύτα ο χρήστης επιλέξει σταθερά ένα mode για τον εκτυπωτή του, τότε μπορεί να χρησιμοποιήσει και οποιαδήποτε άλλα escape sequences που αναφέρονται στο συγκεκριμένο mode. Μερικά από τα πιο συνήθη escape sequences είναι τα παρακάτω: Περιγραφή Esc Σχόλια compressed printing (17cpi) 15 μήκος της φόρμας σε γραμμές 27,67,n (Epson: n=1 to 127 IBM :n=1 to 255) καθαρισμός όλων των settings (Reset) 27,64 καλό θα είναι να χρησιμοποιείται στην αρχή κάθε μέρους # Expanded ή double width printing 27,87,n n=0:end double width printing,   n=1:begin double width printing) Expand printing for only one line 14 Πχ. Για την πρώτη γραμμή του header Περιγραφή Σχόλια - Παραδείγματα BOLD #BOLD ITAL (μόνο   για Epson mode) #ITAL COND #COND COLOREXPAND=1 # COLOREXPAND=1 Συμπύκνωση   κωδικών   ειδών #COMPACTITEMS=1 Συνδυασμός των παραπάνω #COND,BOLD   #BOLD,ITAL,COND Συνδυασμός   με escape sequences #BOLD,ITAL, esc(15,27,67,66) Τα  Escape   Sequences  τοποθετούνται στην αρχή κάθε μέρους, μετά τη δίεση # , σε ένα μόνο esc(..). Θα πρέπει κανείς να θυμάται πως τα escape sequences ισχύουν και επηρεάζουν τον εκτυπωτή από τη στιγμή που θα δηλωθούν μέχρι τη στιγμή που θα αναιρεθούν από ένα άλλο κατάλληλο escape sequence ή μέχρι να κλείσουμε το ρεύμα του εκτυπωτή. Επίσης, με τo escape sequence Reset, τα settings καθαρίζονται και επανέρχονται εκείνα που είναι ενεργά όταν ανοίγει ο εκτυπωτής. Εκτός από τα αριθμητικά escape sequences, η εφαρμογή αναγνωρίζει και τα εξής λεκτικά, τα οποία μπορούν να χρησιμοποιηθούν σε συνδυασμό με τα escape sequences. Αν δεν οριστούν εσωτερικά στη φόρμα τα βασικά escape sequences του εκτυπωτή τότε θα πρέπει αυτά να οριστούν πάνω στον εκτυπωτή σύμφωνα με τις οδηγίες που περιέχονται στο εγχειρίδιό του. Στα παραδείγματα που υπάρχουν σε αυτό το έγγραφο υποθέτουμε ότι ο χρήστης έχει παραμετροποιήσει τον εκτυπωτή με τα εξής χαρακτηριστικά: Printer Control Emulation Mode EPSON FX Font Print Mode Utility Pitch 17 CPI Proportional Spacing No Style Normal Size Single Symbol Sets Character Set Set II Language Set ASCII Zero Character Unslashed Code Page Greek_928 Slashed Letter 0 No Rear Feed Line Spacing 6 LPI Form Tear-Off Off Skip Over Perforation No Page Length 11 " Gap Control Semi Auto Gap Bottom Feed Line Spacing 6 LPI Form Tear-Off Off Skip Over Perforation No Page Length 11 " Gap Control Semi Auto Gap Top Feed Line Spacing 6 LPI Bottom Margin Valid Page Length 11 " Gap Control Auto Gap Wait Time 1 sec Page Length Control By MENU setting Set-Up Graphics Bi-directional Receive Buffer Size 64 k Paper Out Override No Print Registration 0 Operator Panel Function Full Operation Reset Inhibit No Print Suppress Effective Yes Auto LF No Time out Print Valid Auto Select No Ribbon Selection Black Ribbon Printhead Gap Adjust 0 Centering Position DEFAULT Parallel I/F I-Prime Buffer Print Pin 18 +5v Auto Feed XT Invalid Laser Printers & Φόρμες Η εφαρμογή δίνει τη δυνατότητα εκτύπωσης σε laser printers, με τη διαφορά ότι υποστηρίζει μόνο εκτυπώσεις σε Courier 12. Όταν ο χρήστης επιθυμεί να εκτυπώσει μία φόρμα σε laser printer δεν θα πρέπει να δίνονται escape sequences. Tα settings του εκτυπωτή προκύπτουν από το driver που χρησιμοποιείται. Σχόλια - Εμφάνιση στοιχείων υπό συνθήκη Υπάρχει η δυνατότητα να προσθέσει ο χρήστης σχόλια στο Script τα οποία δεν θα εμφανιστούν κατά την εκτύπωση ενός παραστατικού με τη συγκεκριμένη φόρμα καθώς επίσης και να επιλέξει αν θα εμφανιστεί ένα πλήθος γραμμών του script σύμφωνα με κάποια συνθήκη. Η δυνατότητα αυτή μας δίνεται με τη χρήση της δομής: {\[showif(συνθήκη)\] ……σχόλια ή πλήθος γραμμών υπό συνθήκη *(1)* \} Τα άγκιστρα \{\} πρέπει να βρίσκονται στην αρχή κάθε γραμμής και σε ξεχωριστή γραμμή το καθένα. Αν θέλει να εισάγει σχόλια στο script που έχει σχεδιάσει, τοποθετεί τα άγκιστρα και εισάγει σε ενδιάμεσες γραμμές τα σχόλια. Παράδειγμα { ένα σχόλιο…. } Αν ο χρήστης επιθυμεί να εμφανίζεται ένα συγκεκριμένο σύνολο γραμμών του script μόνο όταν ισχύει μια συνθήκη, τότε: εισάγει το αριστερό άγκιστρο { στην αρχή μιας γραμμής ακολουθούμενο από τη συνθήκη, στις επόμενες γραμμές τοποθετεί τα στοιχεία που θέλει να εμφανιστούν (λεκτικά, πεδία) και σε επόμενη καινούρια γραμμή τοποθετεί το δεξιό άγκιστρο }. Η εμφάνιση του τμήματος που περικλείεται μεταξύ των αγκίστρων θα γίνεται μόνο όταν η συνθήκη είναι αληθής. Παράδειγμα {showif(ITEID=1000) Κωδικός @90 Περιγραφή @100 } Η δομή αυτή είναι ιδιαίτερα χρήσιμη όταν ο χρήστης επιθυμεί να εμφανίζονται τίτλοι για το Τμήμα 6 μόνο στην περίπτωση που εκτυπώνεται το Τμήμα 6 για κάθε γραμμή παραστατικού. Για να το επιτύχει, τοποθετεί τη δομή με την μορφή που επιθυμεί στο Τμήμα 2 με την κατάλληλη συνθήκη. Παράδειγμα {showif(MTRMODE/4.0 >=1) Χρώμα @100 @110 @120 @130} Τα πεδία με αριθμούς γραμμής 100,110, 120, 130 αντιστοιχούν στα διαθέσιμα μεγέθη του είδους της γραμμής του παραστατικού. Η συγκεκριμένη δομή μπορεί να έχει και μια πιο σύνθετη μορφή: Μπορούν δηλαδή να ενσωματωθούν δομές της μορφής (1) μέσα σε άλλες δομές της ίδιας μορφής. Λοιπά Κωδικός Στο πεδίο αυτό εισάγεται ο μοναδικός κωδικός της φόρμας. Το πεδίο είναι απαραίτητο για την καταχώριση της φόρμας. Ονομασία φόρμας Αλφαριθμητικό πεδίο όπου εισάγεται η περιγραφή της φόρμας εκτύπωσης. Το πεδίο είναι απαραίτητο για την καταχώριση της φόρμας. Επαναλαμβανόμενες γραμμές Στο πεδίο αυτό καθορίζονται πόσες γραμμές θα χρησιμοποιούνται για την εκτύπωση των γραμμών του παραστατικού σε κάθε σελίδα. Σε περίπτωση που ο αριθμός των γραμμών που εισάγονται εδώ δεν επαρκεί, το παραστατικό θα εκτυπωθεί σε περισσότερες σελίδες. Αν ο χρήστης πληκτρολογήσει την τιμή 0 (μηδέν) τότε θα εμφανιστεί το Header, details, footer συνεχόμενα, χωρίς σελιδοποίηση.  Αυτόματη προώθηση σελίδας : ( στο σημείο αυτό υπάρχουν τρεις επιλογές ) Αν τσεκάρει ο χρήστης αυτήν την επιλογή, τότε η φόρμα αναγνωρίζει ως μήκος σελίδας, το μήκος του χαρτιού που ορίζεται στον driver του εκτυπωτή, άσχετα με το αν υπάρχουν escape sequences ή όχι. Βάσει αυτού του μήκους, γίνεται αυτόματη προώθηση σελίδας (form feed). Αν δεν τσεκάρει αυτήν την επιλογή και έχει ορίσει το esc sequence για το μήκος της σελίδας σε γραμμές esc(27,67,n) τότε το χαρτί θα προωθείται αυτόματα κάθε n γραμμές. Αν δεν τσεκάρει αυτήν την επιλογή και δεν έχει ορίσει το esc sequence για το μήκος της σελίδας, τότε θα ισχύουν τα settings του εκτυπωτή για το μήκος σελίδας και το form feed, όποια και να είναι αυτά. Προσοχή! Ο χρήστης θα πρέπει πάντα να κάνει τις δοκιμές μας σε χαρτί που θα χρησιμοποιηθεί στην πράξη! Πεδία @ Στο πεδίο αυτό εισάγεται ο κωδικός που θα χρησιμοποιείται για την κλήση του πεδίου μέσα στη φόρμα. Η συμπλήρωση του πεδίου είναι υποχρεωτική.  Πεδίο Στο σημείο αυτό καθορίζεται η συνάρτηση ή το πεδίο που ο χρήστης επιθυμεί να χρησιμοποιήσει στη φόρμα. Μπορεί, επίσης, να επιλέξει οποιοδήποτε από τα διαθέσιμα πεδία της φόρμας ή τις διαθέσιμες συναρτήσεις.  Μήκος (υποχρεωτικό) Στο πεδίο αυτό εισάγεται το μήκος που θα καταλαμβάνει το πεδίο στη φόρμα. Το σύστημα προτείνει το μήκος για τα περισσότερα πεδία, αλλά ο χρήστης δύναται να το μεταβάλλει εάν το επιθυμεί. Το μήκος των πεδίων που καθορίζεται στη σελίδα Πεδία είναι υποχρεωτικό. Αν παρόλα αυτά το μήκος ενός πεδίου είναι τέτοιο ώστε το πεδίο να πέφτει πάνω στο διπλανό του, τότε το τελευταίο είτε δεν εμφανίζεται, είτε εμφανίζεται όσο χωράει αλλά αντί για την τιμή του εμφανίζει το λεκτικό όπως είναι δηλωμένο στο script. Εάν συμβεί κάτι τέτοιο θα πρέπει είτε να μετακινηθεί το πεδίο, είτε να διαμορφωθούν κατάλληλα τα μήκη.  Δεκαδικά Το σημείο αυτό καθορίζεται ο αριθμός των δεκαδικών ψηφίων του αριθμού, εφόσον ο χρήστης έχει επιλέξει κάποιο αριθμητικό πεδίο.  Στοίχιση Στο πεδίο αυτό ο χρήστης επιλέγει τον τρόπο που θα γίνεται η στοίχιση του πεδίου μέσα στη φόρμα. Υπάρχουν οι κάτωθι επιλογές: Αριστερά, η τιμή προτείνεται από το σύστημα για τα αλφαριθμητικά πεδία Δεξιά, η τιμή προτείνεται από το σύστημα για τα αριθμητικά πεδία Κέντρο Το μήκος της κάθε γραμμής της σελίδας πεδία χωράει μέχρι και 128 χαρακτήρες. Αν η γραμμή ξεπερνά τους 128 χαρακτήρες τότε θα πρέπει ο χρήστης είτε να σπάσει σε περισσότερες γραμμές τη λογική της, είτε να χρησιμοποιήσει κατάλληλα τη συνάρτηση FLINEV( ) (βλ. Παρακάτω). Αν κάποιο πεδίο δεν είναι διαθέσιμο στη φόρμα, τότε αυτό μπορεί να παραχθεί είτε μέσω άλλων πεδίων, είτε μέσω διάφορων συναρτήσεων που δίνονται. Αυτές που θα περιγραφούν παρακάτω είναι εκείνες οι οποίες ανήκουν στην κατηγορία "Διάφορες". Διαθέσιμες Συναρτήσεις Κατηγορία Φόρμας Αριθμός σελίδας PageNo Σύνταξη:  PageNo Επεξήγηση :  Επιστρέφει τον αριθμό της τρέχουσας σελίδας της εκτύπωσης. Αριθμός γραμμής LineNo Σύνταξη:  LineNo Επεξήγηση :  Επιστρέφει τον αριθμό γραμμής της τρέχουσας σελίδας. Πλήθος σελίδων TotPages & LastPageNo Σύνταξη:  TotPages, LastPageNo  Επεξήγηση : Η TotPages επιστρέφει το πλήθος σελίδων της εκτύπωσης  χωρίς να λαμβάνει  υπόψιν τις πιθανές διαφοροποιήσεις του μήκους της εκτύπωσης κατά την εκτέλεση (run time), λόγω ύπαρξης συναρτήσεων όπως PrintIf κλπ. Η LastPageNo επιστρέφει τον αριθμό της τελευταίας σελίδας της εκτύπωσης  λαμβάνοντας  υπόψιν τις πιθανές διαφοροποιήσεις του μήκους της εκτύπωσης κατά την εκτέλεση (run time), λόγο ύπαρξης συναρτήσεων όπως PrintIf κλπ. Αριθμός αντιγράφου CopyNo Σύνταξη:  CopyNo Επεξήγηση :Επιστρέφει τον αριθμό αντιγράφου της εκτύπωσης. Σημερινή ημερομηνία Ώρα εκτύπωσης StrUniParam() Σύνταξη:  STRUNIPARAM ( ακέραιο αριθμητικό πεδίο) Επεξήγηση : Επιστρέφει το πεδίο "Τιμή" του πίνακα "Γενικές Παράμετροι" ως αλφαριθμητικό.  NumUniParam() Σύνταξη:  NUMUNIPARAM (ακέραιο αριθμητικό πεδίο) Επεξήγηση : Επιστρέφει το πεδίο "Τιμή" του πίνακα "Γενικές Παράμετροι" ως αριθμητικό. Κατηγορία μετατροπής Σε αλφαριθμητικό STRING Σύνταξη: STRING  (διαθέσιμο αριθμητικό πεδίο) Επεξήγηση:  Μετατρέπει το διαθέσιμο πεδίο σε αλφαριθμητικό. Παράδειγμα:  STRING(TRUNC(ROUND(1235.45,LineNo-2) Σε πραγματικό NUMBER() Σύνταξη:  NUMBER (διαθέσιμο αλφαριθμητικό πεδίο) Επεξήγηση:  Μορφοποιεί το διαθέσιμο αλφαριθμητικό πεδίο σε αριθμητικό. Παράδειγμα:  NUMBER(TRADERAFM) Σε ακέραιο INTEGER() Σύνταξη:  INTEGER ( αριθμητικό διαθέσιμο πεδίο ) Επεξήγηση:  Μετατρέπει το διαθέσιμο αριθμητικό πεδίο σε ακέραιο. Παράδειγμα:  INTEGER(TOTLAMOUNT) Σε αλφαριθμητικό (Όχι μηδέν) NZSTRING() Σύνταξη:  NZSTRING ( διαθέσιμο αριθμητικό πεδίο[, format]) Επεξήγηση:  Μορφοποιεί το διαθέσιμο αριθμητικό πεδίο σύμφωνα με το format. Αν δεν δοθεί format, τότε η μορφοποίηση του πεδίου γίνεται με το format '#,###'. Παράδειγμα:  NZSTRING(PRCDISC1) Σε ημερομηνία(αλφαριθμ.) DATETOSTR() Σύνταξη:  DATETOSTR ( διαθέσιμο πεδίο ημερομηνίας ) Επεξήγηση:  Μορφοποιεί το διαθέσιμο πεδίο ημερομηνίας σε αλφαριθμητικό. Παράδειγμα:  DATETOSTR(GETQUERY('SELECT FTRDATE DT FROM FINTRADE WHERE ID=:1','DT',DMFIELD('FINTRADE','ID'))) Τοπικό νόμισμα σε EURO LOCALTOEURO() Σύνταξη:  LOCALTOEURO (διαθέσιμο αριθμητικό πεδίο) Επεξήγηση:  Μετατρέπει την αξία του πεδίου από τοπικό νόμισμα σε EURO χρησιμοποιώντας την ισοτιμία κλειδώματος. Αν το πεδίο δεν περιέχει αξία σε τοπικό νόμισμα επιστρέφει 0. Παράδειγμα:  LOCALTOEURO(TOTLAMOUNT) EURO σε τοπικό νόμισμα EUROTOLOCAL() Σύνταξη:  NZSTRING (διαθέσιμο αριθμητικό πεδίο) Επεξήγηση:  Μετατρέπει την αξία του πεδίου από EURO σε τοπικό νόμισμα χρησιμοποιώντας την ισοτιμία κλειδώματος. Αν το πεδίο δεν περιέχει αξία σε EURO επιστρέφει 0. Παράδειγμα:  EUROTOLOCAL(TOTAMOUNT) Κατηγορία Διάφορες Έλεγχος μάσκας Mask () Σύνταξη:  MASK (αλφαριθμητικό διαθέσιμο πεδίο','mask') Επεξήγηση:  Ελέγχει αν το string κάνει matching με το mask και επιστρέφει 1 αν κάνει, 0 αν δεν κάνει. Στη μάσκα μπορεί να χρησιμοποιηθεί ο χαρακτήρας '*', ο οποίος αν βρίσκεται στην αρχή ή στη μέση της μάσκας αντικαθιστά έναν χαρακτήρα, ενώ αν βρίσκεται στο τέλος αντικαθιστά πολλούς χαρακτήρες. Παράδειγμα:  MASK(CUSTOMERFIELD('NAME'), 'ΠΑΠΑΓ**ΡΓ*') Περιλαμβάνεται INCLUDES( ) Σύνταξη:  INCLUDES (διαθέσιμο αλφαριθμητικό πεδίο, 'search string') Επεξήγηση:  Επιστρέφει 1 αν βρει το search string μέσα στο διαθέσιμο πεδίο. (Βλ. και συνάρτηση POS( ). Διαφορετικά επιστρέφει μηδέν.) Παράδειγμα:  INCLUDES(FLINEV(60),'ΑΝΩΝΥΜΗ') INCLUDES(FLINEV(60),FLINEV(103)) Μέγιστη τιμή MAX( ) Σύνταξη:  MAX (αριθμητικό πεδίο1,αριθμ.πεδίο 2, αριθμ.πεδίο3,...) Επεξήγηση:  Επιστρέφει το μέγιστο από τα αριθμητικά πεδία που εμπεριέχονται στην παρένθεση Παράδειγμα:  ΜΑΧ(2000, ΤΟΤΑΜΟUNT, FLINEV(8)) Τμήμα COPY( ) Σύνταξη:  COPY (διαθέσιμο πεδίο, fromPos, length ) Επεξήγηση:  Επιστρέφει ένα τμήμα από το διαθέσιμο πεδίο, ξεκινώντας από τη θέση fromPos και μετρώντας από τη θέση αυτή μέχρι και length χαρακτήρες. Παράδειγμα: Αντιστοίχιση CASE( ) Σύνταξη:  CASE (διαθέσιμο πεδίο που επιστρέφει θετικούς ακέραιους, επιστρεφόμενο1, επιστρεφόμενο2,...,επιστρεφόμενο n) Προσοχή! Αν θέλει ο χρήστης να πάρει το επιστρεφόμενο n, τότε θα πρέπει να δηλώσει και όλα τα προηγούμενα επιστρεφόμενα ασχέτως αν μας ενδιαφέρουν ή όχι. Επίσης, αν το πεδίο επιστρέψει αριθμό μικρότερο του 1 ή μεγαλύτερο από n τότε δεν επιστρέφεται τίποτα.  Επεξήγηση:  Έστω ότι ένα πεδίο επιστρέφει ένα πεπερασμένο πλήθος ακεραίων τιμών θετικών και διάφορο του μηδενός. Τότε ο χρήστης μπορεί να αντιστοιχίσει τους επιστρεφόμενους αυτούς αριθμούς με διάφορα λεκτικά ή άλλες τιμές με την εξής λογική: Αν το διαθέσιμο πεδίο έχει τιμή 1 τότε η συνάρτηση θα επιστέψει το επιστρεφόμενο 1, το διαθέσιμο πεδίο έχει τιμή 2 τότε η συνάρτηση θα επιστέψει το επιστρεφόμενο 2, το διαθέσιμο πεδίο έχει τιμή 3 τότε η συνάρτηση θα επιστέψει το επιστρεφόμενο 3, το διαθέσιμο πεδίο έχει τιμή n τότε η συνάρτηση θα επιστέψει το επιστρεφόμενο n. Παράδειγμα:  CASE(color,'κόκκινο','κίτρινο','','άσπρο',1500) μεταφράζεται ως εξής: Αν color=1 τότε επέστρεψε κόκκινο, Αν color=2 τότε επέστρεψε κίτρινο, Αν color=3 τότε μην επιστρέφεις τίποτα, Αν color=4 τότε επέστρεψε άσπρο, Αν color=5 τότε επέστρεψε 1500 Λεκτικό ενός μήνα ημερομηνίας αξιογράφου Έστω ότι η ημερομηνία είναι στη μορφή DD/MM/RRRR Εύρεση θέσης POS( ) Σύνταξη:  POS ('search string',διαθέσιμο πεδίο) Επεξήγηση:  Επιστρέφει τη θέση που το search string εμφανίζεται μέσα στο διαθέσιμο πεδίο. Αν δεν υπάρχει τότε επιστρέφει μηδέν. Παράδειγμα:  Pos('Maria',FLINEV(16)) POS(FLINEV(101),FLINEV(16)) Ώρα (τωρινή) CURTIME Σύνταξη:  CURTIME Επεξήγηση:  Επιστρέφει την τρέχουσα ώρα. Παράδειγμα - Εκτύπωση Ώρας με τη μορφή ΤΤ:MM COPY((CURTIME),1,LENGTH(CURTIME)-IF(LENGTH(CURTIME)>9,6,3)) Συνθήκη IF( ) Σύνταξη: IF( συνθήκη, επιστρεφόμενο1, επιστρεφόμενο 2) Επεξήγηση:  Αν ισχύει η συνθήκη τότε επιστρέφει το επιστρεφόμενο 1. Διαφορετικά επιστρέφει το επιστρεφόμενο 2. Παράδειγμα: Μήκος LENGTH( ) Σύνταξη:  LENGTH (διαθέσιμο πεδίο) Επεξήγηση:  Επιστρέφει το μήκος του διαθέσιμου πεδίου. Ολογράφως SPELL( ) Σύνταξη:  SPELL (διαθέσιμο αριθμητικό πεδίο, πλήθος δεκαδικών, πλήθος γραμμών εκτύπωσης, μήκος λεκτικού, κεφαλαία, λεκτικό μονάδας μέτρησης, γένος, γλώσσα) Επεξήγηση:  Επιστρέφει ολογράφως ένα αριθμητικό πεδίο.Το πλήθος των γραμμών εκτύπωσης χρησιμοποιείται στην περίπτωση που διατίθενται δύο γραμμές για να περιγραφεί το αριθμητικό ολογράφως. Σε αυτήν την περίπτωση στη draft φόρμα χρησιμοποιούνται δύο @ με το πρώτο να έχει πλήθος γραμμών εκτύπωσης 1, ενώ το δεύτερο 2. Το προεπιλεγμένο μήκος του λεκτικού είναι 128 χαρακτήρες και μπορεί να παραληφθεί τελείως το όρισμα. Σε περίπτωση που το επιθυμητό μήκος είναι διαφορετικό μπορείτε να δώσετε οποιαδήποτε ακέραια τιμή στο αντίστοιχο όρισμα. Για να εκτυπωθεί το ολογράφως με κεφαλαία γράμματα δίνετε 0, ενώ για να εκτυπωθεί σε μικρά δίνετε 1.  (συν. Επεξήγησης) Για να εκτυπωθεί το λεκτικό της μονάδας μέτρησης (νόμισμα, βάρος, διάσταση, κ.λ.π.) πρέπει να δοθούν οι κατάλληλοι χαρακτήρες στο αντίστοιχο όρισμα. Το προεπιλεγμένο είναι το κενό λεκτικό, και σε αυτή τη περίπτωση το όρισμα μπορεί να παραληφθεί. Για να εκτυπωθεί το ολογράφως σε γένος Θηλυκό βάζουμε στο αντίστοιχο όρισμα τιμή 0, σε γένος Αρσενικό βάζετε 1 ενώ σε γένος Ουδέτερο βάζετε 2. Για να εκτυπωθεί το ολογράφως στα Ελληνικά δίνουμε στο αντίστοιχο όρισμα τιμή 0 ή παραλείπουμε το όρισμα, για τα Αγγλικά (ΗΠΑ) δίνετε τιμή 1, ενώ για τα Αγγλικά (Μ. Βρετανίας) δίνετε τιμή 2. Ολογράφως SPELLDEC( ) Σύνταξη:  SPELLDEC (διαθέσιμο αριθμητικό πεδίο, πλήθος δεκαδικών, πλήθος γραμμών εκτύπωσης, μήκος λεκτικού, κεφαλαία, λεκτικό μονάδας μέτρησης, λεκτικό υποδιαίρεσης μονάδας μέτρησης, γένος, γλώσσα) Επεξήγηση:  Επιστρέφει ολογράφως ένα αριθμητικό πεδίο καθώς και το λεκτικό της υποδιαίρεσης της μονάδας μέτρησης. Το πλήθος των γραμμών εκτύπωσης χρησιμοποιείται στην περίπτωση που διατίθενται δύο γραμμές για να περιγραφεί το αριθμητικό ολογράφως. Σε αυτήν την περίπτωση στη draft φόρμα χρησιμοποιούνται δύο @ με το πρώτο να έχει πλήθος γραμμών εκτύπωσης 1, ενώ το δεύτερο 2. Το προεπιλεγμένο μήκος του λεκτικού είναι 128 χαρακτήρες και μπορεί να παραληφθεί τελείως το όρισμα. Σε περίπτωση που το επιθυμητό μήκος είναι διαφορετικό μπορείτε να δώσετε οποιαδήποτε ακέραια τιμή στο αντίστοιχο όρισμα. Για να εκτυπωθεί το ολογράφως με κεφαλαία γράμματα δίνετε 0, ενώ για να εκτυπωθεί σε μικρά δίνετε 1.  (συν. Επεξήγησης) Για να εκτυπωθεί το λεκτικό της μονάδας μέτρησης (νόμισμα, βάρος, διάσταση, κ.λ.π.) πρέπει να δοθούν οι κατάλληλοι χαρακτήρες στο αντίστοιχο όρισμα. Το προεπιλεγμένο είναι το κενό λεκτικό, και σε αυτή τη περίπτωση το όρισμα μπορεί να παραληφθεί. Για να εκτυπωθεί το λεκτικό της υποδιαίρεσης της μονάδας μέτρησης (πέννες, γραμμάρια, εκατοστά, κ.λ.π.) πρέπει να δοθούν οι κατάλληλοι χαρακτήρες στο αντίστοιχο όρισμα. Το προεπιλεγμένο είναι το κενό λεκτικό, και σε αυτή τη περίπτωση το όρισμα μπορεί να παραληφθεί. Για να εκτυπωθεί το ολογράφως σε γένος Θηλυκό βάζετε στο αντίστοιχο όρισμα τιμή 0, σε γένος Αρσενικό βάζετε 1 ενώ σε γένος Ουδέτερο βάζετε 2. Για να εκτυπωθεί το ολογράφως στα Ελληνικά δίνετε στο αντίστοιχο όρισμα τιμή 0 ή παραλείπουμε το όρισμα, για τα Αγγλικά (ΗΠΑ) δίνετε τιμή 1, ενώ για τα Αγγλικά (Μ. Βρετανίας) δίνετε τιμή 2. Άθροισμα SUM( ) Σύνταξη:  SUM (διαθέσιμο πεδίο φόρμας) Επεξήγηση:  Επιστρέφει το άθροισμα ενός +πεδίου της φόρμας+ (έχει νόημα για τα στοιχεία γραμμών παραστατικού τα οποία επαναλαμβάνονται). Εάν ο χρήστης επιθυμεί να υπολογίσει το άθροισμα μιας υπολογιζόμενης στήλης χρησιμοποιεί τη συνάρτηση LNLOOPSUM (βλ. Παρακάτω). Παράδειγμα:  SUM('PRICE') LOOKUP( ) Σύνταξη:  LOOKUP (Table, keyField, keyValue, ResultField) Επεξήγηση:  Χρησιμοποιείται για να εμφανίσει την περιγραφή ενός πεδίου ενός μικρού βοηθητικού πίνακα (Χώρες, κατηγορίες ειδών κλπ). Ως επί το πλείστον αφορά όλους τους +πίνακες οι οποίοι είναι cashed+ όταν ανοίγει η εφαρμογή Atlantis. Οι πίνακες αυτοί περιγράφονται από το module Dgeneral. Για περισσότερες πληροφορίες ο αναγνώστης μπορεί να απευθυνθεί στην ομάδα παραγωγής της εφαρμογής Atlantis). Παράδειγμα:  Για να φέρει ο χρήστης την περιγραφή της χώρας του πελάτη: LOOKUP('Country','codeid',CUSTOMER_SHIPFIELD('CNTID'),'DESCR') Για να φέρει ο χρήστης την περιγραφή της κατηγορίας του είδους: LOOKUP('Ιtemgroup','codeid',MATERIALFILED('IGTID'),'DESCR') Για να φέρει ο χρήστης την περιγραφή του χρήστη: @1=DMFIELD('FINTRADE','APPROVALUSER') LOOKUP('PUSER','ID',FLINEV(1),'FULLNAME') DMFIELD( ) Σύνταξη:  DMFIELD (table, field) Επεξήγηση:  Επιστρέφει το πεδίο ενός +πίνακα ο οποίος είναι διαθέσιμος από το κύκλωμα στο οποίο ανήκει η φόρμα.+ Π.χ. αν είμαστε στα Παραστατικά πωλήσεων είναι διαθέσιμοι οι πίνακες Fintrade, Customer (τα οποία επιστρέφουν μία τιμή), κτλ. Σημείωση1 Τα διαθέσιμα πεδία της φόρμας εμφανίζονται καλώντας το παραστατικό του κυκλώματος και ενεργοποιώντας το sql trace του Goserver της εφαρμογής. Θα πρέπει να προσέξει ο χρήστης ώστε ο πίνακας που θα διαλέξει να επιστρέφει μόνο μία τιμή, διαφορετικά αν υπάρχουν περισσότερες θα επιλεγεί μία τυχαία. Σημείωση2 Εναλλακτικά αν δεν επιθυμεί ο χρήστης να περιοριστεί στους πίνακες ή/και στα πεδία που είναι αναγνωρίσιμα από τη φόρμα, τότε μπορεί να χρησιμοποιηθεί η συνάρτηση GetQuery (βλ. Παρακάτω). Η συνάρτηση getquery πρέπει να σημειωθεί ότι είναι πολύ πιο αργή από την DMFIELD. Παράδειγμα:  Στα παραστατικά πωλήσεων η DMFIELD('FINTRADE','ADDID') επιστρέφει το id της διεύθυνσης του πελάτη η οποία είναι αποθηκευμένη στο παραστατικό. Για να φέρει ο χρήστης το λεκτικό αυτής της διεύθυνσης χρησιμοποιεί την DMFIELDLOC όπως περιγράφεται παρακάτω. DMFIELDLOC( ) Σύνταξη:  DMFIELDLOC (table, field, id, [idField]) Επεξήγηση:  Σχετίζεται με τη DMFIELD( ). Εντοπίζει και επιστρέφει τις τιμές πεδίων από πίνακες για τους οποίους τα κλειδιά τους επιστρέφονται από την DMFIELD. Η συσχέτιση των πινάκων γίνεται βάσει του κλειδιού τους που συνήθως είναι το ΙD. Σε διαφορετική περίπτωση θα πρέπει να οριστεί το κλειδί του πίνακα ως η τελευταία παράμετρος idField. Παράδειγμα - Κλήση πεδίων από υποκατάστημα Πελατών @1 DMFIELD('FINTRADE','ADDID') @2 DMFIELDLOC('CUSTADDRESS','DISTRICT',FLINEV(1)) @3 DMFIELDLOC('CUSTADDRESS','DESCR',FLINEV(1)) @4 DMFIELDLOC('CUSTADDRESS','CONTACTPERSON',FLINEV(1)) @5 DMFIELDLOC('CUSTADDRESS','STREET',FLINEV(1)) @6 DMFIELDLOC('CUSTADDRESS','ZIPCODE',FLINEV(1)) @7 DMFIELDLOC('CUSTADDRESS','TELEX',FLINEV(1)) @8 DMFIELDLOC('CUSTADDRESS','PHONE1',FLINEV(1)) @9 DMFIELDLOC('CUSTADDRESS','PHONE2',FLINEV(1)) @10 DMFIELDLOC('CUSTADDRESS','FAXNUMBER',FLINEV(1)) Παράδειγμα - Κλήση πεδίων από υποκατάστημα Προμηθευτών @1 DMFIELD('FINTRADE','ADDID') @2 DMFIELDLOC('SUPPADDRESS','DISTRICT',FLINEV(1)) @3 DMFIELDLOC('SUPPADDRESS','DESCR',FLINEV(1)) @4 DMFIELDLOC('SUPPADDRESS','CONTACTPERSON',FLINEV(1)) @5 DMFIELDLOC('SUPPADDRESS','STREET',FLINEV(1)) @6 DMFIELDLOC('SUPPADDRESS','ZIPCODE',FLINEV(1)) @7 DMFIELDLOC('SUPPADDRESS','TELEX',FLINEV(1)) @8 DMFIELDLOC('SUPPADDRESS','PHONE1',FLINEV(1)) @9 DMFIELDLOC('SUPPADDRESS','PHONE2',FLINEV(1)) @10 DMFIELDLOC('SUPPADDRESS','FAXNUMBER',FLINEV(1)) ενώ @105 DMFIELD('FINTRADE','KOSTA_FLGTIMH') πχ. επιστρέφει τον αριθμό 2 @106 DMFIELDLOC('KOSTA_TIMES','DESCR',FLINEV(105),'CODE') \\ δεν θα δουλέψει γιατί οι πίνακες kosta_times είναι ένας πίνακας που δεν αναγνωρίζεται από την φόρμα του κυκλώματος των παραστατικών πωλήσεων. (custom πίνακας) FLINEV( ) Σύνταξη:  FLINEV (LineNo) Επεξήγηση:  Αναφορά σε άλλη γραμμή. Στην παρένθεση δίνεται ο αριθμός της άλλης γραμμής. Παράδειγμα:  Στην γραμμή 21 ζητάει ο χρήστης, αν υπάρχουν σχετικά παραστατικά, τότε να εμφανιστούν (γραμμή 20), αλλιώς να μην εμφανιστεί τίποτα. LNLOOPSUM( ) Σύνταξη:  LNLOOPSUM (έκφραση [, συνθήκη]) Επεξήγηση:  Επιστρέφει το άθροισμα ενός υπολογιζόμενου πεδίου, το οποίο υπολογίζεται μέσα στην έκφραση. Προαιρετικά μπορεί να χρησιμοποιηθεί και κάποια συνθήκη η οποία θα περιορίζει το άθροισμα για τις εγγραφές για τις οποίες η συνθήκη ισχύει. Η έκφραση και η συνθήκη πρέπει να είναι μέσα σε QUOTES. Παράδειγμα:  LNLOOPSUM('FLINEV(15)') ή LNLOOPSUM('FLINEV(15)','\[FLINEV(15)>100') GETQUERY( ) Σύνταξη:  GETQUERY (query, result field [,params, …]) Επεξήγηση:  Επιστρέφει ένα πεδίο σαν αποτέλεσμα ενός query, το οποίο προαιρετικά δέχεται και παραμέτρους. Το query πρέπει να βρίσκεται μέσα με μονά εισαγωγικά. Το όνομα του επιστρεφόμενου πεδίου μπορεί να είναι οποιοδήποτε και αυτό θα πρέπει να βρίσκεται σε μονά εισαγωγικά . Οι παράμετροι καλούνται μέσα στο query βάζοντας το πρόθεμα *:n* (όπου n αριθμός που δηλώνει τη σειρά της παραμέτρου). Εκτός από αυτό το σημείο θα πρέπει να δηλωθούν στο τέλος διαχωρισμένες με κόμματα με τη σειρά αντίστοιχη αυτής που τις καλέσαμε στο query. H συνάρτηση αυτή είναι σχετικά πιο αργή από τους άλλους διαθέσιμους τρόπους ανάκτησης στοιχείων. Για το λόγο αυτό θα πρέπει να χρησιμοποιείται με προσοχή και σε περιπτώσεις που οι άλλες μέθοδοι δεν προσφέρουν το επιθυμητό αποτέλεσμα. Προσοχή! Υπενθυμίζεται ότι το maximum πλήθος χαρακτήρων που χωράει σε μία γραμμή της σελίδας πεδία είναι 128. Παράδειγμα: GETQUERY('SELECT KOSTA_EFORIA FROM CUSTOMER WHERE ID=:1','KOSTA_EFORIA', DMFIELD('FINTRADE','CUSID')) GETQUERY( 'SELECT VTCVALUE FROM VATANALYSIS WHERE VTCID = 1 AND FTRID=:1', 'VTCVALUE', DMFIELD('STORETRADE','FTRID') ) GETQUERY('SELECT CREATIONDATE AS A FROM BILL B, FUNDTRADELINES F WHERE F.BLLID=B.ID AND F.FTRID=:1','A', DMFIELD('BILL','BLKID') ) GETQUERY('SELECT PLACEOFISSUE AS A FROM BILL B, FUNDTRADELINES F WHERE F.BLLID=B.ID AND F.FTRID=:1','A', FLINEV(15) ) GETQUERY('SELECT CREATIONDATE AS A FROM BILL B, FUNDTRADELINES F WHERE F.BLLID=B.ID AND F.FTRID=:1','A',FLINEV(15)) GETQUERY('SELECT BANKACCNUM AS A FROM BILL B, FUNDTRADELINES F WHERE F.BLLID=B.ID AND F.FTRID=:1','A', FLINEV(15) ) GETQUERY('SELECT PUBLISHERNAME AS A FROM BILL B, FUNDTRADELINES F WHERE F.BLLID=B.ID AND F.FTRID=:1','A', FLINEV(15) ) GETQUERY('SELECT C.NAME AS A FROM BILL B, FUNDTRADELINES F,CUSTOMER C WHERE F.BLLID=B.ID AND B.DONORID=C.ID AND F.FTRID=:1','A',FLINEV(15)) Ακέραιο μέρος TRUNC( ) Σύνταξη:  TRUNC (διαθέσιμο πεδίο) Επεξήγηση:  Επιστρέφει το ακέραιο μέρος ενός αριθμητικού πεδίου με δεκαδικά. Αν έχουν οριστεί δεκαδικά στο πεδίο, τότε εμφανίζονται μηδενικά στη θέση των δεκαδικών. Στρογγυλοποίηση ROUND( ) Σύνταξη:  ROUND (Num [,desc]) Επεξήγηση:  Επιστρέφει τον πλησιέστερο ακέραιο σε ένα αριθμητικό πεδίο με δεκαδικά. Η στρογγυλοποίηση (by default και εάν δεν έχει οριστεί desc) γίνεται στο 0{^}ο^ δεκαδικό ψηφίο και στο όριο των 0,5. Μπορείτε να ορίσετε μικρότερο όριο στρογγυλοποίησης, δηλαδή στο 1 ο , στο 2 ο , στο 3 ο , στο 4 ο  κτλ δεκαδικό ψηφίο θέτοντας στο option desc τον αριθμό της θέσης δεκαδικού για το οποίο επιθυμούμε να γίνει η στρογγυλοποίηση. Παράδειγμα:  ROUND(167.5) επιστρέφει 168 ROUND(167.3) επιστρέφει 167 ROUND(167.88, 1) επιστρέφει 167.9 PLV( ) Σύνταξη:  PLV (lineNo) Επεξήγηση:  Είναι σαν την FLINEV( ), με τη διαφορά ότι εκτελείται μόνο μία φορά. Μετά την πρώτη κλήση κάθε φορά που ξανακαλείται με το ίδιο lineno επιστρέφει κατευθείαν την τιμή του πεδίου που βρίσκεται στο lineNo. Φτιάχτηκε αρχικά για να αποφεύγονται οι πολλές κλήσεις των πεδίων που περιέχουν τη συνάρτηση getQuery. Παράδειγμα: Στο παράδειγμα αυτό, το select statement της getquery καλείται μόνο μία φορά, παρόλο που η γραμμή 103 καλείται τρεις φορές. Αντίθετα, αν στη θέση της PLV είχε θέσει ο χρήστης την κλασσική FLINEV τότε όντως το select statement θα είχε εκτελεστεί τρεις φορές. Αντιστοίχιση CaseOf() Σύνταξη:  CaseOf (διαθέσιμο πεδίο που επιστρέφει ακέραιους, αριθμ. πεδίο1, επιστρεφόμενο1, αριθμ. πεδίο2, επιστρεφόμενο2, …, αριθμ. πεδίο n, επιστρεφόμενο n) Επεξήγηση:  Έστω ότι ένα πεδίο επιστρέφει ένα πεπερασμένο πλήθος ακεραίων τιμών. Τότε ο χρήστης μπορεί να αντιστοιχίσει τους επιστρεφόμενους αυτούς αριθμούς με διάφορα λεκτικά ή άλλες τιμές με την εξής λογική: Αν το διαθέσιμο πεδίο ισούται με το αριθμ. πεδίο 1 τότε η συνάρτηση θα επιστέψει το επιστρεφόμενο 1, αν το διαθέσιμο πεδίο ισούται με το αριθμ. πεδίο 2 τότε η συνάρτηση θα επιστέψει το επιστρεφόμενο 2, αν το διαθέσιμο πεδίο ισούται με το αριθμ. πεδίο 3 τότε η συνάρτηση θα επιστέψει το επιστρεφόμενο 3, αν το διαθέσιμο πεδίο ισούται με το αριθμ. πεδίο n τότε η συνάρτηση θα επιστέψει το επιστρεφόμενο n. Παράδειγμα:  CASEOF(linenum,1,'Γραμμή 1',2,'Γραμμή 2',3,'Γραμμή 3',4,'Γραμμή 4', 6,'Γραμμή 6') μεταφράζεται ως εξής: Αν linenum=1 τότε επιστρέφει Γραμμή 1 Αν linenum=2 τότε επιστρέφει Γραμμή 2 Αν linenum=3 τότε επιστρέφει Γραμμή 3 Αν linenum=4 τότε επιστρέφει Γραμμή 4 Αν linenum=6 τότε επιστρέφει Γραμμή 6 SumUp() Σύνταξη:  SumUp (LineNo) Επεξήγηση:  Η συνάρτηση SumUp() χρησιμοποιείται πάντα σε συνδυασμό με τη συνάρτηση SumOf(). Η συνάρτηση αυτή αποθηκεύει σε μια εσωτερική μεταβλητή το προοδευτικό άθροισμα του αριθμητικού πεδίου που αντιστοιχεί στον αριθμό γραμμής του ορίσματός της. Παράδειγμα:  Βλέπε παράδειγμα της συνάρτησης SumOf(). SumOf() Σύνταξη:  SumOf (LineNo[,0 ή 1]) Επεξήγηση:  Εμφανίζει το περιεχόμενο της εσωτερικής μεταβλητής που έχει υπολογιστεί από την συνάρτηση SumUp(). Η πρώτη παράμετρος δηλώνει τον αριθμό γραμμής που αντιστοιχεί στο πεδίο του οποίου το προοδευτικό άθροισμα επιθυμεί ο χρήστης να εμφανίσει. Η δεύτερη παράμετρος δηλώνει αν θα μηδενίζεται το περιεχόμενο της εσωτερικής μεταβλητής ύστερα από την εκτύπωση της SumOf(). Αν δεν χρησιμοποιηθεί η δεύτερη παράμετρος ή αν έχει τιμή 0, τότε το περιεχόμενο της εσωτερικής μεταβλητής δεν μηδενίζεται. Αν η δεύτερη παράμετρος έχει τιμή 1, τότε το περιεχόμενο της εσωτερικής μεταβλητής μηδενίζεται. Παράδειγμα:  Έστω ότι στο τέλος των γραμμών του παραστατικού ο χρήστης θέλει να τυπώσει το άθροισμα των ποσοτήτων του πεδίου PRIMARYQTY. Στη λίστα των πεδίων θα πρέπει να δηλωθούν τα εξής: @5 PRIMARYQTY @7 SUMUP(5) @10 SUMOF(5) Στο Script της φόρμας, για την εμφάνιση του πεδίου της ποσότητας σε κάθε γραμμή θα χρησιμοποιηθεί το πεδίο @7. Για να εμφανιστεί το άθροισμα των ποσοτήτων στο τέλος των γραμμών του παραστατικού θα χρησιμοποιήσουμε το πεδίο @10. LogCompanyField() Σύνταξη:  LogCompanyField( Field ) Επεξήγηση:  Αναφέρεται σε πεδία της εταιρείας με την οποία έχει κάνει login στην εφαρμογή ο χρήστης. Επιστρέφει την τιμή του πεδίου Field. Παράδειγμα:  LogCompanyField('CODE') LogUserField() Σύνταξη:  LogUserField( Field ) Επεξήγηση:  Αναφέρεται σε πεδία του χρήστη που έχει κάνει login στην εφαρμογή. Επιστρέφει την τιμή του πεδίου Field. Παράδειγμα:  LogUserField('NAME') LogBranchField() Σύνταξη:  LogBranchField (Field) Επεξήγηση:  Αναφέρεται σε πεδία του υποκαταστήματος με το οποίο έχει κάνει login στην εφαρμογή ο χρήστης. Επιστρέφει την τιμή του πεδίου Field. Παράδειγμα:  LogBranchField('CITY') Ελάχιστη τιμή Min() Σύνταξη:  Min (αριθμητικό πεδίο1,αριθμ.πεδίο 2, αριθμ.πεδίο3,...) Επεξήγηση:  Επιστρέφει το ελάχιστο από τα αριθμητικά πεδία που εμπεριέχονται στην παρένθεση. Παράδειγμα:  ΜIN(2000, ΤΟΤΑΜΟUNT, FLINEV(8)) IsNull() Σύνταξη:  ISNULL (διαθέσιμο πεδίο) Επεξήγηση:  Επιστρέφει τις τιμές 1 ή 0 αν η τιμή του διαθέσιμου πεδίου είναι αντίστοιχα Null ή όχι. Παράδειγμα:  ISNULL('TRADECODE') Στοιχεία τιμ. πολιτικής GetPrPolicyData() Σύνταξη:  GetPrPolicyData (Num, Field, Num, Num) Επεξήγηση:  Επιστρέφει την τιμή ενός εκ των πεδίων CODEID, DESCR, TYPE ή VALUE μιας τιμολογιακής πολιτικής που έχει εφαρμοστεί στον header ή τις γραμμές ενός παραστατικού. Η συνάρτηση αυτή είναι διαθέσιμη μόνο στα κυκλώματα πωλήσεων και αγορών και μπορεί να χρησιμοποιηθεί μόνο στα τμήματα 1 και 2 ενός script. Επεξήγηση παραμέτρων:  Numαριθμητική τιμή που δηλώνει το κύκλωμα πώλησης ή αγοράς(5,6) Fieldδιαθέσιμο πεδίο που περιέχει τις τιμ. πολιτικές που έχουν εφαρμοσθεί NumΑ/Α τιμ. πολιτικής στο διαθέσιμο πεδίο NumΑ/Α πεδίου για το οποίο θα επιστραφεί τιμή \\ Η συνάρτηση αυτή μπορεί να επιστρέψει το πλήθος των εφαρμοσμένων τιμ. πολιτικών αρκεί στην θέση της τρίτης παραμέτρου να θέσουμε την τιμή 0. Παράδειγμα:  GETPRPOLICYDATA(5,PRPOLICYSTR,1,1 Σχετικά παραστατικά RELATIVS Σύνταξη:  RELATIVS Επεξήγηση:  Επιστρέφει τους κωδικούς των σχετικών παραστατικών διαχωρισμένους με κόμμα. Η συνάρτηση αυτή είναι διαθέσιμη στα κυκλώματα πωλήσεων, αγορών και υπηρεσιών/αυτοκινήτου. Μπορεί να χρησιμοποιηθεί στο τμήμα 1 ενός script. Ημερομηνία σχετικών παραστατικών RELATIVSDATE Σύνταξη:  RELATIVSDATE Επεξήγηση:  Επιστρέφει τις ημερομηνίες των σχετικών παραστατικών διαχωρισμένες με κόμμα. Η συνάρτηση αυτή είναι διαθέσιμη στα κυκλώματα πωλήσεων, αγορών και υπηρεσιών/αυτοκινήτου. Μπορεί να χρησιμοποιηθεί στο τμήμα 1 ενός script. Σχετικά παραστατικά αναλυτικά RELATIVSFULL() Σύνταξη:  RELATIVSFULL (FieldNames, FieldDelimiter, FtrDelimiter, GroupFieldNames, GroupDelimiter) Επεξήγηση:  Η συνάρτηση αυτή είναι διαθέσιμη στα κυκλώματα πωλήσεων, αγορών και υπηρεσιών/αυτοκινήτου. Μπορεί να χρησιμοποιηθεί στο τμήμα 1 ενός script. Επιστρέφει τιμές από πεδία των σχετικών παραστατικών. Αφορά μόνο τα πεδία τα οποία βρίσκονται στον πίνακα FINTRADE. Επεξήγηση παραμέτρων:  FieldNames(υποχρεωτικό): Τα επιθυμητά πεδία προς εκτύπωση από τα σχετικά παραστατικά. Τα πεδία πρέπει να διαχωρίζονται με ελληνικό ερωτηματικό. FieldDelimiter(προαιρετικό): Οι διαχωριστικοί χαρακτήρες ανάμεσα στα πεδία (το κενό χρησιμοποιείται ως default τιμή) FtrDelimiter(προαιρετικό): Οι διαχωριστικοί χαρακτήρες ανάμεσα στα διαφορετικά παραστατικά (το κόμμα χρησιμοποιείται ως default τιμή) GroupFieldNames(προαιρετικό):Δίνεται η δυνατότητα εμφάνισης των πεδίων των σχετικών παραστατικών ομαδοποιημένα ως προς τα πεδία που δηλώνονται σε αυτή την παράμετρο. Τα πεδία πρέπει να έχουν δηλωθεί και στην παράμετρο FieldNames. Π.χ. το παράδειγμα 3 που ακολουθεί παρακάτω θα εμφανίσει ανά ημερομηνία τους κωδικούς των σχετικών παραστατικών. GroupDelimiter(προαιρετικό):Οι διαχωριστικοί χαρακτήρες ανάμεσα στις ομάδες (η παύλα χρησιμοποιείται ως default τιμή). Παράδειγμα: RELATIVSFULL ('TRADECODE;FTRDATE',' - ',' , ') RELATIVSFULL ('TRADECODE;FTRDATE') RELATIVSFULL ('TRADECODE;FTRDATE',' ', ' , ', 'FTRDATE', ' – ') RELATIVSFULL ('TRADECODE;FTRDATE',' ', ' , ', 'FTRDATE') Εισαγωγή Αλφαριθμητικού INPUTSTRING() Σύνταξη:  INPUTSTRING ('κείμενο ερωτήματος') Επεξήγηση:  Εμφανίζει διάλογο, στον οποίο καλείται ο χρήστης να εισάγει κατάλληλη τιμή απαντώντας στο κείμενο του ερωτήματος. Η τιμή η οποία εισάγεται από το χρήστη λαμβάνεται με τύπο πεδίου αλφαριθμητικό. Εισαγωγή Αριθμoύ INPUTNUMBER() Σύνταξη:  INPUTNUMBER ('κείμενο ερωτήματος') Επεξήγηση:  Εμφανίζει διάλογο στον οποίο καλείται ο χρήστης να εισάγει κατάλληλη τιμή απαντώντας στο κείμενο του ερωτήματος. Η τιμή η οποία εισάγεται από το χρήστη λαμβάνεται με τύπο πεδίου αριθμός. Εισαγωγή Ημερομηνίας INPUTDATE() Σύνταξη:  INPUTDATE('κείμενο ερωτήματος') Επεξήγηση:  Εμφανίζει διάλογο στον οποίο καλείται ο χρήστης να εισάγει κατάλληλη τιμή απαντώντας στο κείμενο του ερωτήματος. Η τιμή η οποία εισάγεται από το χρήστη λαμβάνεται με τύπο πεδίου ημερομηνίας. Χωροθέτηση σήμανσης Tax Agent TAXAGENTSIG() Σύνταξη:  TAXAGENTSIG('κωδικός φορολογικού μηχανισμού, πλήθος γραμμών σήμανσης') Επεξήγηση:  Επιστρέφει τη συμβολοσειρά σήμανσης η οποία λαμβάνεται από το ΕΑΦΔΣΣ μηχανισμό Tax Agent. Το δεύτερο (προαιρετικό) όρισμα της συνάρτησης καθορίζει το πλήθος (ακέραιος αριθμός) των σειρών στις οποίες κατανέμεται η συμβολοσειρά, έτσι: πλήθος γραμμών σήμανσης=2, τότε η συμβολοσειρά κατανέμεται σε 2 γραμμές στην πρώτη γραμμή οι 40 χαρακτήρες της ψηφιακής υπογραφής και στη δεύτερη οι υπόλοιποι 37. πλήθος γραμμών σήμανσης=4, τότε η συμβολοσειρά κατανέμεται σε 4 γραμμές στην πρώτη, στη δεύτερη και στη τρίτη γραμμή από 20 χαρακτήρες της ψηφιακής υπογραφής, και στη τέταρτη οι υπόλοιποι 17 χαρακτήρες. πλήθος γραμμών σήμανσης=(κενό όρισμα ή ακέραιος διαφορετικός από 2 ή 4) τότε η συμβολοσειρά κατανέμεται σε 1 γραμμή. Προσοχή Σε ότι αφορά γραφικές φόρμες εκτύπωσης θα πρέπει στο σχεδιασμό του πεδίου στο οποίο εκτυπώνεται η συμβολοσειρά να επιλέγεται «Αναδίπλωση κειμένου». Επίσης το πεδίο πρέπει να έχει επαρκές ύψος ώστε να χωρά 2 ή 4 γραμμές, διαφορετικά θα πρέπει να επιλεγεί η παράμετρος «Αυτόματο ύψος» στο σχεδιασμό του πεδίου. Σε ότι αφορά draft φόρμες εκτύπωσης η χρήση του ορίσματος «πλήθος γραμμών σήμανσης» με τιμές 2 ή 4 έχει σαν αποτέλεσμα την αυτόματη εισαγωγή επιπλέον (της 1 ης ) πλήθους γραμμών στη φόρμα. Κείμενο που δεν θα εκτυπωθεί NOPRINT() Σύνταξη:  NOPRINT (' πεδίο ή συμβολοσειρά χαρακτήρων' ) Επεξήγηση:  Δεν εκτυπώνεται στον εκτυπωτή (φυσικό ή κατά την εξαγωγή σε αρχείο) το περιεχόμενο του πεδίου ή η συμβολοσειρά χαρακτήρων που περιέχεται στο όρισμα της συνάρτησης. Χρησιμοποιείται στους μηχανισμούς ΕΑΦΔΣΣ όταν υπάρχουν έντυπα με προτυπωμένα στοιχεία. Άλλες Δυνατότητες & Χρήσιμα Παραδείγματα Κλήση Πεδίων από Διάφορα Κυκλώματα Για τα παραστατικά Πελατών, προμηθευτών, αποθήκης, αξιογράφων κτλ. υπάρχει ένας επιπλέον τρόπος κλήσης πεδίων από τους συσχετιζόμενους σε αυτά πίνακες. Ο τρόπος αυτός περιλαμβάνει τα εξής δύο βήματα:  1 ο   Βήμα Από τη θέση  Ενότητες ->Οργάνωση Λειτουργίας ->Σχεδιασμός συναλλαγών ->Φόρμες Παραστατικών ->Κύκλωμα ->Φόρμα{*} ,  δεξί κλικ  στη φόρμα, χωρίς να την ανοίξει ο χρήστης. Στον καθορισμό πεδίων εκτύπωσης ορίζονται: Αρχείο : το επιθυμητό αρχείο Πεδία : τα επιθυμητά πεδία Προσοχή! Δεν ισχύει για όλα τα αρχεία και πεδία. Στην επόμενη παράγραφο παρέχεται λίστα σχετικά με το ποιοι πίνακες είναι αναγνωρίσιμοι από κάθε κύκλωμα και ο τρόπος που καλούνται τα πεδία τους. 2 ο  Βήμα Αφού οριστούν τα παραπάνω για να ενεργοποιηθούν τα αντίστοιχα πεδία, πρέπει ο χρήστης να εξέλθει της εφαρμογής. Με την είσοδο στην εφαρμογή μετά την έξοδο στα διαθέσιμα πεδία του Header, Σύνολα θα υπάρχουν τα εξής πεδία:  Για το CUSTOMER_SHIPFIELD Πεδίο παραγγελιοδότη CUSTOMER_ORDFIELD Πεδίο παραγγελιολήπτη CUSTOMERFIELD Πεδίο πελάτη SUPPLIERFIELD Πεδίο προμηθευτή  Και στις γραμμές παραστατικού MATERIALFIELD Πεδίο είδους  Η σύνταξη ορίζεται ως εξής:  Π.χ MATERIALFIELD('SUBCODE1') Κλήση πεδίων πινάκων, διαθέσιμα ανά κύκλωμα Παραστατικό Header Detail Εισπράξεων CUSTOMERJOBFIELD BILLFIELD Πληρωμών BILLFIELD BILLFIELD Τραπεζών BILLFIELD Πωλήσεων CUSTOMERFIELD MATERIALFIELD CUSTOMER_ORDFIELD CUSTOMER_BILLFIELD CUSTOMER_SHIPFIELD CUSTOMERJOBFIELD Αγορών SUPPLIERFIELD MATERIALFIELD Λοιπές   πελατών CUSTOMERFIELD CUSTOMERJOBFIELD Παραστατικό Header Detail Λοιπές   προμηθευτών SUPPLIERFIELD Αποθήκης MATERIALFIELD Σύνθεσης / Αποσύνθεσης MATERIAL_HDFIELD MATERIALFIELD Παραγωγής MATERIAL_HDFIELD MATERIALFIELD Διακίνησης Παροχής υπηρεσιών CUSTOMERFIELD MATERIALFIELD CUSTOMER_ORDFIELD CUSTOMER_BILLFIELD CUSTOMER_SHIPFIELD CUSTOMERJOBFIELD Παραστατικό Header Detail Λήψης υπηρεσιών MATERIALFIELD Εμβασμάτων πελατών Εμβασμάτων προμηθευτών Εξοφλήσεις μέσω αντιπροσώπων CUSTOMERFIELD CUSTOMERJOBFIELD Όπου: Για το Header του Παραστατικού Για τις γραμμές παραστατικού CUSTOMERFIELD Πεδίο πελάτη MATERIALFIELD Πεδίο είδους CUSTOMER_SHIPFIELD Πεδίο παραγγελιοδότη BILLFIELD Πεδίο αξιογράφου CUSTOMER_ORDFIELD Πεδίο παραγγελιολήπτη CUSTOMERJOBFIELD Πεδίο έργου CUSTOMER_BILLFIELD Πεδίο πελάτη τιμολόγησης SUPPLIERFIELD Πεδίο προμηθευτή MATERIAL_HDFIELD Πεδίου είδους που αφορά το ΗD Ανάλυση Φ.Π.Α Στα διαθέσιμα πεδία της φόρμας υπάρχουν κάποια τα οποία έχουν σχέση με την κατηγορία ΦΠΑ. Αυτά περιέχουν παρενθέσεις μέσα στις οποίες ζητείται να τοποθετηθεί ο κωδικός της κατηγορίας ΦΠΑ, όπως αυτός ορίζεται από τη διαδρομή  *Ενότητες ->Οργάνωση Λειτουργίας ->Γενικές Παράμετροι ->Κατηγορίες ΦΠΑ.* Τα πεδία αυτά φαίνονται παρακάτω:  Προσοχή Για τρέξει σωστά η κατηγορία ΦΠΑ 0% θα πρέπει να έχει στον πίνακα Κατηγορίες ΦΠΑ κωδικό 99.  Αν δεν είναι ο κωδικός 99 και πρέπει οπωσδήποτε να χρησιμοποιηθεί κάποιο από αυτά τα πεδία, θα πρέπει να γυρίσει σε 99 με την επιφύλαξη και τη διαβεβαίωση ότι δεν πειράζονται άλλα utilities, όπως πχ. Custom εκτυπώσεις ή UCL statements τα οποία χρησιμοποιούν τον παλιό κωδικό. Απαλοιφή Μηδενικών – ΝΖSTRING( ) Γίνεται με τη συνάρτηση  NZSTRING(ΑΡΙΘΜΟΣ). ΠΡΟΣΟΧΗ ΜΕ ΤΑ ΔΕΚΑΔΙΚΑ. Π.Χ. NZSTRING(ΠΕΔΙΟ,'ΜΟΡΦΟΠΟΙΗΣΗ') Λειτουργεί και με προαιρετική δεύτερη παράμετρο που καθορίζει την μορφοποίηση Π.χ. #,### ΕΙΝΑΙ Η DEFAULT (ΕΑΝ ΔΕΝ ΒΑΛΟΥΜΕ ΤΙΠΟΤΑ) #,##0.00 ΓΙΑ ΝΑ ΤΥΠΩΣΕΙ ΑΚΡΙΒΩΣ ΔΥΟ ΔΕΚΑΔΙΚΑ Οι εντολές filter και formulaflt Οι δύο αυτές εντολές χρησιμοποιούνται μόνο όταν υπάρχουν μέρη που αφορούν details (σταθερά ή εμβόλιμα βλ. Εγγυοδοσία). Σκοπός τους είναι να φιλτράρουν τα details, έτσι ώστε να είναι αποδεκτά μόνο εκείνες οι γραμμές οι οποίες πληρούν την (τις) συνθήκη (ες) που ορίζονται μέσα στην έκφραση. H εντολή filter συντάσσεται ως εξής: Filter( έκφραση με συνθήκη ) Μέσα στην έκφραση μπορούν να συμπεριληφθούν πεδία που υπάρχουν στο detail μέρος, λογικοί τελεστές, απλές συνθήκες. Στην εντολή filter δεν μπορούν να χρησιμοποιηθούν συναρτήσεις πάνω σε πεδία, ή σύνθετες εκφράσεις πεδίων. Γι' αυτό το σκοπό υπάρχει η formulaFlt η οποία συντάσσεται παρόμοια. Στην formulaFlt χρησιμοποιούνται όλες οι συναρτήσεις που μπορούν να χρησιμοποιηθούν για την κλήση πεδίων από τις φόρμες. FormulaFLT( σύνθετη έκφραση με συνθήκη ) Παραδείγματα filter (linetype<>2) esc(27,15) filter(ITEDESCR like 'SPRING ΜΠΛΕ ΠΙΑΤΟ ΦΡ%') esc(27,15) filter(ITEDESCR like 'SPRING ΜΠΛΕ ΠΙΑΤΟ ΦΡ%' OR itecode like '100L%') FORMULAFLT(MASK(ITEDESCR,'ΤΣΑΝΤΑ*')) FORMULAFLT(FLINEV(44)>3)  Προσοχή! Για να φιλτράρονται επιτυχώς τα δεδομένα θα πρέπει να φροντίσουμε ώστε οι συγκρίσεις στις παραπάνω εντολές να γίνονται μεταξύ ορισμάτων με ίδιο τύπο πεδίου. Σε διαφορετική περίπτωση θα πρέπει να μετατρέπουμε τα ορίσματα στο σωστό τύπο με χρήση κατάλληλης συνάρτησης από τη κατηγορία συναρτήσεων «Μετατροπής». Υποστήριξη Εγγυοδοσίας Στο script της φόρμας ορίζονται τα τμήματα ως εξής:  # Header  #Details  filter (LINETYPE<>2) #  $# 77,6 filter (LINETYPE=2) Το πεδίο 77 είναι ένα string πχ ' @4 @8  euro  @37 ' Δηλαδή, κάνει αναφορά στα πεδία που θα αποτελέσουν τα πεδία του εμβόλιμου detail. Είναι σαν να γραφόταν στο script κρατώντας όλους τους κανόνες που ισχύουν για αυτό.  6=ένας σταθερός αριθμός που δηλώνει το πλήθος των γραμμών εγγυοδοσίας. #Footer Απαλοιφή Γραμμής Φ.Π.Α Μπορεί να γίνει με τη χρήση της εντολή FILTER η οποία δηλώνεται στο ITEM PART FILTER (SUBJECTTOVAT=1)  ΠΡΕΠΕΙ ΤΟ ΠΕΔΙΟ ΝΑ ΥΠΑΡΧΕΙ ΣΤΑ ΔΙΑΘΕΣΙΜΑ ΠΕΔΙΑ ΦΟΡΜΑΣ #,##0.## ΓΙΑ ΝΑ ΤΥΠΩΣΕΙ ΑΚΡΙΒΩΣ ΔΥΟ ΔΕΚΑΔΙΚΑ ΜΟΝΟ ΕΑΝ ΔΕΝ ΕΙΝΑΙ ΜΗΔΕΝΙΚΑ 5.5 Directives Με τη συγκεκριμένη δυνατότητα μπορούμε να καθορίζουμε τρόπους εμφάνισης των φορμών εκτύπωσης με τη βοήθεια παραμέτρων π.χ COLOREXPAND, COMPACTITEMS, FOOTERGAP, CONSECUTIVE. Χρήση παραμέτρων CONSECUTIVE - Στις περιπτώσεις πολυσέλιδων παραστατικών, κανονικά τυπώνεται μία σελίδα παραστατικού σε κάθε ένα φύλλο χαρτιού στον εκτυπωτή. Αν η φόρμα παραστατικού είναι μικρότερη  από το μέγεθος του χαρτιού, τότε δηλώνοντας CONSECUTIVE=1, θα εκτυπώνονται σε κάθε φύλλο όσες σελίδες παραστατικού μπορούν να χωρέσουν.  FOOTERGAP=0 – Για την εκτύπωση του Footer ενός παραστατικού αμέσως μετά την τελευταία επαναλαμβανόμενη γραμμή. Χρώμα / Μέγεθος Η εμφάνισης της ανάλυσης σε χρώμα/μέγεθος ενός είδους γίνεται με δύο τρόπους: ως ανάλυση στο Τμήμα 6 του Script ως γραμμές παραστατικού στο Τμήμα 2 (Στοιχεία γραμμών παραστατικού) του Script Ανάλυση Σε αυτή την περίπτωση ο χρήστης επιλέγει τα διαθέσιμα πεδία και τα τοποθετεί πάνω στο Script στο Τμήμα 6. Για την εκτύπωση των τίτλων του Τμήματος 6 είναι χρήσιμες οι πληροφορίες της παραγράφου 3.1.3. Γραμμές παραστατικού Αν επιλέξει ο χρήστης την εμφάνιση της ανάλυσης σε Χρώμα / Μέγεθος ως γραμμές παραστατικού, κάθε συνδυασμός Χρώματος / Μεγέθους καταλαμβάνει μια γραμμή από το Τμήμα 2. Για να ενεργοποιηθεί αυτή η δυνατότητα πρέπει να χρησιμοποιηθεί το λεκτικό COLOREXPAND=1 στην αρχή του Τμήματος 1 μετά τη δίεση #. Οι πληροφορίες για το εκάστοτε Χρώμα και Μέγεθος βρίσκονται στα πεδία \[Color (Χρώμα)\] και \[Size (Μέγεθος)\] που βρίσκονται στα διαθέσιμα πεδία των γραμμών παραστατικού. Όταν επιλεγεί η παράμετρος COLOREXPAND=2, τότε για κάθε χρώμα για το οποίο έχει συμπληρωθεί ποσότητα στον πίνακα ανάλυσης ποσότητας ανά χρώμα/μέγεθος δημιουργείται μια νέα γραμμή. Οι πληροφορίες για το χρώμα και τις ποσότητες για κάθε μέγεθος βρίσκονται στα πεδία \[Color\] και \[LINESIZEQTY1-20\]. Στην περίπτωση που ο χρήστης έχει επιλέξει τη συγκεκριμένη μορφή εμφάνισης και έχει επιπλέον επιλέξει και εμφάνιση συστατικών ειδών, τότε η ίδια συμπεριφορά εφαρμόζεται και στα συστατικά είδη (Τμήμα 6) (εννοείται ότι τα συστατικά είδη θα πρέπει να έχουν παρακολούθηση σε χρώμα/μέγεθος). Πρέπει να σημειωθεί ότι στη συγκεκριμένη περίπτωση ως συστατικά είδη θα εμφανιστούν μόνο αυτά για τα οποία υπάρχει συσχέτιση με το σύνθετο είδος για το συγκεκριμένο συνδυασμό χρώματος/μεγέθους του σύνθετου που υπάρχει στο Τμήμα 2. Συμπύκνωση Κωδικών Ειδών Στις φόρμες παραστατικών τα οποία περιλαμβάνουν είδη αποθήκης στο επαναλαμβανόμενο τμήμα υπάρχει η δυνατότητα να γίνει συμπύκνωση των γραμμών όπως ακριβώς γίνεται κατά την καταχώρηση παραστατικών. Για να ενεργοποιηθεί αυτή η δυνατότητα πρέπει να χρησιμοποιηθεί η παράμετρος COMPACTITEMS=1..6 μετά τη δίεση # στην αρχή του τμήματος 1. Σημείωση Στην παράμετρο COMPACTITEMS=6, μπορούν να συμπεριληφθούν και custom πεδία του πίνακα StoreTradeLines. Ανάλογα με τη παράμετρο η οποία θα χρησιμοποιηθεί η συμπύκνωση των γραμμών γίνεται σύμφωνα με τα πεδία: COMPACTITEMS=1 Κωδικός είδους, Τύπος γραμμής, Τιμή, Έκπτωση 1, Έκπτωση 2, Κωδικός εναλ. συσκευασίας COMPACTITEMS=2 Κωδικός είδους, Τύπος γραμμής, Τιμή, Α.Χ., Έκπτωση 1, Έκπτωση 2, Κωδικός εναλ. Συσκευασίας COMPACTITEMS=3 Κωδικός είδους, Τύπος γραμμής, Τιμή, Έκπτωση 1, Έκπτωση 2, Κωδικός εναλ. Συσκευασίας, Παρτίδα COMPACTITEMS=4 Κωδικός είδους, Τύπος γραμμής, Τιμή, Α.Χ., Έκπτωση 1, Έκπτωση 2, Κωδικός εναλ. Συσκευασίας, Παρτίδα COMPACTITEMS=5 Συμπύκνωση με οποιοδήποτε πεδίο του πίνακα MATERIAL   Παράδειγμα: "COMPACTITEMS=5;INTID;SUBCODE" COMPACTITEMS=6 Συμπύκνωση με οποιοδήποτε πεδίο του πίνακα STORETRADELINES   Παράδειγμα: "COMPACTITEMS=6;WEIGHT;VOLUME" Φορολογικοί Εκτυπωτές Οι φόρμες φορολογικών εκτυπωτών αποτελούν μια ιδιαίτερη κατηγορία φορμών παραστατικών και γι' αυτό το λόγο εξετάζονται ξεχωριστά τόσο ο σχεδιασμός τους όσο και η χρήση τους. Στους φορολογικούς εκτυπωτές μπορούν να χρησιμοποιηθούν μόνο φόρμες παραστατικών πωλήσεων ή λιανικής για τις οποίες έχει συμπληρωθεί το πεδίο  Φορολογικός Εκτυπωτής  στη σελίδα  Λοιπά  των στοιχείων της φόρμας. Ο χρήστης έχει τη δυνατότητα να ορίσει πεδία μόνο για το τμήμα 2 (Στοιχεία γραμμών παραστατικού-details). Συνήθως αυτά τα πεδία αφορούν το είδος της γραμμής (π.χ. κωδικός, περιγραφή). Οι κωδικοί των πεδίων αυτών πρέπει να βρίσκονται στο εύρος 1-1000. Οι κωδικοί με τιμή 1001 και άνω είναι δεσμευμένοι.  Για τη σωστή λειτουργία των φορμών εκτύπωσης φορολογικών εκτυπωτών είναι απαραίτητη η συμπλήρωση των τμημάτων 1 και 2 (Επικεφαλίδα-header, Σύνολα παραστατικού-footer) με μια κενή γραμμή. Ο σχεδιασμός των φορμών των φορολογικών εκτυπωτών μπορεί να γίνει με δύο τρόπους: σχεδιασμός με προκαθορισμένη συμπεριφορά, σχεδιασμός με οριζόμενη από τον χρήστη συμπεριφορά. Σχεδιασμός Φόρμας με Προκαθορισμένη Συμπεριφορά Στο συγκεκριμένο τρόπο σχεδιασμού ο χρήστης πρέπει να ορίσει μόνο τα πεδία που αφορούν σταθερά στοιχεία του είδους και είναι αλφαριθμητικά (π.χ. περιγραφή). Οι υπόλοιπες πληροφορίες, που αφορούν είτε πεδία της γραμμής είτε πεδία συνόλου, υπολογίζονται εσωτερικά από την εφαρμογή και τυπώνονται σε προκαθορισμένες θέσεις. Στους πίνακες που ακολουθούν περιγράφονται οι προκαθορισμένες τιμές όλων των διαθέσιμων πεδίων γραμμών και συνόλου. Οι φόρμες με προκαθορισμένη συμπεριφορά λειτουργούν σωστά μόνο όταν ισχύουν οι παρακάτω συνθήκες: στον τύπο συναλλαγής του παραστατικού έχει οριστεί: Χρησιμοποιεί τιμή = Λιανική τιμή πώλησης στις παραμέτρους Αποθήκης έχει οριστεί: Οι τιμές λιανικής περιλαμβάνουν ΦΠΑ Πεδία γραμμής Ποσότητα PRIMARYQTY Τιμή PRICE Αξία γραμμής Ποσότητα * Τιμή Έκπτωση γραμμής Αξία - LINEVALUE Ποσοστό έκπτωσης Έκπτωση / Αξία * 100 Ποσοστό ΦΠΑ VTCPERCENT Τμήμα ΦΠΑ μηχανής Ένα από τα τμήματα Α - Ε το οποίο έχει αντίστοιχο ΦΠΑ με το Ποσοστό ΦΠΑ (από τα στοιχεία του φορολογικού εκτυπωτή) Πεδία συνόλου Συνολική αξία TOTAMOUNT (θεωρείται ότι το συνολικό ποσό έχει ένα τρόπο πληρωμής) Συνολική έκπτωση Συνολική αξία - Σ (Αξία γραμμής - Έκπτωση γραμμής) Ποσοστό έκπτωσης Συνολική έκπτωση / Συνολική αξία * 100 Τρόπος πληρωμής υπολογίζεται μέσω των παραμέτρων του επιλεγμένου φορολογικού εκτυπωτή, σύμφωνα με τον τρόπο εξόφλησης του παραστατικού Σχεδιασμός Φόρμας με Συμπεριφορά Οριζόμενη από το Χρήστη Ο δεύτερος τρόπος σχεδιασμού φόρμας είναι περισσότερο ευέλικτος και παρέχει μεγαλύτερη ελευθερία στον χρήστη σε ό,τι αφορά τα αριθμητικά πεδία που εμφανίζονται στην απόδειξη ενός φορολογικού εκτυπωτή.  Αν, λοιπόν, ο χρήστης θέλει να σχεδιάσει εξ ολοκλήρου τη φόρμα εκτύπωσης πρέπει να ορίσει κάθε πεδίο που θέλει να συμμετάσχει στη φόρμα χρησιμοποιώντας συγκεκριμένους κωδικούς. Στους παρακάτω πίνακες περιγράφονται οι κωδικοί με τα πεδία στα οποία αντιστοιχούν. Η δεύτερη στήλη κάθε πίνακα περιέχει μια περιγραφή του πεδίου στο οποίο αντιστοιχεί ο κάθε κωδικός. Τα πεδία αυτά ενώ δηλώνονται στα διαθέσιμα της φόρμας παραστατικού, εντούτοις δεν χρησιμοποιούνται στο script της φόρμας. Οι θέσεις αυτών των πεδίων στη φόρμα εκτύπωσης είναι προκαθορισμένες και δεν μπορούν να αλλάξουν. Και στο συγκεκριμένο τρόπο σχεδιασμού ισχύουν οι συνθήκες που αναφέρθηκαν στον σχεδιασμό με προκαθορισμένη συμπεριφορά. Υπάρχει όμως η δυνατότητα να παρακαμφθούν οι προαπαιτούμενες συνθήκες αν ο χρήστης επιλέξει την κατάλληλη έκφραση για το πεδίο με κωδικό 1002. Πίνακας 1 Οι κωδικοί 1008 έως 1010 έχουν δεσμευτεί για μελλοντική χρήση. Πεδία γραμμής Κωδικός 1001 QUANTITY (ποσότητα) 1002 PRICE (τιμή) 1003 VALUE (αξία γραμμής) 1004 VTCPERCENT (ποσοστό ΦΠΑ) 1005 VTCDEP (τμήμα ΦΠΑ μηχανής) 1006 VALDISC (αξία έκπτωσης) 1007 PRCDISC (ποσοστό έκπτωσης) 1008 1009 1010 Πίνακας 2 Πεδία αξιών συνόλου για κάθε τρόπο πληρωμής Κωδικός 1101 VALUE1 1102 VALUE2 1103 VALUE3 1104 VALUE4 1105 VALUE5 1106 VALUE6 1107 VALUE7 1108 VALUE8 1109 VALUE9 1110 VALUE10 Πίνακας 3 Πεδία για κάθε τρόπο πληρωμής της συνολικής αξίας Κωδικός 1201 PAYMENT TYPE1 1202 PAYMENT TYPE2 1203 PAYMENT TYPE3 1204 PAYMENT TYPE4 1205 PAYMENT TYPE5 1206 PAYMENT TYPE6 1207 PAYMENT TYPE7 1208 PAYMENT TYPE8 1209 PAYMENT TYPE9 1210 PAYMENT TYPE10 Πίνακας 4 Πεδία εκπτώσεων συνόλου Κωδικός 1301 TOTVALDISC (αξία έκπτωσης συνόλου) 1302 TOTPRCDISC (ποσοστό έκπτωσης συνόλου) Πίνακας 5 Πεδία Μηνυμάτων Σχολίων Κωδικός 1350 Σχόλια / μηνύματα Η συνολική αξία είναι δυνατό να εκφραστεί με περισσότερους από έναν τρόπους πληρωμής (συνήθως είναι μετρητά). Για το λόγο αυτό έχουν οριστεί 10 κωδικοί αξίας το άθροισμα των οποίων αποτελεί τη συνολική αξία του παραστατικού και 10 κωδικοί τρόπων πληρωμής κάθε ένας εκ των οποίων αντιστοιχεί σε ένα κωδικό αξίας. Ο ορισμός των κωδικών των αξιών και των τρόπων πληρωμής στα στοιχεία της φόρμας δεν υπαγορεύει την επιβεβλημένη εμφάνιση αυτών των πεδίων στην απόδειξη του φορολογικού εκτυπωτή. Η επεξεργασία των κωδικών αξιών ξεκινάει από τον κωδικό 1101 και σταματάει στον πρώτο κωδικό αξίας ο οποίος επιστρέφει τιμή 0.  Η εκτύπωση σχολίων / μηνυμάτων στη φόρμα εκτύπωσης φορολογικού εκτυπωτή προϋποθέτει ότι η σχετική δυνατότητα υποστηρίζεται από τον συγκεκριμένο εκτυπωτή.