PocketBiz Sales Discounts and Credit Limit
ESPocketBiz – Εκπτώσεις & Πιστωτικός έλεγχος
Entersoft Business Suite® | Entersoft CRM® | Entersoft Mobile Suite®
Τεχνικό εγχειρίδιο
Περιεχόμενα
- 1 Ταυτότητα
- 2 Copyright
- 3 = How To Εκπτώσεις & Πιστωτικός έλεγχος
Ταυτότητα
Έκδοση κειμένου 2.0
Τελ. ενημέρωση Ιούνιος 2021
Copyright
© Copyright 2011 Entersoft A.E. Με την επιφύλαξη όλων των νόμιμων δικαιωμάτων.
Δεν επιτρέπεται η αναδημοσίευση ή μετάδοση με οποιαδήποτε μορφή και για οποιοδήποτε λόγο μέρους ή όλου του παρόντος εγχειριδίου, χωρίς τη ρητή άδεια της Entersoft Α.Ε.
Όσον αφορά το περιεχόμενο του παρόντος…
- Μπορεί να μεταβληθεί οποιαδήποτε στιγμή.
- Εξυπηρετεί αποκλειστικά πληροφοριακούς σκοπούς.
- Δεν παρέχεται εγγύηση για την ύπαρξη τυχόν λαθών ή για τη λανθασμένη χρήση ή για μη επιθυμητά αποτελέσματα από τη χρήση των προτεινόμενων στο παρόν διαδικασιών.
= How To Εκπτώσεις & Πιστωτικός έλεγχος
Γενικά
Η διαχείριση των εκπτώσεων στο PocketBiz χωρίζεται ουσιαστικά σε 3 ενότητες:
-Στις απλές εκπτώσεις, οι οποίες υλοποιούνται μέσω των βασικών πινάκων του PocketBiz καθώς και μέσω εισαγωγής δεδομένων από το χρήστη
-Στις σύνθετες εκπτώσεις, οι οποίες υλοποιούνται κυρίως μέσω του πίνακα tblDiscounts και
-Στις ειδικές εκπτώσεις, οι οποίες υλοποιούνται μέσω ειδικών πεδίων στους βασικούς πίνακες του PocketBiz
-Στις «online» εκπτώσεις, οι οποίες υλοποιούνται μέσω κλήσης στο κατάλληλο web service.
Απλές Εκπτώσεις
Οι εκπτώσεις εφαρμόζονται στην καθαρή αξία της γραμμής. Η διαδικασία αυτή επεξεργάζεται τις εξής εκπτώσεις:
- την έκπτωση του προιόντος, που διαβάζει από το πεδίο itemdisc από την ανάλογη στήλη του grid και που έχει σαν αρχική τιμή:
- είτε την τιμή του πεδίου stpitemdiscpcnt, απ’ τον πίνακα STP αν η USESTPDISCOUNTS=1,
- είτε την τιμή του πεδίου stidiscount του πίνακα STI, αν η USESTPDISCOUNTS=0
- την έκπτωση του τιμοκαταλόγου, που διαβάζει από το πεδίο prcdisc από την ανάλογη στήλη του grid, και που έχει σαν αρχική τιμή:
- είτε την τιμή του πεδίου stppricelistdiscpcnt απ’ τον πίνακα STP αν η USESTPDISCOUNTS=1,
- είτε 0 αν η USESTPDISCOUNTS=0
- την έκπτωση του πελάτη, που διαβάζει από το επάνω πεδίο κειμένου «έκπτωση» στο 3ο tab των παραστατικών, και που έχει την τιμή του πεδίου cusdiscount από τον CUS για το συγκεκριμένο πελάτη και
- την έκπτωση του τρόπου πληρωμής, που διαβάζει από το κάτω textbox «έκπτωση» στο 3ο tab των παραστατικών, που έχει την τιμή του πεδίου cpmdiscountpcnt από τον CMP για τον τρόπο πληρωμής που έχει επιλεχθεί
Για κάθε μια από αυτές τις εκπτώσεις υπάρχει μια παράμετρος στον πίνακα configuration, δηλαδή:
-PRODUCT_DISCOUNT_LEVEL,
-PRICELIST_DISCOUNT_LEVEL,
-CUSTOMER_DISCOUNT_LEVEL,
-PAYMENT_DISCOUNT_LEVEL.
Οι παράμετροι αυτοί παίρνουν τιμές από 1 εως 4, στη συνηθη λειτουργία τους, έχουν διαφορετικές τιμές μεταξύ τους. Η έκπτωση που η αντίστοιχη παράμετρός της έχει τιμή 1 θα εφαρμοστεί πρώτη στην τιμή της γραμμής, μετά εκείνη που η αντίστοιχη παράμετρός της έχει τιμή 2 κ.ο.κ. Αν κάποιες απ’ αυτές έχουν ίδιες τιμές, τότε αθροίζονται οι εκπτώσεις που αντιστοιχούν στις παραμέτρους αυτές.
Έκπτωση Πωλητή
Από την έκδοση 8.14 και εφεξής, έχει εισαχθεί μια νέα έκπτωση, η έκπτωση πωλητή. Η έκπτωση αυτή εφαρμόζεται σε επίπεδο γραμμής, επηρεάζοντας τις εκπτώσεις που έχουν προκύψει από το σύστημα εκπτώσεων, ακόμα και τις εκπτώσεις πελάτη και τρόπου πληρωμής.
Η παραμετροποίηση για τη λειτουργία εκπτώσεων πωλητή απαιτεί μόνο την παρουσία της παραμέτρου «SLM_DISCOUNT». Οι τιμές της παραμέτρου φαίνονται παρακάτω:
| SLM_DISCOUNT | Ενεργή έκπτωση πωλητή | Συμμετέχει στην ποσότητα καλαθιού/group |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 1 |
Από τα παραπάνω είναι σαφές ότι για να ισχύουν οι εκπτώσεις πωλητή θα πρέπει η τιμή της παραμέτρου να είναι 2 ή 3. Αν είναι 2, τότε η γραμμή δέχεται έκπτωση πωλητή και η ποσότητά της ΔΕΝ προσμετράται στο FromQTY των SpecialDiscounts σε επίπεδο καλαθιού ή Group εκπτώσεων (σαν να είναι σε διαφορετικό παραστατικό). Η τιμή 3 προσμετρά την ποσότητα της γραμμής.
Οι τιμές 0 και 1 είναι ίδιας σημασίας και αντιπροσωπεύουν την κατάσταση όπου η έκπτωση πωλητή είναι ανενεργή.
Εισαγωγή έκπτωσης
Η εισαγωγή της έκπτωσης πωλητή γίνεται ως εξής:
- Επιλογή των γραμμών που θέλουμε να αλλάξει η έκπτωση
Edit
Εισαγωγή της έκτπωσης
Κλειδωμα εκπτώσεων
Τελική κατάσταση
ΠΑΡΑΤΗΡΗΣΗ: Αν στο edit popup δεν δοθει τιμή σε κάποια από τις εκπτώσεις που εμφανίζονται, αυτές διατηρούν τις τιμές τους.
Ποιες εκπτώσεις εμφανίζονται στο edit popup.
Εμφανίζονται τα πεδία του basket που είναι editable ή έχουν PocketBizType = DISCOUNT.
Αυτό σημαίνει ότι ένα πεδίο έκπτωσης θα εμφανιστεί πάντα, ανεξάρτητα από το αν είναι editable.
Συστήνεται έντονα να ΜΗΝ έχετε editable εκτπώσεις στο grid, γιατί δεν εγγυάται τη σωστή λειτουργία του υπολογισμού εκτπώσεων σε συνδυασμό με το locked discount flag.
Αλλαγές στις εκπτώσεις πωλητή καλό είναινα γίνονται μέσα από το edit popup.
Επαναφορά εκπτώσεων
Με επιλεγμένες και πάλι τις γραμμές που θέλουμε να γίνει επαναφορά, επιλέγουμε από το μενού reset discounts και κατόπιν επιβεβαιώνουμε.
Η εικόνα του καλαθιού έχει έρθει στην αρχική κατάσταση
Η διαδικασία ισχύει για απλές και σύνθετες εκπτώσεις εκτός της περίπτωσης που οι εκπτώσεις disc1pcnt και disc2pcnt του tblDiscounts πέφτουν στις ssditemdiscpcnt και ssdpricelistdiscpcnt. Σε αυτή την περίπτωση δε γίνεται σωστός υπολογισμός εκπτώσεων.
Set Discounts
Από την έκδοση 8.14 και εφεξής υποστηρίζονται τα σετ στο Sales/XVan. Ειδικά για τις εκπτώσεις, τα σημεία άξια προσοχής είναι τα παρακάτω:
Η παράμετρος SET_LINES_QUANTITY_PARTICIPATES_IN_DISCOUNT καθορίζει αν οι ποσότητες των γραμμών των σετ συνυπολογίζονται στις εκπτώσεις.
Οι εκπτώσεις των σετ (tblSetsDetail) υπερισχύουν των συστημικών, εφόσον πέφτουν στο ίδιο πεδίο του tblInvDetail, με μορφή αντικατάστασης και όχι άθροισης. Και ενώ τα πεδία του tblInvDetail στα οποία θα πέσουν οι συστημικές εκπτώσεις ορίζονται στον πίνακα tblDiscounts, για τα σετ αυτή η αντιστοίχιση γίνεται στο set xml του SalesConfig (πίνακας Configuration ή πίνακας SDT).
Επομένως, οποιοδήποτε πεδίο βρίσκεται στο set xml, στο node «mapping» (θα πρέπει να βρίσκεται και στα fields και προφανώς στο query, ώστε να έχει μια τιμή) θα αντικαταστήσει το αντίστοιχο πεδίο του tblInvDetail. Είναι επόμενο ότι αν ένα πεδίο του tblInvDetail δεν εμφανίζεται στο mapping του set, τότε αυτό (το πεδίο του tblInvDetail) θα διατηρήσει την τιμή του. Αυτό ισχύει για όλα τα mapped πεδία μεταξύ Set και detail.
Από τα παραπάνω προκύπτει αβίαστα ότι αν θέλουμε να διατηρήσουμε τις συστημικές εκπτώσεις για ένα προϊόν που βρίσκεται σε σετ, δεν κάνουμε καμία προσθήκη στο sets xml.
Αντίθετα, αν θέλουμε να αντικαταστήσουμε την συστημική με άλλη έκπτωση (συνήθως 0), τότε αυτό γίνεται όπως φαίνεται παρακάτω:
<setdetailsquery
selectSet=\" tblSetsDetail.qty as setDetailQty, tblSetsDetail.Disc1 as SetDisc1, tblSetsDetail.Disc2 as SetDisc2, 0 as Setssditemdiscpcnt, 0 as Setssdpricelistdiscpcnt \"
innerjoin=\"\"
leftjoin=\" tblSetsDetail on STI.stiid = tblSetsDetail.stiid \"
where=\"\"
groupby=\"\"
orderby=\"\"/>
<fields>
<field datamember=\"setDetailQty\" databasetype=\"INT\" pocketbiztype=\"quantity\" editable=\"1\"/>
<field datamember=\"SetDisc1\" databasetype=\"FLOAT\" pocketbiztype=\"discount\" editable=\"1\"/>
<field datamember=\"SetDisc2\" databasetype=\"FLOAT\" pocketbiztype=\"discount\" editable=\"1\"/>
<field datamember=\"Setssditemdiscpcnt\" databasetype=\"FLOAT\" pocketbiztype=\"discount\" editable=\"1\"/>
<field datamember=\"Setssdpricelistdiscpcnt\" databasetype=\"FLOAT\" pocketbiztype=\"discount\" editable=\"1\"/>
</fields>
…
<mapping>
<datamember editsetfield=\"setDetailQty\" model=\"stdqtyA\"/>
<datamember editsetfield=\"SetDisc1\" model=\"disc1pcnt\"/>
<datamember editsetfield=\"SetDisc2\" model=\"disc2pcnt\"/>
<datamember editsetfield=\"Setssditemdiscpcnt\" model=\"ssditemdiscpcnt\"/>
<datamember editsetfield=\"Setssdpricelistdiscpcnt\" model=\"ssdpricelistdiscpcnt\"/>
</mapping>
Σύνθετη Διαχείριση Εκπτώσεων
Ενεργοποιείται στο pda, με το πλήκτρο %. Επεξεργάζεται τον πίνακα tblDiscounts. Απαιτείται η παράμετρος SPECIALDISC.
Στον tbldiscounts πρέπει να ορίσουμε 2 βασικά πράματα:
-Ποιοι πελάτες ή / και είδη παίρνουν έκπτωση
-Πόση έκπτωση παίρνουν
Πιο συγκεκριμένα:
Ποιοι πελάτες ή / και είδη παίρνουν έκπτωση
Αν SPECIALDISC=1 ή SPECIALDISC=0
Οριζεται σύμφωνα με τις τιμές των πεδίων cusdiscgroupid (DiscGroupID από CUS) και stidiscgroupid (DiscGroupID από STI). Πρακτικά, αν έχουμε κατηγορίες πελατών ή/και κατηγορίες ειδών για τις οποίες θέλουμε να εφαρμόζονται εκπτώσεις, τότε στις εγγραφές του cus ή/και στις εγγραφές του sti που μας ενδιαφέρουν, θα πρέπει να δώσουμε τιμές στο πεδίο DiscGroupID (είτε του CUS είτε / και του STI). Στη συνέχεια, θα πρέπει να δημιουργήσουμε στον tbldiscounts τουλάχιστον τοσες εγγραφές (μπορεί να υπάρχουν κ περισσότερες από μία εγγραφές με εκπτώσεις που να αντιστοιχούν στον ίδιο συνδυασμό) όσοι και οι συνδυασμοι κατηγοριών ειδών και πελατών που δικαιούνται έκπτωση, ενημερώνοντας τα πεδία cusdiscgroupid (DiscGroupID από CUS) και stidiscgroupid (DiscGroupID από STI). Ρίχνει την τιμή του discperc1 στο πεδίο itemdisc του grid και την τιμή του discperc2 στο πεδίο prcdisc του grid. Μετά καλεί την Calculate_Extended_Price για να ξαναεφαρμόσει τις εκπτώσεις στην τιμή γραμμής.
Η διαφορά αναμεσα στις 2 τιμές SPECIALDISC=1 ή SPECIALDISC=0 είναι πως αν SPECIALDISC=0 τοτε θα συμπεριληφθούν και οι εγγραφες με CUSDiscGroupID = NULL .
Αν SPECIALDISC=1 τότε δεν θα συμπεριληφθούν και οι εγγραφες με CUSDiscGroupID = NULL, εκτός αν ο ο επιλεγμένος πελάτης δεν έχει ειδικό τιμοκατάλογο
Εκτός από τα cusdiscgroupid και stidiscgroupid, έχει προστεθεί επίσης (19/09/2008) σαν κριτήριο και το cpmid, που σημαίνει ότι μια γραμμή έκπτωσης με cpmid διάφορο του null θα εφαρμοστεί για τους πελάτες εκείνους με cpmid τη συγκεκριμένη τιμή.
Αν SPECIALDISC=2 (14/12/2009)
Εμπλουτίζεται ο τρόπος με τον οποίο βρίσκουμε το ποιες εγγραφές του tbldiscounts θα επιλεχθούν (οι τρόποι ανάθεσης εκπτώσεων παραμένουν ίδιοι και για τις 2 περιπτώσεις), δηλαδή αντικαθίσταται η χρήση των πεδίων CUSDiscGroupID και STIDiscGroupID με τον πίνακα
tblDiscountGroupTypes
| ID JoinTable1 JoinTable2 JoinTable3 JoinTable4 JoinField1 JoinField2 JoinField3 JoinField4 Priority |
|---|
| 1 CUS STI discgroupid discgroupid 2 |
| 2 CUS cusid 3 |
| 3 CUS STI CUS discgroupid discgroupid udffloat1 1 |
| 4 LEE STI leeid stiid 4 |
όπου
τα πεδία JoinTableX, δηλώνουν τους πίνακες με τους οποίους θα γίνεται το join με τον tbldiscounts,
τα JoinFieldX δηλώνουν τα πεδία με τα οποία γίνεται το join ανά πίνακα και
το Priority τη σειρά με την οποία θα εφαρμόζονται οι εκπτώσεις του κάθε τύπου (στο σγκεκριμένο παράδειγμα η σειρα επεξεργασιας θα είναι 4,3,2,1)
ενώ στον tbldiscounts προστίθενται τα πεδία
DiscountGroupTypeID και DiscountGroupJoinField1Value, DiscountGroupJoinField2Value, DiscountGroupJoinField3Value, DiscountGroupJoinField4Value
όπου
το DiscountGroupTypeID θα δηλώνει το σε τι τύπου έκπτωση αντιστοιχεί η συγκεκριμένη εγγραφή του tbldiscounts, και
τα DiscountGroupJoinFieldΧValue δηλώνουν τις τιμές με τις οποίες θα γίνεται το join μεταξύ του tbldiscounts και του JoinTableΧ πίνακα.
Πόση έκπτωση παίρνουν
Όλα τα παρακάτω ισχύουν όταν η παράμετρος EXTENDED_DISC_CALC=1 :
Επεξεργασία πολλών γραμμών έκπτωσης για μία γραμμή είδους:
Τα πεδία Disc1Field, Disc2Field καθορίζουν σε ποιό πεδίο του tblInvDetail θα πέσουν οι τιμές των εκπτώσεων από τα πεδία DiscPerc1 και DiscPerc2 του tblDiscounts. Οι διαθέσιμες τιμές είναι itemdisc, prcdisc, disc1pcnt, disc2pcnt και τα πεδία του tblinvdetail στα οποία αντιστοιχούν είναι ssditemdiscpcnt, ssdpricelistdiscpcnt, disc1pcnt, disc2pcnt.
Τα πεδία Disc1Way, Disc2Way καθορίζουν τη συμπεριφορά της επόμενης εγγραφής έκπτωσης που θα πέσει στα πεδία Disc1Field και Disc2Field : Αν τα Disc1Way, Disc2Way έχουν την τιμή 0 ή null, τότε κάθε επόμενη τιμή που θα πέφτει στα πεδία Disc1Field και Disc2Field αντίστοιχα, θα αντικαθιστά την προηγούμενη, με αποτέλεσμα να μείνει αυτή που έπεσε τελευταία (default συμπεριφορά). Αν τα Disc1Way, Disc2Way έχουν την τιμή 1, τότε κάθε επόμενη τιμή έκπτωσης που θα πέφτει, θα προστίθεται στην τιμή που έχει ήδη το πεδίο.
Η παράμετρος KEEPUSERDISCOUNTS καθορίζει το αν θα χρησιμοποιηθεί σε όλους τους υπολογισμούς σαν αρχική τιμή η τιμή της έκπτωσης που υπάρχει ήδη στο αντίστοιχο κελί (π.χ. αυτή που ήδη μπορεί να έχει καταχωρηθεί από το χρήστη πριν πατήσει το %).
Αλλαγή Τιμής: Αν το πεδίο Price στον tbldiscounts έχει τιμή, τότε χρησιμοποιείται αυτή η τιμή σαν τιμή μονάδας για το συγκεκριμένο είδος καθόλη τη διάρκεια υπολογισμού των εκπτώσεων. Στην ίδια γραμμή έκπτωσης μπορούν να υπάρχουν και επιπλέον εκπτώσεις, οι οποίες θα εφαρμοστούν στη νεώτερη τιμή. Αν υπάρχουν περισσότερες από μία εγγραφές που αλλάζουν την τιμή, τότε θα ισχύσει αυτή της τελευταίας.
Ποσοτικές εκπτώσεις: Το πεδίο FromQty στον tbldiscounts δηλώνει το κάτω όριο σε ποσοτική έκπτωση. Tο πεδίο DiscountKind: Αν είναι 1 δηλώνει οτι το κάτω όριο αφορά ποσότητα στη γραμμή, αν είναι 2 δηλώνει οτι το κάτω όριο αφορά συνολική ποσότητα παραγγελίας, ενώ αν είναι 3 δηλώνει ότι αφορά συνολική ποσότητα γκρουπ είδους (είδη με ίδιο DiscGroupID). Υποστηρίζονται πολλές διαφορετικές ποσοτικές εκπτώσεις για την ίδια γραμμή και ταυτοχρονα και μη ποσοτικές. Οι υπολογισμοί των εκπτώσεων απο κει και πέρα, εφαρμόζονται κανονικά σύμφωνα με το 1.
Αν η παράμετρος EXTENDED_DISC_CALC=0 :
Επεξεργασία πολλών γραμμών έκπτωσης για μία γραμμή είδους:
Οι τιμές των εκπτώσεων από τα πεδία DiscPerc1 και DiscPerc2 του tblDiscounts πέφτουν στα πεδία Itemdisc, prcdisc του tblInvDetail. Τα πεδία του tblinvdetail στα οποία αντιστοιχούν είναι ssditemdiscpcnt, ssdpricelistdiscpcnt. Αν υπάρχουν περισσότερες από μία γραμμές για μία γραμμή είδους, γίνεται αντικατάσταση, δηλαδή κάθε τιμή έκπτωσης που πέφτει αντικαθιστά την προηγούμενη, με αποτέλεσμα να μείνει αυτή που έπεσε τελευταία.
Σημείωση:
1. Με την παράμετρο CALCPERCENTATSAVE=1 στον configuration, το πλήκτρο % πατιέται αυτόματα κατά την αποθήκευση του παραστατικού
2. Η σειρά με την οποία έρχονται οι γραμμές απ’ τον tbldiscounts είναι
- αν έχουμε ποσοτικές :
order by STIDiscGroupID,CUSDiscGroupID, FromQty, DiscountKind, DiscountID DESC
αν δεν έχουμε ποσοτικές
order by STIDiscGroupID,CUSDiscGroupID, DiscountID DESC
Ειδικές Εκπτώσεις
-Στον tblInvDetail έχουν προστεθεί τα πεδία disc1pcnt, disc2pcnt, disc1, disc2 και ουσιαστικά συμπληρώνουν τις Απλές Εκπτώσεις, με την έννοια ότι συνδέονται με τις παραμέτρους του configuration DISC1_DISCOUNT_LEVEL, DISC2_DISCOUNT_LEVEL με αντίστοιχη λειτουργία με τις παραμέτρους PRODUCT_DISCOUNT_LEVEL, PRICELIST_DISCOUNT_LEVEL, CUSTOMER_DISCOUNT_LEVEL, PAYMENT_DISCOUNT_LEVEL.
-Προσθήκη έκπτωσης «sticker», που πέφτει πρώτη από όλες τις εκπτώσεις. Υλοποιήθηκε με προσθήκη του πεδίου extradisc στον STI και στον tblInvDetail. Δεν χρησιμοποιείται παράμετρος, απλώς ελέγχεται η ύπαρξη του πεδίου STI.extradisc
-Τιμοκατάλογοι με “καρφωτές” τιμές, που δεν παίρνουν έκπτωση. Υλοποιήθηκε με προσθήκη του πεδίου notacceptdisc στον PST και προσθήκη πεδίου pstid στον tblInvDetail. Δεν χρησιμοποιείται παράμετρος, απλώς ελέγχεται η ύπαρξη του πεδίου PST.notacceptdisc.
Online Τιμολογιακές Πολιτικές
Στον συγκεκριμένο τύπο εκπτώσεων, ο πωλητής συμπληρώνει το παραστατικό και λαμβάνει τις εκπτώσεις, που αφορούν τις γραμμές του, από κάποιο web service. Όλες οι απαιτούμενες ενέργειες και η κλήση του web service, γίνονται με χρήση του κουμπιού %. Με τον τρόπο αυτό πολύπλοκες τιμολογιακές πολιτικές εκτελούνται στον server και η εφαρμογή Pocketbiz Desktop απλά χρησιμοποιεί τα αποτελέσματα τους.
Για την χρήση αυτής της λειτουργίας χρησιμοποιούνται οι ακόλουθες παράμετροι του πίνακα Configuration:
- APPLYDPMETHOD Επειδή το κουμπί % χρησιμοποιείται για την εφαρμογή και άλλων τιμολογιακών πολιτικών, η παράμετρος αυτή καθορίζει τον τύπο των τιμολογιακών πολιτικών που θα εφαρμοστούν. Οι online τιμολογιακές πολιτικές εκτελούνται όταν η τιμή της παραμέτρου είναι 1.
- AUTOBLOCKORDER Καθορίζει, στην παραγγελιοληψία (fsalesOrder), αν το πεδίο «μπλοκάρισμα» (chkBlockOrder) είναι readonly ή όχι. Αν η παράμετρος αυτή έχει την τιμή 1, τότε το πρόγραμμα χειρίζεται αυτόματα τις τιμές του chkBlockOrder:
- το κουμπί % βάζει τιμή 1
- το save βάζει τιμή 0.
- ONLINEDISCOUNTSXML Περιέχει, με μορφή xml, τα δεδομένα, που:
- ορίζουν το web service που θα κληθεί για την εφαρμογή των online τιμολογιακών πολιτικών
- δημιουργούν το soap envelope που χρειάζεται το συγκεκριμένο web service
Η τιμή της παραμέτρου OnlineDiscountsXML έχει την παρακάτω μορφή:
<AndroidLayout>
<webservice url="" webservicetype="" requesttype="" responsetype=""
username="" password="" />
<header query="" request="" />
<detail query="" request="" />
<mapping detailsList="TbOrderItems" detailItem="item"
nlineno="ItmNumber" price="" disc1value="" disc2value=""
itemDiscountPcnt="" pricelistDiscountPcnt="" disc1pcnt=""
disc2pcnt="" pricelistDiscountUnitValue=""
itemDiscountUnitValue="" />
</AndroidLayout>
Παρατήρηση: Το root tag έχει όνομα «AndroidLayout» επειδή η αρχική υλοποίηση έγινε στην Android εφαρμογή PocketBiz 2012.
Το tag «webservice» περιέχει γενικές πληροφορίες σχετικά με το web service. Tα attributes που υποστηρίζει είναι τα εξής:
- «url» To url του web service που θα κληθεί για την εφαρμογή των τιμολογιακών πολιτικών.
- «webservicetype» Ο τύπος του web service. Οι τιμές που επιτρέπονται είναι «soap» και «rest», αλλά έχει υλοποιηθεί μόνο η soap (χρήση XML web service).
- «requesttype» Ο τύπος του αιτήματος, που αποστέλλεται στο web service. Οι τιμές που επιτρέπονται είναι «xml» και «json», αλλά έχει υλοποιηθεί μόνο η xml.
- «responsetype» Ο τύπος της απόκρισης του web service. Οι τιμές που επιτρέπονται είναι «xml» και «json», αλλά έχει υλοποιηθεί μόνο η xml.
- «username» To username που θα χρησιμοποιηθεί στην περίπτωση που απαιτείται authentication.
- «password» To password που θα χρησιμοποιηθεί στην περίπτωση που απαιτείται authentication.
Το tag «header» περιέχει πληροφορίες σχετικά με το μη επαναλαμβανόμενο τμήμα του αιτήματος (request). To τμήμα αυτό περιέχει συνήθως πληροφορίες που αφορούν το header της παραγγελίας. Tα attributes που υποστηρίζει είναι τα εξής:
- «query» Το SQL ερώτημα που επιστρέφει τις τιμές που θα αντικαταστήσουν τα tokens που χρησιμοποιούνται στο ακόλουθο attribute «request».
- «request» Είναι το μη επαναλαμβανόμενο τμήμα του αιτήματος, το οποίο περιέχει (συνήθως) και τις πληροφορίες που αφορούν τον header της παραγγελίας. Τα tokens που περιέχει αυτό το τμήμα θα αντικατασταθούν με τις τιμές που επιστρέφει το SQL ερώτημα που ορίζει το παραπάνω attribute «query». Μπορεί να περιέχει και το token $DETAILS$, το οποίο ορίζει την θέση του επαναλαμβανόμενου τμήματος του αιτήματος. Το token αυτό θα αντικατασταθεί από το αποτέλεσμα που θα παραχθεί από τo tag «detail».
Το tag «detail» περιέχει πληροφορίες σχετικά με το επαναλαμβανόμενο τμήμα του αιτήματος (request). To τμήμα αυτό περιέχει πληροφορίες που αφορούν τις detail γραμμές της παραγγελίας. Tα attributes που υποστηρίζει είναι τα εξής:
- «query» Το SQL ερώτημα που επιστρέφει τις τιμές που θα αντικαταστήσουν τα tokens που χρησιμοποιούνται στο ακόλουθο attribute «request».
- «request» Ορίζει την πρότυπη μορφή, που έχει μία γραμμή του επαναλαμβανόμενου τμήματος του αιτήματος. Ουσιαστικά, ορίζει τη μορφή που έχει μία γραμμή των details του παραστατικού. Τα tokens που περιέχει αυτό το τμήμα θα αντικατασταθούν με τις τιμές που επιστρέφει το παραπάνω SQL ερώτημα. Ο αριθμός των γραμμών που τελικά θα δημιουργηθούν, είναι ίσος με τον αριθμό των εγγραφών που επιστρέφει το παραπάνω SQL ερώτημα. Το σύνολο των γραμμών αυτών, θα αντικαταστήσει το token $DETAILS$ του attribute «request» του tag «header».
Το tag «mapping» περιέχει πληροφορίες σχετικά με τον τρόπο αντιστοίχισης των δεδομένων της απόκρισης του web service, με τα πεδία των γραμμών (details) του παραστατικού. Tα attributes που υποστηρίζει είναι τα ακόλουθα (επειδή δεν έχει υλοποιηθεί η κλήση REST web service, αναφέρεται η χρήση των attributes μόνο για κλήση XML web service):
«detailsList» ΥΠΟΧΡΕΩΤΙΚΟ. Δηλώνει το όνομα του βασικού tag, στο xml της απόκρισης του web service, που περιέχει την πληροφορία που θα χρησιμοποιηθεί για την ενημέρωση των γραμμών του παραστατικού. Η πληροφορία αυτή θα αναφέρεται σε όλα τα είδη που χρησιμοποιήθηκαν στην δημιουργία του αιτήματος προς το web service. Το tag που ορίζει την πληροφορία που αφορά το κάθε είδος ξεχωριστά, ορίζεται στο επόμενο attribute «detailItem».
«detailItem» ΥΠΟΧΡΕΩΤΙΚΟ. Δηλώνει το όνομα του tag που χρησιμοποιείται για τον καθορισμό της πληροφορίας που αφορά το κάθε detail item της απόκρισης του web service (βλέπε και το προηγούμενο attribute). Κάθε ένα από αυτά τα detail items περιλαμβάνει τα δεδομένα που αφορούν μία γραμμή του παραστατικού της εφαρμογής PocketBiz Desktop.
«nlineno» ΥΠΟΧΡΕΩΤΙΚΟ. Είναι απαραίτητo γιατί συσχετίζει την πληροφορία του κάθε detail item της απόκρισης του web service, με την αντίστοιχη γραμμή του παραστατικού της εφαρμογής PocketBiz Desktop. Δηλώνει το όνομα του tag του detail item, που περιέχει τον αριθμό γραμμής του παραστατικού (LineNumber) που πρέπει να ενημερωθεί με την υπόλοιπη πληροφορία του detail item (datatable «tblInvDetail», πεδίο «LineNumber»).
«itemDiscountPcnt» Δηλώνει το όνομα του tag του detail item, που περιέχει την τιμή που πρέπει να τεθεί στο πεδίο ItemDisc της γραμμής του παραστατικού (datatable «tblInvDetail», πεδίο «ItemDisc»).
«pricelistDiscountPcnt» Δηλώνει το όνομα του tag του detail item, που περιέχει την τιμή που πρέπει να τεθεί στο πεδίο PrcDisc της γραμμής του παραστατικού (datatable «tblInvDetail», πεδίο «PrcDisc»).
«price» Δεν χρησιμοποιείται. Υπάρχει για μελλοντική χρήση.
«disc1value» Δεν χρησιμοποιείται. Υπάρχει για μελλοντική χρήση.
«disc2value» Δεν χρησιμοποιείται. Υπάρχει για μελλοντική χρήση.
«disc1pcnt» Δεν χρησιμοποιείται. Υπάρχει για μελλοντική χρήση.
«disc2pcnt» Δεν χρησιμοποιείται. Υπάρχει για μελλοντική χρήση.
«pricelistDiscountUnitValue» Δεν χρησιμοποιείται. Υπάρχει για μελλοντική χρήση.
«itemDiscountUnitValue» Δεν χρησιμοποιείται. Υπάρχει για μελλοντική χρήση.
Παράδειγμα δημιουργίας του αιτήματος προς το web service
Το αίτημα που πρέπει να αποσταλεί στο web service της ΕΛΓΕΚΑ, για χρήση των δικών της τιμολογιακών πολιτικών είναι της ακόλουθης μορφής:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/%22 xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style%22>
<soapenv:Header/>
<soapenv:Body>
<ImDistrChan>20</ImDistrChan>
<ImDivision>10</ImDivision>
<ImDocType>ZOR</ImDocType>
<ImPartnNumb>201298</ImPartnNumb>
<ImPartnRole>AG</ImPartnRole>
<ImReqDate>2014-03-03</ImReqDate>
<ImSalesOrg>1000</ImSalesOrg>
<TbOrderItems>
<!--Zero or more repetitions:-->
<item>
<ItmNumber>00010</ItmNumber>
<ItmMaterial>1352402</ItmMaterial>
<ItmReqQty>10</ItmReqQty>
<ItmSalesUnit>TEM</ItmSalesUnit>
<ItmValue1></ItmValue1>
<ItmValue2></ItmValue2>
<ItmValue3></ItmValue3>
<ItmValue4></ItmValue4>
<ItmValue5></ItmValue5>
<ItmValue6></ItmValue6>
<ItmFlag></ItmFlag>
</item>
<item>
<ItmNumber>00020</ItmNumber>
<ItmMaterial>3251013</ItmMaterial>
<ItmReqQty>5</ItmReqQty>
<ItmSalesUnit>TEM</ItmSalesUnit>
<ItmValue1></ItmValue1>
<ItmValue2></ItmValue2>
<ItmValue3></ItmValue3>
<ItmValue4></ItmValue4>
<ItmValue5></ItmValue5>
<ItmValue6></ItmValue6>
<ItmFlag></ItmFlag>
</item>
</TbOrderItems>
</soapenv:Body>
</soapenv:Envelope>
Η τιμή στο attribute «request» του tag «header», θα είναι η ακόλουθη:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/%22 xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style%22>
<soapenv:Header/>
<soapenv:Body>
<ImDistrChan>$ImDistrChan$</ImDistrChan>
<ImDivision>$ImDivision$</ImDivision>
<ImDocType>$ImDocType$</ImDocType>
<ImPartnNumb>$ImPartnNumb$</ImPartnNumb>
<ImPartnRole>$ImPartnRole$</ImPartnRole>
<ImReqDate>$ImReqDate$</ImReqDate>
<ImSalesOrg>$ImSalesOrg$</ImSalesOrg>
<TbOrderItems>
<!--Zero or more repetitions:-->
$DETAILS$
</TbOrderItems>
</soapenv:Body>
</soapenv:Envelope>
Όλα τα tokens, πλην του $DETAILS$, θα αντικατασταθούν από τις τιμές που θα επιστρέψει το SQL ερώτημα που ορίζεται στο attribute «query» του tag «header».
Η τιμή στο attribute «request» του tag «detail», θα είναι η ακόλουθη:
<item>
<ItmNumber>$ItmNumber$</ItmNumber>
<ItmMaterial>$ItmMaterial$</ItmMaterial>
<ItmReqQty>$ItmReqQty$</ItmReqQty>
<ItmSalesUnit>TEM</ItmSalesUnit>
<ItmValue1></ItmValue1>
<ItmValue2></ItmValue2>
<ItmValue3></ItmValue3>
<ItmValue4></ItmValue4>
<ItmValue5></ItmValue5>
<ItmValue6></ItmValue6>
<ItmFlag></ItmFlag>
</item>
Όπως φαίνεται, ορίζεται η πρότυπη μορφή που αφορά το κάθε είδος, η οποία περιέχει tokens που θα λάβουν τιμή από τις εγγραφές που θα επιστρέψει το SQL ερώτημα που ορίζεται στο attribute «query» του tag «detail».
Η εφαρμογή θα δημιουργήσει το τελικό soap envelope και θα το στείλει στο web service, που θα απαντήσει με την ακόλουθη απόκριση:
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/%22>
<soap-env:Header/>
<soap-env:Body>
<n0:ZrfcSalesorderSimulateResponse
xmlns:n0="urn:sap-com:document:sap:soap:functions:mc-style%22>
<ExBillToParty>
<Payer>0000103168</Payer>
<Name>ΞΥΝΟΣ ΑΕ S/M</Name>
<Street>Μ157-ΒΛΑΧΑΚΗ 44</Street>
<PoBox/>
<PostlCode>11525</PostlCode>
<PobxPcd/>
<City>ΕΛΛΗΝΟΡΩΣΩΝ ΑΘΗΝΑ</City>
<Langu>G</Langu>
<Country>GR</Country>
<Telephone>210 6741050</Telephone>
<CCtrArea>1000</CCtrArea>
<CredAccnt>0000103168</CredAccnt>
<CredLimit>400000.0</CredLimit>
<OrderVals>0.0</OrderVals>
<RcvblVals>55864.46</RcvblVals>
<CredLiab>43378.29</CredLiab>
<Currency>EUR</Currency>
<MnInvoice/>
<BillSched/>
<ListSched/>
<ValLimit>0.0</ValLimit>
<AccntAsgn>01</AccntAsgn>
<Pmnttrms>Z090</Pmnttrms>
<AddValDy>00</AddValDy>
<FixValDy>0000-00-00</FixValDy>
<ProdProp>0059103168</ProdProp>
<BillBlock/>
<OrderBlck/>
<VatRegNo/>
<VatCntry/>
<TaxClass1/>
<TaxClass2/>
<TaxClass3/>
<TaxClass4/>
<TaxClass5/>
<TaxClass6/>
<TaxClass7/>
<TaxClass8/>
<TaxClass9/>
<RebateRel>X</RebateRel>
<RebateFrm>1999-12-24</RebateFrm>
<CredGroup/>
<ReprGroup/>
<RiskCateg>315</RiskCateg>
<TradeId/>
</ExBillToParty>
<ExReturn>
<Type/>
<Code/>
<Message/>
<LogNo/>
<LogMsgNo>000000</LogMsgNo>
<MessageV1/>
<MessageV2/>
<MessageV3/>
<MessageV4/>
</ExReturn>
<ExShipToParty>
<ShipTo>0000201298</ShipTo>
<Name>ΞΥΝΟΣ ΑΕ S/M</Name>
<Street>Μ165-Λ.ΚΑΡΑΜΑΝΛΗ</Street>
<PoBox/>
<PostlCode>19013</PostlCode>
<PobxPcd/>
<City>ΑΝΑΒΥΣΣΟΣ ΑΤΤΙΚΗ</City>
<Langu>G</Langu>
<DestCntry>GR</DestCntry>
<TrnspZone>200026</TrnspZone>
<TrainStat/>
<ExprStat/>
<Telephone>22910 41144-5</Telephone>
<UnloadPt>ΑΠΟΘΗΚΗ</UnloadPt>
<FacCalend>Z4</FacCalend>
<RecvHours>019</RecvHours>
<MoAmFrom>08:00:00</MoAmFrom>
<MoAmUntl>14:00:00</MoAmUntl>
<MoPmFrom>00:00:00</MoPmFrom>
<MoPmUntl>00:00:00</MoPmUntl>
<TuAmFrom>00:00:00</TuAmFrom>
<TuAmUntl>00:00:00</TuAmUntl>
<TuPmFrom>00:00:00</TuPmFrom>
<TuPmUntl>00:00:00</TuPmUntl>
<WeAmFrom>00:00:00</WeAmFrom>
<WrAmUntl>00:00:00</WrAmUntl>
<WePmFrom>00:00:00</WePmFrom>
<WePmUntl>00:00:00</WePmUntl>
<ThAmFrom>08:00:00</ThAmFrom>
<ThAmUntl>14:00:00</ThAmUntl>
<ThPmFrom>00:00:00</ThPmFrom>
<ThPmUntl>00:00:00</ThPmUntl>
<FrAmFrom>00:00:00</FrAmFrom>
<FrAmUntl>00:00:00</FrAmUntl>
<FrPmFrom>00:00:00</FrPmFrom>
<FrPmUntl>00:00:00</FrPmUntl>
<SaAmFrom>00:00:00</SaAmFrom>
<SaAmUntl>00:00:00</SaAmUntl>
<SaPmFrom>00:00:00</SaPmFrom>
<SaPmUntl>00:00:00</SaPmUntl>
<SuAmFrom>00:00:00</SuAmFrom>
<SuAmUntl>00:00:00</SuAmUntl>
<SuPmFrom>00:00:00</SuPmFrom>
<SuPmUntl>00:00:00</SuPmUntl>
<VatRegNo/>
<TaxClass1/>
<TaxClass2/>
<TaxClass3/>
<TaxClass4/>
<TaxClass5/>
<TaxClass6/>
<TaxClass7/>
<TaxClass8/>
<TaxClass9/>
<Region>023</Region>
<CountyCde/>
<CityCode/>
<Taxjurcode/>
<CtrdataOk/>
<DlvPlant>1600</DlvPlant>
<DlvBlock/>
<OrderBlck/>
<ProdProp>0059201298</ProdProp>
<ShipCond>01</ShipCond>
<Acc1Time/>
<AccntGrp>3A00</AccntGrp>
<DescPartn/>
<FyVariant/>
<ProdAttr1/>
<ProdAttr2/>
<ProdAttr3/>
<ProdAttr4/>
<ProdAttr5/>
<ProdAttr6/>
<ProdAttr7/>
<ProdAttr8/>
<ProdAttr9/>
<ProdAttra/>
</ExShipToParty>
<ExSoldToParty>
<SoldTo>0000201298</SoldTo>
<Name>ΞΥΝΟΣ ΑΕ S/M</Name>
<Street>Μ165-Λ.ΚΑΡΑΜΑΝΛΗ</Street>
<PoBox/>
<PostlCode>19013</PostlCode>
<PobxPcd/>
<City>ΑΝΑΒΥΣΣΟΣ ΑΤΤΙΚΗ</City>
<Langu>G</Langu>
<Country>GR</Country>
<Telephone>22910 41144-5</Telephone>
<StatGroup>1</StatGroup>
<OrderBlck/>
<PrcProced>1</PrcProced>
<CustGroup>10</CustGroup>
<SalesDist>041494</SalesDist>
<PriceGrp>00</PriceGrp>
<PriceList>01</PriceList>
<Incoterms1/>
<Incoterms2/>
<ComplDlv/>
<MaxPlDlv>2</MaxPlDlv>
<OrderComb/>
<BtchSplit/>
<DlvPrio>02</DlvPrio>
<Currency>EUR</Currency>
<ExchgRate/>
<ShipCond>01</ShipCond>
<PartDlv/>
<OrderProb>100</OrderProb>
<DlvBlock/>
<ProdProp>0059201298</ProdProp>
<Acc1Time/>
<SalesOff>0200</SalesOff>
<SalesGrp>214</SalesGrp>
<VatRegNo/>
<TaxClass1/>
<TaxClass2/>
<TaxClass3/>
<TaxClass4/>
<TaxClass5/>
<TaxClass6/>
<TaxClass7/>
<TaxClass8/>
<TaxClass9/>
<CompanyId/>
</ExSoldToParty>
<TbOrderItems>
<item>
<ItmNumber>000001</ItmNumber>
<ItmMaterial>3251013</ItmMaterial>
<ItmReqQty>0000000000005</ItmReqQty>
<ItmSalesUnit>TEM</ItmSalesUnit>
<ItmValue1>0.0</ItmValue1>
<ItmValue2>0.0</ItmValue2>
<ItmValue3>0.0</ItmValue3>
<ItmValue4>0.0</ItmValue4>
<ItmValue5>0.0</ItmValue5>
<ItmValue6>0.0</ItmValue6>
<ItmFlag/>
</item>
<item>
<ItmNumber>000000</ItmNumber>
<ItmMaterial/>
<ItmReqQty>0000000000000</ItmReqQty>
<ItmSalesUnit/>
<ItmValue1>0.0</ItmValue1>
<ItmValue2>0.0</ItmValue2>
<ItmValue3>0.0</ItmValue3>
<ItmValue4>0.0</ItmValue4>
<ItmValue5>0.0</ItmValue5>
<ItmValue6>0.0</ItmValue6>
<ItmFlag/>
</item>
</TbOrderItems>
</n0:ZrfcSalesorderSimulateResponse>
</soap-env:Body>
</soap-env:Envelope>
Όπως φαίνεται η πληροφορία που αφορά την ενημέρωση των γραμμών του παραστατικού βρίσκεται εντός του tag «TbOrderItems», άρα στο tag «mapping» θα πρέπει να έχουμε θέσει:
- detailsList = "TbOrderItems"
- detailItem = "item"
- nlineno = "ItmNumber"
- itemDiscountPcnt = Κάποια από της παραμέτρους ItmValue1 – ItmValue6
- pricelistDiscountPcnt = Κάποια από της παραμέτρους ItmValue1 – ItmValue6
ΠΑΡΑΤΗΡΗΣΕΙΣ:
- Αν κάποιο attribute του mapping tag δεν δεθεί με κάποιο xml tag της απόκρισης του web service ή δεν το ορίσουμε καν στο xml, τότε το πεδίο θα διατηρήσει την υπάρχουσα τιμή του στο παραστατικό.
- Στα SQL ερωτήματά μπορούμε να χρησιμοποιήσουμε και το token $ID$
Σχετικές Παράμετροι Πίνακα Configuration
| ΠΑΡΑΜΕΤΡΟΣ | ΛΕΙΤΟΥΡΓΙΑ | ΤΙΜΕΣ | DEFAULT |
|---|---|---|---|
| CUSTOMER_DISCOUNT_LEVEL | Η σειρά με την οποία θα υπολογίζεται η έκπτωση πελάτη. | 1-4 | 3 |
| PRODUCT_DISCOUNT_LEVEL | Η σειρά με την οποία θα υπολογίζεται η έκπτωση είδους. | 1-4 | 1 |
| PAYMENT_DISCOUNT_LEVEL | Η σειρά με την οποία θα υπολογίζεται η έκπτωση τρόπου πληρωμής. | 1-4 | 4 |
| PRICELIST_DISCOUNT_LEVEL | Η σειρά με την οποία θα υπολογίζεται η έκπτωση τιμοκαταλόγου. | 1-4 | 2 |
| EXTENDED_DISC_CALC | Στον υπολογισμό των εκπτώσεων με το %, χρησιμοποιούνται και τα πεδία Disc1Field, Disc2Field, Disc1Way, Disc2Way τα οποία καθορίζουν σε ποιό πεδίο του παραστατικού και με ποιό τρόπο θα πέσουν τα DiscPerc1, DiscPerc2 του tblDiscounts (0=αντικατάσταση, 1=πρόσθεση) | 0,1 | 0 |
| DISC1_DISCOUNT_LEVEL | Αναφέρεται στο με ποιά σειρά θα προστεθει η έκπτωση disc1pcnt στη γραμμή του παραστατικού. Ανάλογη των ....DiscountLevel παραμέτρων για τις άλλες εκπτώσεις του παραστατικού | ακέραιος | 0 |
| DISC2_DISCOUNT_LEVEL | Αναφέρεται στο με ποιά σειρά θα προστεθει η έκπτωση disc2pcnt στη γραμμή του παραστατικού. Ανάλογη των ....DiscountLevel παραμέτρων για τις άλλες εκπτώσεις του παραστατικού | ακέραιος | 0 |
| USESTPDISCOUNTS | Όταν έχει την τιμή 1, τότε η τιμή του πεδίου STP.stpitemdiscpcnt πέφτει στο πεδίο tblInvDetail.ssditemdiscpcnt και η τιμή του πεδίου STP.stppricelistdiscpcnt πέφτει στο πεδίο tblInvDetail.ssdpricelistdiscpcnt | 0,1 | |
| CALCPERCENTATSAVE | το πλήκτρο % πατιέται αυτόματα κατά την αποθήκευση του παραστατικού | 0,1 | 0 |
| KEEPUSERDISCOUNTS | Ρυθμίζει αν η έκπτωση που έχει δώσει ο χρήστης θα χρησιμοποιηθεί σαν εναρκτήρια τιμή όταν υπολογίζουμε εκπτώσεις από τον tblDiscounts (κουμπί %) | 0,1 | 0 |
| APPLYDPMETHOD | Ρυθμίζει αν θα εφαρμοστούν οι κλασικές ή οι online τιμολογιακές πολιτικές με το πάτημα του κουμπιού % (1 online) | 0, 1 | 0 |
| AUTOBLOCKORDER | Ρυθμίζει αν στην παραγγελιοληψία (fsalesOrder), το πεδίο «μπλοκάρισμα» (chkBlockOrder) είναι readonly. Το πρόγραμμα χειρίζεται αυτόματα τις τιμές του, το κουμπί % βάζει τιμή 1, το save βάζει τιμή 0. | 0, 1 | 0 |
| ONLINEDISCOUNTSXML |
Περιέχει, με μορφή xml, τα δεδομένα, που:
|
XML δεδομένα, String.Empty | String.Empty |
Σχετικοί Πίνακες
PST – Τιμοκατάλογοι
STP – Είδη ανά τιμοκατάλογο
tblDiscounts – Σύνθετες Εκπτώσεις
STI – Είδη
CUS – Πελάτες
Διαφορές στην έκδοση Android
Τα ονόματα των πεδίων και των πινάκων στο Android είναι case sensitive. Για αυτό θα πρέπει να ελέγξετε στον tblDiscountGroupTypes αν τα περιεχόμενα του έχουν το σωστό case, δηλαδή το case που υπάρχει στη βάση του πελάτη, αλλιώς δεν θα λειτουργήσει.
Υποστηρίζονται groups που μπορούν να έχουν πεδία των πινάκων CUS, STI, LEE, CPM και SDT.
Αν βρίσκεστε σε debug mode, μπορείτε να δείτε ποιά έκπτωση του tblDiscounts έχει χρησιμοποιηθεί. Για να το κάνετε αυτό πατάτε το μολύβι και μετά κάνετε κλικ πάνω στο όνομα του προιόντος.
Πιστωτικός Έλεγχος
Ο πιστωτικός έλεγχος συγκρίνει το πιστωτικό όριο του πελάτη με το τρέχον υπόλοιπο και εμφανίζει προειδοποιητικό μήνυμα ή απαγορεύει την έκδοση παραστατικού. Λειτουργεί στο module της παραγγελιοληψίας και του ex-van.
Το πεδίο CUSCREDITLIMITTYPE του πίνακα CUS καθορίζει αν θα γίνεται έλεγχος, οι διαθέσιμες τιμές είναι:
0: Δεν γίνεται έλεγχος
1: Προειδοποιητικό μήνυμα
2: Απαγορευτικό μήνυμα
3 ή null: Χρησιμοποιεί την παράμετρο CUSCREDITLIMITTYPE του configuration
Οι διαθέσιμες τιμές της παραμέτρου CUSCREDITLIMITTYPE του configuration είναι οι παρακάτω:
1: Κανένας έλεγχος
2: Προειδοποίηση
3: Απαγόρευση
Για να γίνει ο έλεγχος το πρόγραμμα συγκρίνει το πιστωτικό όριο του πελάτη με το άθροισμα του υπολοίπου του πελάτη (CUS.balance) και την αξία του τρέχοντος παραστατικού. Αν η παράμετρος CUSCREDITLIMITCHECKTYPE έχει την τιμή 1 τότε εξαιρεί το τρέχον παραστατικό. Αν ο τρόπος πληρωμής του παραστατικού είναι ίδιος με την τιμή της παραμέτρου CPMIDCASH πάλι εξαιρείται το τρέχον παραστατικό.
Αν η παράμετρος DYNAMICCREDITLIMIT έχει τιμή 1 ή 2 τότε δεν υπολογίζεται μόνο το τρέχον παραστατικό αλλά όλα τα παρ/κα που έχουν εκδοθεί εκείνη την ημέρα.