Ομαδοποίηση σε ένα αίτημα. Ομαδοποίηση σε Ερώτημα Αθροιστικές συναρτήσεις γλώσσας ερωτήματος

Ομαδοποίηση σε ένα αίτημα.  Ομαδοποίηση σε Ερώτημα Αθροιστικές συναρτήσεις γλώσσας ερωτήματος

Η γλώσσα ερωτημάτων 1C είναι μία από τις κύριες διαφορές μεταξύ των εκδόσεων 7.7 και 8. Ένα από τα πιο σημαντικά σημεία στην εκμάθηση του προγραμματισμού 1C είναι η γλώσσα ερωτημάτων. Στο 1C 8.3, τα ερωτήματα είναι το πιο ισχυρό και αποτελεσματικό εργαλείο για τη λήψη δεδομένων. Η γλώσσα ερωτήματος σάς επιτρέπει να λαμβάνετε πληροφορίες από τη βάση δεδομένων με βολικό τρόπο.

Η ίδια η σύνταξη θυμίζει πολύ την κλασική T-SQL, με τη διαφορά ότι στο 1C, χρησιμοποιώντας τη γλώσσα ερωτήματος, μπορείτε να λάβετε δεδομένα μόνο χρησιμοποιώντας την κατασκευή Select. Η γλώσσα υποστηρίζει επίσης πιο σύνθετες κατασκευές, για παράδειγμα, (αίτημα εντός αιτήματος). Τα ερωτήματα στο 1C 8 μπορούν να γραφτούν και στα κυριλλικά και στα λατινικά.

Σε αυτό το άρθρο θα προσπαθήσω να μιλήσω για τις κύριες λέξεις-κλειδιά στη γλώσσα ερωτημάτων 1C:

  • επιλέγω
  • επιτρέπεται
  • διάφορος
  • εξπρές
  • πρώτα
  • για αλλαγή
  • έννοια
  • τύπος τιμής (και τελεστής REFERENCE)
  • επιλογή
  • ομάδα από
  • έχοντας
  • ISNULL
  • Ναι NULL
  • συνδέσεις - δεξιά, αριστερά, εσωτερική, πλήρης.

Καθώς και μερικά μικρά κόλπα της γλώσσας 1C, χρησιμοποιώντας τα οποία μπορείτε να δημιουργήσετε βέλτιστα το κείμενο αιτήματος.

Για τον εντοπισμό σφαλμάτων ερωτημάτων στο σύστημα 1C 8.2, παρέχεται ένα ειδικό εργαλείο - η κονσόλα ερωτημάτων. Μπορείτε να δείτε την περιγραφή και να την κατεβάσετε χρησιμοποιώντας τον σύνδεσμο -.

Ας δούμε τους πιο σημαντικούς και ενδιαφέροντες τελεστές της γλώσσας ερωτημάτων 1C.

ΕΠΙΛΕΓΩ

Στη γλώσσα ερωτημάτων 1C Enterprise 8, κάθε ερώτημα ξεκινά με μια λέξη-κλειδί ΕΠΙΛΕΓΩ. Στη γλώσσα 1C δεν υπάρχουν κατασκευές ΕΝΗΜΕΡΩΣΗ, ΔΙΑΓΡΑΦΗ, ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑΣ, ΕΝΙΣΧΥΤΕ· αυτοί οι χειρισμοί εκτελούνται στην τεχνολογία αντικειμένων. Ο σκοπός του είναι να διαβάζει μόνο δεδομένα.

Για παράδειγμα:

ΕΠΙΛΕΓΩ
Τρέχων Κατάλογος.Όνομα
ΑΠΟ
Directory.Nomenclature AS Τρέχων Κατάλογος

Το ερώτημα θα επιστρέψει έναν πίνακα με ονόματα στοιχείων.

Κοντά στη δομή ΕΠΙΛΕΓΩμπορείτε να βρείτε λέξεις-κλειδιά ΓΙΑ ΑΛΛΑΓΗ, ΕΠΙΤΡΕΠΕΤΑΙ, ΔΙΑΦΟΡΟΣ, ΠΡΩΤΑ

ΕΠΙΤΡΕΠΕΤΑΙ— επιλέγει μόνο εγγραφές από τον πίνακα για τις οποίες έχει δικαιώματα ο τρέχων χρήστης.

ΔΙΑΦΟΡΟΣ— σημαίνει ότι το αποτέλεσμα δεν θα περιέχει διπλές γραμμές.

ΕΠΙΛΟΓΗ (ΠΕΡΙΠΤΩΣΗ)

Πολύ συχνά αυτό το σχέδιο υποτιμάται από τους προγραμματιστές. Ένα παράδειγμα χρήσης του:

Τρέχων Κατάλογος.Όνομα,

WHEN Τρέχων Κατάλογος.Υπηρεσία ΤΟΤΕ

"Υπηρεσία"

ΤΕΛΟΣ ΠΩΣ ΝΑ ΠΡΟΒΟΛΗΘΕΙ Ονοματολογία

Directory.Nomenclature AS Τρέχων Κατάλογος

Το παράδειγμα θα επιστρέψει μια τιμή κειμένου στο πεδίο "Τύπος Στοιχείου" - "Προϊόν" ή "Υπηρεσία".

ΟΠΟΥ

Ο σχεδιασμός της γλώσσας ερωτημάτων 1C, η οποία σας επιτρέπει να επιβάλλετε την επιλογή στα λαμβανόμενα δεδομένα. Λάβετε υπόψη ότι το σύστημα λαμβάνει όλα τα δεδομένα από τον διακομιστή και μόνο τότε επιλέγεται με βάση αυτήν την παράμετρο.

ΕΠΙΛΕΓΩ
Κατάλογος.Όνομα
ΑΠΟ
Τρέχων Κατάλογος.Ονοματολογία AS Τρέχων Κατάλογος
WHERE CurrentDirectory.Service = TRUE

Στο παράδειγμα, επιλέγουμε εγγραφές για τις οποίες η τιμή του χαρακτηριστικού "Service" έχει οριστεί σε "True". Σε αυτό το παράδειγμα, θα μπορούσαμε να τα καταφέρουμε με την ακόλουθη συνθήκη:

"ΠΟΥ ΕΙΝΑΙ Η ΥΠΗΡΕΣΙΑ"

Ουσιαστικά, επιλέγουμε σειρές όπου η έκφραση μετά τη λέξη-κλειδί είναι ίση με "True".

Μπορείτε να χρησιμοποιήσετε άμεσες συνθήκες σε εκφράσεις:

WHERE Κωδικός = "005215"

Χρησιμοποιώντας τον τελεστή "VALUE()" στις συνθήκες, χρησιμοποιήστε την πρόσβαση σε προκαθορισμένα στοιχεία και απαριθμήσεις σε ένα αίτημα 1C:

WHERE Τύπος αντικειμένου = Τιμή (Απαρίθμηση. Τύποι στοιχείων. Προϊόν)

Οι τιμές χρόνου μπορούν να καθοριστούν ως εξής:

WHERE Ημερομηνία παραλαβής > DATETIME(2012,01,01):

Τις περισσότερες φορές, οι συνθήκες καθορίζονται ως παράμετροι που μεταβιβάζονται στο αίτημα:

Λάβετε 267 μαθήματα βίντεο στο 1C δωρεάν:

WHERE NomenclatureGroup= &NomenclatureGroup

Μια συνθήκη μπορεί να επιβληθεί στον τύπο χαρακτηριστικού εάν είναι σύνθετου τύπου:

Εάν πρέπει να περιορίσετε την επιλογή από μια λίστα τιμών ή έναν πίνακα, μπορείτε να κάνετε τα εξής:

ΠΟΥ είναι το Μητρώο Συσσώρευσης. Γραμματέας Β (&Κατάλογος Εγγράφων για Επιλογή)

Η κατάσταση μπορεί επίσης να είναι πολύπλοκη, αποτελούμενη από διάφορες συνθήκες:

WHERE Ημερομηνία παραλαβής > DATETIME(2012,01,01) AND NomenclatureGroup= &NomenclatureGroup AND NOT Service

ΟΜΑΔΑ ΑΠΟ

Σχεδιασμός της γλώσσας ερωτημάτων 1C 8.2 που χρησιμοποιείται για την ομαδοποίηση του αποτελέσματος.

Για παράδειγμα:

ΕΠΙΛΕΓΩ
Παραλαβή Αγαθών και Υπηρεσιών Αγαθών.
SUM(Παραλαβή αγαθώνΥπηρεσίεςGoods.Quantity) ΩΣ Ποσότητα,
ΠΟΣΟ (Παραλαβή ΑγαθώνΥπηρεσίες Αγαθά.Ποσό) ΩΣ Ποσό
ΑΠΟ
Έγγραφο Παραλαβή Αγαθών και Υπηρεσιών Αγαθά ΠΩΣ Παραλαβή Αγαθών και Υπηρεσιών Αγαθά

ΟΜΑΔΑ ΑΠΟ
Παραλαβή ΑγαθώνΥπηρεσίεςΕμπορεύματα.Εμπορεύματα

Αυτό το αίτημα θα συνοψίζει όλες τις αποδείξεις ανά ποσότητα και ποσότητα ανά είδος.

Εκτός από τη λέξη-κλειδί ΑΘΡΟΙΣΜΑΜπορείτε να χρησιμοποιήσετε άλλες αθροιστικές συναρτήσεις: ΠΟΣΟΤΗΤΑ, ΑΡΙΘΜΟΣ ΔΙΑΦΟΡΕΤΙΚΩΝ, ΑΝΩΤΑΤΟ ΟΡΙΟ, ΕΛΑΧΙΣΤΟ, ΜΕΣΗ ΤΙΜΗ.

ΕΧΟΝΤΑΣ

Ένα σχέδιο που συχνά ξεχνιέται, αλλά είναι πολύ σημαντικό και χρήσιμο. Σας επιτρέπει να καθορίσετε την επιλογή με τη μορφή αθροιστικής συνάρτησης, αυτό δεν μπορεί να γίνει στη σχεδίαση ΟΠΟΥ.

Παράδειγμα χρήσης HAVING σε αίτημα 1C:

ΕΠΙΛΕΓΩ
Παραλαβή Αγαθών και Υπηρεσιών Αγαθών.
SUM(Παραλαβή αγαθώνΥπηρεσίεςGoods.Quantity) ΩΣ Ποσότητα,
ΠΟΣΟ (Παραλαβή ΑγαθώνΥπηρεσίες Αγαθά.Ποσό) ΩΣ Ποσό
ΑΠΟ
Έγγραφο Παραλαβή Αγαθών και Υπηρεσιών Αγαθά ΠΩΣ Παραλαβή Αγαθών και Υπηρεσιών Αγαθά

ΟΜΑΔΑ ΑΠΟ
Παραλαβή Αγαθών και Υπηρεσιών Αγαθών

SUM(Παραλαβή αγαθώνΥπηρεσίεςΠοσότητα αγαθών) > 5

Έτσι θα επιλέξουμε τον αριθμό των προϊόντων που έφτασαν περισσότερα από 5 τεμάχια.

ΕΝΝΟΙΑ()

Για παράδειγμα:

WHERE Bank = Value(Directory.Banks.EmptyLink)

WHERE Τύπος ονοματολογίας = Τιμή (Κατάλογος. Τύποι ονοματολογίας. Προϊόν)

WHERE Τύπος αντικειμένου = Τιμή (Enumeration.Item Types.Service)

TYPE κατόπιν αιτήματος

Ο τύπος δεδομένων μπορεί να ελεγχθεί χρησιμοποιώντας τις συναρτήσεις TYPE() και VALUETYPE() ή χρησιμοποιώντας τον λογικό τελεστή REFERENCE.

ΕΞΠΡΕΣ()

Ο τελεστής Express σε ερωτήματα 1C χρησιμοποιείται για τη μετατροπή τύπων δεδομένων.

Σύνταξη: ΕΞΠΡΕΣ(<Выражение>ΠΩΣ<Тип значения>)

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

Σε πρακτικές εφαρμογές, ο τελεστής Express() χρησιμοποιείται πολύ συχνά για τη μετατροπή πεδίων απεριόριστου μήκους, επειδή τα πεδία απεριόριστου μήκους δεν μπορούν να επιλεγούν, να ομαδοποιηθούν κ.λπ. Εάν δεν μετατραπούν τέτοια πεδία, θα λάβετε ένα σφάλμα Δεν μπορείτε να συγκρίνετε πεδία απεριόριστου μήκους και πεδία ασυμβίβαστων τύπων.

ΕΠΙΛΕΓΩ
ContactInformation.Object,
EXPRESS(ContactInfo.View AS ROW(150)) AS View
ΑΠΟ
Μητρώο Πληροφοριών Στοιχεία Επικοινωνίας ΠΩΣ Στοιχεία Επικοινωνίας

ΟΜΑΔΑ ΑΠΟ
EXPRESS(ContactInfo.Representation AS ROW(150)),
ContactInformation.Object

ISNULL (ISNULL)

Πολύ χρήσιμη συνάρτηση της γλώσσας ερωτήματος 1C που ελέγχει την τιμή στην εγγραφή και αν είναι ίση ΜΗΔΕΝΙΚΟ,Αυτό σας επιτρέπει να το αντικαταστήσετε με τη δική σας αξία. Συχνά χρησιμοποιείται κατά τη λήψη εικονικών πινάκων υπολοίπων και τζίρου για απόκρυψη ΜΗΔΕΝΙΚΟκαι βάλε καθαρό 0 (μηδέν).

ISNULL(Φόροι πριν από τον μήνα. Επίδομα AppliedFSS, 0)

Μια τέτοια συνάρτηση της γλώσσας ερωτήματος 1C ISNULL θα επιστρέψει μηδέν εάν δεν υπάρχει τιμή, γεγονός που θα αποφύγει ένα σφάλμα.

ΣΥΜΜΕΤΟΧΗ

Υπάρχουν 4 τύποι συνδέσεων: ΑΡΙΣΤΕΡΑ, ΣΩΣΤΑ, ΠΛΗΡΕΣ, ΕΣΩΤΕΡΙΚΟ.

ΑΡΙΣΤΕΡΑ ΚΑΙ ΔΕΞΙΑ ΣΥΝΔΕΣΗ

Οι συνδέσεις χρησιμοποιούνται για τη σύνδεση δύο πινάκων με βάση μια συγκεκριμένη συνθήκη. Χαρακτηριστικό όταν ΑΡΙΣΤΕΡΑ ΣΥΜΜΕΤΟΧΗείναι ότι παίρνουμε τον πρώτο καθορισμένο πίνακα στο σύνολό του και δεσμεύουμε υπό όρους τον δεύτερο πίνακα. Τα πεδία του δεύτερου πίνακα που δεν μπορούσαν να δεσμευτούν από συνθήκη συμπληρώνονται με την τιμή ΜΗΔΕΝΙΚΟ.

Ένα παράδειγμα αριστερής σύνδεσης σε αίτημα 1C:

Θα επιστρέψει ολόκληρο τον πίνακα και θα συμπληρώσει το πεδίο «Τράπεζα» μόνο σε εκείνα τα σημεία όπου πληρούται η προϋπόθεση «Αντισυμβαλλόμενοι.Όνομα = Τράπεζες.Όνομα». Εάν δεν πληρούται η προϋπόθεση, το πεδίο Τράπεζα θα οριστεί σε ΜΗΔΕΝΙΚΟ.

ΔΕΞΙΑ ΣΥΝΔΕΣΗ σε γλώσσα 1C 8.3απολύτως παρόμοια ΑΡΙΣΤΕΡΑ σύνδεση, με εξαίρεση μια διαφορά: στο ΔΙΚΑΙΩΜΑ ΣΥΝΔΕΣΗΣΟ «κύριος» πίνακας είναι ο δεύτερος, όχι ο πρώτος.

ΠΛΗΡΗΣ ΣΥΝΔΕΣΗ

ΠΛΗΡΗΣ ΣΥΝΔΕΣΗδιαφέρει από τα αριστερά και τα δεξιά στο ότι εμφανίζει όλες τις εγγραφές από δύο πίνακες και συνδέει μόνο αυτές που μπορεί να συνδέσει κατά συνθήκη.

Για παράδειγμα:

ΠΛΗΡΗΣ ΣΥΝΔΕΣΗ
Κατάλογος.Τράπεζες ΠΩΣ Τράπεζες

ΜΕ

Η γλώσσα ερωτήματος θα επιστρέψει πλήρως και τους δύο πίνακες μόνο εάν πληρούται η συνθήκη Join records. Σε αντίθεση με την αριστερή/δεξιά ένωση, είναι δυνατό το NULL να εμφανίζεται σε δύο πεδία.

ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ

ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗδιαφέρει από το πλήρες στο ότι εμφανίζει μόνο εκείνες τις εγγραφές που θα μπορούσαν να συνδεθούν σύμφωνα με μια δεδομένη συνθήκη.

Για παράδειγμα:

ΑΠΟ
Κατάλογος Αντισυμβαλλόμενοι AS Πελάτες

ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ
Κατάλογος.Τράπεζες ΠΩΣ Τράπεζες

ΜΕ
Πελάτες.Όνομα = Τράπεζες.Όνομα

Αυτό το ερώτημα θα επιστρέψει μόνο σειρές στις οποίες η τράπεζα και ο αντισυμβαλλόμενος έχουν το ίδιο όνομα.

συμπέρασμα

Αυτό είναι μόνο ένα μικρό μέρος της σύνταξης από τη γλώσσα ερωτημάτων 1C 8· στο μέλλον θα προσπαθήσω να εξετάσω ορισμένα σημεία με περισσότερες λεπτομέρειες, να δείξω και πολλά άλλα!

Ομαδοποιήσεις σε ερωτήματα 1C χρησιμοποιούνται όταν είναι απαραίτητο να συμπτυχθεί ένας πίνακας που λαμβάνεται από μια πηγή δεδομένων από οποιαδήποτε στήλη ( στήλη ομαδοποίησης) και με τις τιμές μιας άλλης στήλης ( ομαδοποιήσιμη στήλη) εκτελέστε ορισμένες μαθηματικές ή στατιστικές πράξεις, για παράδειγμα, υπολογίστε ένα άθροισμα.

Είναι αδύνατο να επεκτείνετε μια ομαδοποίηση μετά την εκτέλεση ενός ερωτήματος και να μάθετε ποιες σειρές περιλαμβάνονται σε αυτήν μετά την εκτέλεση ενός ερωτήματος (σε αντίθεση με τη χρήση Αποτελέσματα).

Όταν χρησιμοποιείτε ομαδοποιήσεις, όλες οι στήλες στο ερώτημα χωρίζονται σε ομαδοποιήσιμες και ομαδοποιήσιμες, δεν πρέπει να υπάρχει στήλη που να μην ανήκει σε μία από τις κατηγορίες. Ταυτόχρονα, μπορεί να μην υπάρχουν στήλες ομαδοποίησης εάν όλες οι στήλες είναι ομαδοποιημένες και αντίστροφα, μπορεί να μην υπάρχουν στήλες ομαδοποίησης εάν όλες είναι ομαδοποιημένες.

Οι στήλες ομαδοποίησης υποδεικνύονται σε μια ειδική ενότητα ερωτημάτων που ξεκινά με τη φράση ΟΜΑΔΑ ΑΠΟ. Οι στήλες που πρόκειται να ομαδοποιηθούν υποδεικνύονται μέσω των συναρτήσεων συγκεντρωτικών στοιχείων στην ενότητα ΕΠΙΛΕΓΩ.

Υπάρχουν 6 τύποι αθροιστικών συναρτήσεων που χρησιμοποιούνται σε ομαδοποιήσεις:

  1. ΑΘΡΟΙΣΜΑ— αθροίζει τις τιμές της ομαδοποιημένης στήλης, ισχύει μόνο για αριθμητικές τιμές.
  2. ΜΕΣΗ ΤΙΜΗ -Υπολογίζει τον αριθμητικό μέσο όρο των τιμών της ομαδοποιημένης στήλης, που ισχύει μόνο για αριθμητικές τιμές.
  3. ΑΝΩΤΑΤΟ ΟΡΙΟ -μπορεί να χρησιμοποιηθεί για οποιονδήποτε τύπο τιμής της στήλης που ομαδοποιείται και επιστρέφει τη μέγιστη τιμή όλων των ομάδων που ομαδοποιούνται. Εάν οι τιμές δεν είναι αριθμητικές, τότε η τελευταία επιστρέφεται κατά την ταξινόμηση με αύξουσα σειρά.
  4. ΕΛΑΧΙΣΤΟ -μπορεί να χρησιμοποιηθεί για οποιονδήποτε τύπο τιμής της ομαδοποιημένης στήλης και επιστρέφει την ελάχιστη τιμή όλων των ομαδοποιημένων. Εάν οι τιμές δεν είναι αριθμητικές, τότε η πρώτη επιστρέφεται κατά την ταξινόμηση με αύξουσα σειρά.
  5. ΠΟΣΟΤΗΤΑ— επιστρέφει τον αριθμό των τιμών στην ομαδοποιημένη στήλη, μπορεί να χρησιμοποιηθεί για οποιοδήποτε τύπο τιμής. Οι τιμές του τύπου δεν λαμβάνονται υπόψη ΜΗΔΕΝΙΚΟ.
  6. ΔΙΑΦΟΡΕΤΙΚΗ ΠΟΣΟΤΗΤΑ –επιστρέφει τον αριθμό των διακριτών τιμών στην ομαδοποιημένη στήλη, μπορεί να χρησιμοποιηθεί για οποιονδήποτε τύπο τιμής. Οι τιμές του τύπου δεν λαμβάνονται υπόψη ΜΗΔΕΝΙΚΟ.

Τα πεδία ερωτήματος στα οποία εφαρμόζονται συγκεντρωτικές συναρτήσεις πρέπει να εκχωρούνται ψευδώνυμα.

Ας δούμε τη χρήση ομαδοποιήσεων σε ερωτήματα 1C χρησιμοποιώντας παραδείγματα.

Η πηγή δεδομένων θα είναι ο πίνακας αγορών προϊόντων Προμήθειες,που αντικατοπτρίζει τις πράξεις παράδοσης αγαθών (κάθε παράδοση σε ξεχωριστή γραμμή):

Εργασία 1.

Μάθετε ποιοι προμηθευτές παρείχαν τα αγαθά.

Λύση:Μια λύση θα μπορούσε να είναι η επιλογή μιας στήλης Προμηθευτήςκαι ομαδοποίηση σύμφωνα με αυτό.

Αίτηση. Κείμενο= "ΕΠΙΛΕΓΩ
Προμήθειες.Προμηθευτής
ΑΠΟ
Προμήθειες ΠΩΣ Προμήθειες
ΟΜΑΔΑ ΑΠΟ
Supplies.Supplier"
;

Εργασία 2.

Μάθετε τη συνολική ποσότητα κάθε τύπου προϊόντος που παρέχεται.

Λύση:Πρέπει να επιλέξετε δύο στήλες: προϊόν και ποσότητα, ομαδοποιήστε το αποτέλεσμα ανά πεδίο Προϊόν,χρησιμοποιώντας τη συνάρτηση αθροιστικών Αθροισμα.

Αίτηση. Κείμενο= "ΕΠΙΛΕΓΩ
Προμήθειες.Προϊόν,
ΠΟΣΟ (Προμήθειες.Ποσότητα) ΩΣ Ποσότητα
ΑΠΟ
Προμήθειες ΠΩΣ Προμήθειες
ΟΜΑΔΑ ΑΠΟ
Προμήθειες. Προϊόν"
;

Εργασία 3.

Προσδιορίστε πόσες μονάδες προμηθεύει κάθε προμηθευτής κατά μέσο όρο.

Λύση:Πρέπει να επιλέξετε δύο στήλες: προμηθευτή και ποσότητα, ομαδοποιήστε το αποτέλεσμα ανά πεδίο Προμηθευτής,χρησιμοποιώντας τη συνάρτηση αθροιστικών Μέση τιμή.

Αίτηση. Κείμενο= "ΕΠΙΛΕΓΩ
Supplies.Supplier,
ΜΕΣΟΣ (Προμήθειες.Ποσότητα) ΩΣ Ποσότητα
ΑΠΟ
Προμήθειες ΠΩΣ Προμήθειες
ΟΜΑΔΑ ΑΠΟ
Supplies.Supplier"
;

Σε αυτό το άρθρο θέλουμε να συζητήσουμε τα πάντα μαζί σας Λειτουργίες γλώσσας ερωτήματος 1C, και κατασκευές γλώσσας ερωτήματος. Ποια είναι η διαφορά μεταξύ λειτουργίας και σχεδίασης; Η συνάρτηση καλείται με παρενθέσεις και πιθανές παραμέτρους σε αυτές και η κατασκευή γράφεται χωρίς παρενθέσεις. Αναμφίβολα όλες τις δομές και τις λειτουργίες της γλώσσας ερωτημάτων 1Cκαθιστούν τη διαδικασία απόκτησης δεδομένων ευέλικτη και πολυλειτουργική. Αυτές οι συναρτήσεις και οι κατασκευές ισχύουν για πεδία αιτήματος και ορισμένες ισχύουν επίσης για συνθήκες.

1C Λειτουργίες γλώσσας ερωτήματος

Γιατί ξεκάθαρη περιγραφή Λειτουργίες γλώσσας ερωτήματος 1Cείναι πολύ λιγότερο συχνή από τις περιγραφές δομών, αποφασίσαμε να αρχίσουμε να εξετάζουμε συναρτήσεις. Τώρα ας δούμε το καθένα ξεχωριστά, περιγράφοντας το σκοπό, τη σύνταξη και το παράδειγμα χρήσης του, έτσι:

1. Λειτουργία ΗΜΕΡΟΜΗΝΙΑ ΩΡΑ- αυτή η συνάρτηση δημιουργεί ένα σταθερό πεδίο με τον τύπο "Ημερομηνία".

Σύνταξη: ΗΜΕΡΟΜΗΝΙΑ ΩΡΑ(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Παράδειγμα χρήσης:

2. Λειτουργία ΔΙΑΦΟΡΑ ΗΜΕΡΟΜΗΝΙΑΣ- επιστρέφει τη διαφορά μεταξύ δύο ημερομηνιών σε μία από τις διαστάσεις (έτος, μήνας, ημέρα, ώρα, λεπτό, δευτερόλεπτο). Η μέτρηση μεταβιβάζεται ως παράμετρος.

Σύνταξη: ΔΙΑΦΟΡΑ(<Дата1>, <Дата2>, <Тип>)

Παράδειγμα χρήσης:

Query.Text = "SELECT | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Qty.Days";

3. Συνάρτηση VALUE- ορίζει ένα σταθερό πεδίο με μια προκαθορισμένη εγγραφή από τη βάση δεδομένων, μπορείτε επίσης να λάβετε έναν κενό σύνδεσμο οποιουδήποτε τύπου.

Σύνταξη: VALUE(<Имя>)

Παράδειγμα χρήσης:

Request.Text = "SELECT //προκαθορισμένο στοιχείο | VALUE(Directory.Currencies.Dollar) AS Dollar, //empty link | VALUE(Document.Receipt of Goods and Services.EmptyLink) AS Receipt, //τιμή μεταφοράς | VALUE(Transfer . Νομικό άτομο. Ατομικό) AS Individual, //προκαθορισμένος λογαριασμός | VALUE(Λογαριασμός. Αυτοφερόμενο. Υλικά) AS Account_10" ;

4. Λειτουργία SELECT- έχουμε μπροστά μας ένα ανάλογο της κατασκευής IF, το οποίο χρησιμοποιείται στον κώδικα, μόνο αυτό χρησιμοποιείται σε ερωτήματα 1C.

Σύνταξη: ΕΠΙΛΟΓΗ ΠΟΤΕ<Выражение>ΕΠΕΙΤΑ<Выражение>ΣΕ ΔΙΑΦΟΡΕΤΙΚΗ ΠΕΡΙΠΤΩΣΗ<Выражение>ΤΕΛΟΣ

Παράδειγμα χρήσης:

Request.Text = //αν το ποσό είναι μεγαλύτερο από 7500, τότε θα πρέπει να υπάρχει έκπτωση 300 ρούβλια, //οπότε εάν ενεργοποιηθεί η συνθήκη τότε η συνάρτηση //επιστρέφει Sum - 300 //διαφορετικά το αίτημα θα επιστρέψει απλά Sum "ΕΠΙΛΟΓΗ | ΕΠΙΛΕΞΤΕ | ΟΤΑΝ TCReceipts.Amount > 7500 | THEN TCReceipts.Amount - 300 | ELSE TCReceipts.Amount | ΤΕΛΟΣ ΩΣ ΠοσόΜε Έκπτωση | ΑΠΟ | Έγγραφο.Παραλαβή αγαθώνΥπηρεσίες.TCReceiptsAS"

5. Λειτουργία EXPRESS- σας επιτρέπει να εκφράσετε ένα σταθερό πεδίο με έναν συγκεκριμένο τύπο.

Σύνταξη: EXPRESS (Όνομα πεδίου AS TypeName)

Παράδειγμα χρήσης:

Query.Text = "ΕΠΙΛΟΓΗ ΔΙΑΦΟΡΩΝ | Sales.Registrar.Number, | SELECT | WHEN Sales.Registrar LINK Document.Consumable | THEN EXPRESS(Sales.Registrar AS Document.Consumable) | ELSE SELECT | WHEN Sales.Registrar LINK Document. ΤΟΤΕ EXPRESS(Sales.Registrar AS Document.Implementation) | ΤΕΛΟΣ | ... | END AS Number | FROM | RegisterAcumulations.Purchases AS Purchases";

Υπάρχει άλλη επιλογή για τη χρήση της συνάρτησης EXPRESS σε πεδία μικτών τύπων, πού εμφανίζονται; Το απλούστερο παράδειγμα είναι ο «Καταχωρητής» για οποιοδήποτε μητρώο. Γιατί λοιπόν μπορεί να χρειαστεί να προσδιορίσουμε τον τύπο στον καταχωρητή; Ας εξετάσουμε την κατάσταση όταν επιλέγουμε το πεδίο "Αριθμός" από τον καταχωρητή, από ποιον πίνακα θα επιλεγεί ο αριθμός; Η σωστή απάντηση όλων! Επομένως, για να λειτουργεί γρήγορα το ερώτημά μας, θα πρέπει να καθορίσουμε έναν ρητό τύπο χρησιμοποιώντας τη συνάρτηση EXPRESS

Παράδειγμα χρήσης:

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Nomenclature";

6. Λειτουργία ISNULL(εναλλακτική ορθογραφία ISNULL) - εάν το πεδίο είναι τύπου NULL, τότε αντικαθίσταται με τη δεύτερη παράμετρο της συνάρτησης.

Σύνταξη: ISNULL(<Поле>, <ПодставляемоеЗначение>)

Παράδειγμα χρήσης:

Σημειώστε επίσης ότι είναι σκόπιμο να αντικαθιστάτε ΠΑΝΤΑ τον τύπο NULL με κάποια τιμή, γιατί Η σύγκριση με τον τύπο NULL επιστρέφει πάντα FALSE ακόμα κι αν συγκρίνετε NULL με NULL. Τις περισσότερες φορές, οι τιμές NULL σχηματίζονται ως αποτέλεσμα της ένωσης πινάκων (όλοι οι τύποι ενώσεων εκτός από τους εσωτερικούς).

Query.Text = //Επιλέξτε ολόκληρο το στοιχείο και τα υπόλοιπά του //αν δεν υπάρχει υπόλοιπο σε κάποιο στοιχείο, τότε θα υπάρχει ένα πεδίο //NULL το οποίο θα αντικατασταθεί με την τιμή 0 "SELECT | No. Link, | ISNULL (ProductsInStockRemains.InStockRemaining, 0) AS Remainder | FROM | Κατάλογος. Ονοματολογία AS Αρ.

7. Λειτουργία ΑΝΤΙΠΡΟΣΩΠΗΣΗΣ- σας επιτρέπει να λάβετε μια αναπαράσταση του πεδίου αιτήματος.

Σύνταξη: ΕΚΤΕΛΕΣΗ(<НаименованиеПоля>)

Παράδειγμα χρήσης:

Query.Text = "ΕΠΙΛΟΓΗ | ΑΝΤΙΠΡΟΣΩΠΗΣΗ(FreeRemainingRemains.Ονοματολογία) AS Ονοματολογία, | REPRESENTATION(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |FROM |RemainingRemainmainingAS"

Κατασκευάζει στη γλώσσα ερωτημάτων 1C

Συζητήσαμε μαζί σας παραπάνω Λειτουργίες γλώσσας ερωτήματος 1C, τώρα ήρθε η ώρα να εξετάσουμε κατασκευάζει στη γλώσσα ερωτημάτων 1C, δεν είναι λιγότερο σημαντικά και χρήσιμα, ας ξεκινήσουμε.

1. ΣΥΝΔΕΣΜΟΣ Κατασκευής- είναι ένας λογικός τελεστής για τον έλεγχο ενός τύπου αναφοράς. Συχνότερα συναντάται κατά τον έλεγχο ενός πεδίου σύνθετου τύπου έναντι ενός συγκεκριμένου τύπου. Σύνταξη: ΣΥΝΔΕΣΜΟΣ<Имя таблицы>

Παράδειγμα χρήσης:

Request.Text = //εάν ο τύπος τιμής εγγραφής είναι παραλαβή παραστατικού, //τότε το ερώτημα θα επιστρέψει "Παραλαβή αγαθών", διαφορετικά "Πωλήσεις αγαθών" "ΕΠΙΛΟΓΗ | ΕΠΙΛΕΞΤΕ | ΟΤΑΝ Υπολείπεται.Σύνδεσμος Καταχωρητή Έγγραφο. Παραλαβή ΑγαθώνΥπηρεσίες | ΜΕΤΑ ""Απόδειξη" | ΑΛΛΟ ""Κατανάλωση"" | ΤΕΛΟΣ ΩΣ Είδος Κίνησης | ΑΠΟ | Μητρώο συσσώρευσης. Υπόλοιπα Προϊόντα σε Αποθήκες ΩΣ Υπολείμματα" ;

2. Σχεδιασμός ΜΕΤΑΞΥ- αυτός ο τελεστής ελέγχει εάν η τιμή είναι εντός του καθορισμένου εύρους.

Σύνταξη: ΜΕΤΑΞΥ<Выражение>ΚΑΙ<Выражение>

Παράδειγμα χρήσης:

Request.Text = //λήψη ολόκληρης της ονοματολογίας της οποίας ο κωδικός βρίσκεται στην περιοχή από 1 έως 100 "ΕΠΙΛΟΓΗ | Ονοματολογία.Σύνδεσμος |FROM | Κατάλογος.Ονοματολογία ΩΣ Ονοματολογία |ΠΟΥ | Ονοματολογία.Κωδικός Μεταξύ 1 ΚΑΙ 100" ;

3. Κατασκευή Β και Β ΙΕΡΑΡΧΙΑ- ελέγξτε εάν η τιμή βρίσκεται στη λίστα μεταφερόμενων (πίνακες, πίνακες τιμών κ.λπ. μπορούν να μεταφερθούν ως λίστα). Ο τελεστής IN HIERARCHY σάς επιτρέπει να προβάλετε την ιεραρχία (ένα παράδειγμα χρήσης του Λογαριασμού).

Σύνταξη: ΣΕ(<СписокЗначений>), ΣΤΗΝ ΙΕΡΑΡΧΙΑ(<СписокЗначений>)

Παράδειγμα χρήσης:

Request.Text = //επιλέξτε όλους τους δευτερεύοντες λογαριασμούς του λογαριασμού "SELECT | Self-supporting. Link AS Account | FROM | Chart of Account. Self-supporting AS Self-supporting | WHERE | Self-supporting. Link IN HIERARCHY VALUE (Γράφημα Λογαριασμοί. Αυτοφερόμενο. Αγαθά)";

4. Σχεδιασμός ΠΑΡΟΜΟΙΟ- Αυτή η συνάρτηση μας επιτρέπει να συγκρίνουμε μια συμβολοσειρά με ένα μοτίβο συμβολοσειράς.

Σύνταξη: ΑΡΕΣΕΙ "<ТекстШаблона>"

Επιλογές μοτίβων σειρών:

% - μια ακολουθία που περιέχει οποιονδήποτε αριθμό αυθαίρετων χαρακτήρων.

Ένας αυθαίρετος χαρακτήρας.

[...] - οποιοσδήποτε μεμονωμένος χαρακτήρας ή ακολουθία χαρακτήρων που παρατίθενται μέσα σε αγκύλες. Η απαρίθμηση μπορεί να καθορίσει εύρη, για παράδειγμα a-z, που σημαίνει έναν αυθαίρετο χαρακτήρα που περιλαμβάνεται στο εύρος, συμπεριλαμβανομένων των άκρων του εύρους.

[^...] - οποιοσδήποτε μεμονωμένος χαρακτήρας ή ακολουθία χαρακτήρων που παρατίθενται μέσα σε αγκύλες εκτός από αυτούς που παρατίθενται μετά το σύμβολο άρνησης.

Παράδειγμα χρήσης:

Ερώτημα.Κείμενο = //βρείτε ολόκληρη την ονοματολογία που περιέχει τη ρίζα TABUR και ξεκινά //είτε με μικρό ή κεφαλαίο γράμμα t "ΕΠΙΛΟΓΗ | Ονοματολογία. Σύνδεσμος | ΑΠΟ | Κατάλογος. Ονοματολογία ΩΣ Ονοματολογία | ΠΟΥ | Προϊόντα. Όνομα LIKE "" [Tt ]abur%""" ;

5. Σχεδιασμός ΕΠΙΤΡΕΠΕΤΑΙ- αυτός ο χειριστής σάς επιτρέπει να επιλέξετε μόνο εκείνες τις εγγραφές από τη βάση δεδομένων για τις οποίες ο καλών έχει άδεια ανάγνωσης. Αυτά τα δικαιώματα διαμορφώνονται σε επίπεδο εγγραφής (RLS).

Σύνταξη: ΕΠΙΤΡΕΠΕΤΑΙ γράφεται μετά τη λέξη-κλειδί ΕΠΙΛΟΓΗ

Παράδειγμα χρήσης:

Request.Text = "ΕΠΙΛΟΓΗ ΕΠΙΤΡΕΠΩΝ | Αντισυμβαλλόμενοι. Σύνδεσμος | ΑΠΟ | Κατάλογος. Αντισυμβαλλόμενοι ΩΣ Αντισυμβαλλόμενοι";

6. Σχεδιασμός ΔΙΑΦΟΡΟΙ- σας επιτρέπει να επιλέξετε εγγραφές στις οποίες δεν υπάρχουν διπλότυπες εγγραφές.

Σύνταξη: ΔΙΑΦΟΡΕΣ γράφεται μετά τη λέξη-κλειδί ΕΠΙΛΟΓΗ

Παράδειγμα χρήσης:

Request.Text = //επιλέγει εγγραφές στις οποίες ο αναγνώστης έχει δικαιώματα "ΕΠΙΛΟΓΗ ΔΙΑΦΟΡΩΝ | Αντισυμβαλλόμενοι. Όνομα | ΑΠΟ | Κατάλογος. Αντισυμβαλλόμενοι ΩΣ Αντισυμβαλλόμενοι" ;

Επίσης, η ΔΙΑΦΟΡΙΚΗ κατασκευή μπορεί να χρησιμοποιηθεί με τον χειριστή ALLOWED και άλλους χειριστές.

Παράδειγμα χρήσης:

Request.Text = //επιλέγει διάφορες εγγραφές στις οποίες ο αναγνώστης έχει δικαιώματα "ΕΠΙΛΟΓΗ ΕΠΙΤΡΕΠΩΝ ΔΙΑΦΟΡΩΝ | Αντισυμβαλλόμενοι. Όνομα | ΑΠΟ | Κατάλογος. Αντισυμβαλλόμενοι ΩΣ Αντισυμβαλλόμενοι";

7. Σχεδιασμός ΠΡΩΤΑ- επιλέγει τον αριθμό των εγγραφών που καθορίζονται στην παράμετρο από το αποτέλεσμα του ερωτήματος.

Σύνταξη: ΠΡΩΤΟΣ<число>

Παράδειγμα χρήσης:

Request.Text = //επιλέξτε τους πρώτους 4 αριθμούς CCD από τον κατάλογο "SELECT FIRST 4 | CCD Numbers. Link | FROM | Directory. CCD Numbers AS CCD Numbers";

8. Σχεδιασμός ΓΙΑ ΑΛΛΑΓΗ- σας επιτρέπει να κλειδώσετε ένα τραπέζι, λειτουργεί μόνο σε συναλλαγές (σχετικό μόνο για αυτόματα κλείδωμα).

Σύνταξη: ΓΙΑ ΑΛΛΑΓΗ<НаименованиеТаблицы>

Παράδειγμα χρήσης:

Ερώτημα.Κείμενο = "ΕΠΙΛΟΓΗ | Ελεύθερα υπολείμματα. Ονοματολογία, | Δωρεάν υπολείμματα. Αποθήκη, | Ελεύθερα υπολείμματα. Σε απόθεμα | . Δωρεάν υπολείμματα.

9. Σχεδιασμός ΠΑΡΑΓΓΕΛΙΑ ΑΠΟ- οργανώνει δεδομένα ανά συγκεκριμένο πεδίο. Εάν το πεδίο είναι σύνδεσμος, τότε κατά τη ρύθμιση της σημαίας ΑΥΤΟΜΑΤΗ ΠΑΡΑΓΓΕΛΙΑΗ ταξινόμηση θα γίνει κατά αναπαράσταση συνδέσμου· εάν η σημαία είναι απενεργοποιημένη, τότε οι σύνδεσμοι ταξινομούνται με βάση την αρχαιότητα της διεύθυνσης συνδέσμου στη μνήμη.

Σύνταξη: ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ<НаименованиеПоля>ΑΥΤΟΜΑΤΗ ΠΑΡΑΓΓΕΛΙΑ

Παράδειγμα χρήσης:

Ερώτημα.Κείμενο = "ΕΠΙΛΟΓΗ | Ελεύθερα υπόλοιπα. Ονοματολογία AS Ονοματολογία, | Ελεύθερα υπολείμματα. Αποθήκη AS Αποθήκη, | Ελεύθερα υπολείμματα που απομένουν. Σε απόθεμα που απομένουν | ΑΠΟ | Εγγραφή συσσωρεύσεων. Δωρεάν υπολείμματα. Υπόλοιπα AS Ελεύθερα υπολείμματα BORDERma | Ονοματολογία | AUTO ORDER VANIE";

10. Σχεδιασμός GROUP BY- χρησιμοποιείται για την ομαδοποίηση συμβολοσειρών ερωτήματος κατά συγκεκριμένα πεδία. Τα αριθμητικά πεδία πρέπει να χρησιμοποιούνται με οποιαδήποτε αθροιστική συνάρτηση.

Σύνταξη: ΟΜΑΔΑ ΑΠΟ<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Παράδειγμα χρήσης:

Query.Text = "ΕΠΙΛΟΓΗ | ItemsInWarehouses.Ονοματολογία AS Ονοματολογία, | ItemsInWarehouses.Warehouse, | SUM(ItemsInWarehouses.InStock) AS INSTTOCK |FROM | RegisterAcumulations.ItemsInWarehouses AS.ItemsInWarehouses AS.ItemsInWarehouses AS tWarehouse ah.Warehouse" ;

11. Σχεδιασμός HAVING- σας επιτρέπει να εφαρμόσετε μια αθροιστική συνάρτηση σε μια συνθήκη επιλογής δεδομένων, παρόμοια με την κατασκευή WHERE.

Σύνταξη: ΕΧΟΝΤΑΣ<агрегатная функция с условием>

Παράδειγμα χρήσης:

Query.Text = //επιλέγει ομαδοποιημένες εγγραφές όπου το πεδίο InStock είναι μεγαλύτερο από 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK.FROM | RegisterAccumulationSItemsInStocks | ΟΜΑΔΑ ΑΝΑ | ΠροϊόνταΣτιςΑποθήκες.Ονοματολογία, | ΠροϊόνταΣτιςΑποθήκες.Αποθήκη | |ΔΙΑΘΕΣΙΜΟ | ΠΟΣΟ(ΠροϊόνταΣτιςΑποθήκες.Σε Απόθεμα) > 3" ;

12. Κατασκευές ΔΕΙΚΤΗΣ ΑΠΟ- χρησιμοποιείται για την ευρετηρίαση του πεδίου ερωτήματος. Ένα ερώτημα με ευρετηρίαση χρειάζεται περισσότερο χρόνο για να ολοκληρωθεί, αλλά επιταχύνει την αναζήτηση μέσω ευρετηριασμένων πεδίων. Μπορεί να χρησιμοποιηθεί μόνο σε εικονικούς πίνακες.

Σύνταξη: ΕΥΡΕΤΗΡΙΟ ΑΠΟ<Поле1, ... , ПолеN>

Παράδειγμα χρήσης:

Query.Text = "ΕΠΙΛΟΓΗ | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | ΕΥΡΕΤΗΡΙΟ ΑΠΟ | Ts.NameOS, | Ts .CodeOS";

13. Σχεδιασμός ΠΟΥ- σας επιτρέπει να επιβάλετε μια συνθήκη σε οποιαδήποτε πεδία επιλογής. Το αποτέλεσμα θα περιλαμβάνει μόνο εγγραφές που ικανοποιούν την προϋπόθεση.

Σύνταξη: ΟΠΟΥ<Условие1 ОператорЛогСоединения УсловиеN>

Παράδειγμα χρήσης:

Query.Text = //επιλέγονται όλες οι εγγραφές με CompensationRemaining<>0 και //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPOREmains.Child, | CompensationRPOREmains.CompensationRemains, | CompensationRPORemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains RPRemains | WHERE |ΑποζημίωσηRPORαπομένει.ΑποζημίωσηΠαραμένει<>0 | Και CompensationRPOREemains.AmountForCalcCompRemaining> 100" ;

14. Σχεδιαστικά ΑΠΟΤΕΛΕΣΜΑΤΑ... ΓΕΝΙΚΑ- χρησιμοποιείται για τον υπολογισμό των συνόλων· η σχεδίαση καθορίζει τα πεδία με τα οποία θα υπολογιστούν τα σύνολα και θα εφαρμοστούν συγκεντρωτικές συναρτήσεις στα συνολικά πεδία. Όταν χρησιμοποιούνται σύνολα για κάθε πεδίο μετά την κατασκευή TOTAL, τα δεδομένα ομαδοποιούνται. Υπάρχει μια προαιρετική ΓΕΝΙΚΗ κατασκευή· η χρήση της παρέχει επίσης πρόσθετη ομαδοποίηση. Θα δείτε ένα παράδειγμα του αποτελέσματος του αιτήματος παρακάτω.

Σύνταξη: ΑΠΟΤΕΛΕΣΜΑΤΑ<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>ΜΕ<ОБЩИЕ> <Поле1, ... , ПолеN>

Παράδειγμα χρήσης:

αίτημα Διακανονισμός ΜΕ Αντισυμβαλλομένους. Υπόλοιπα ΩΣ Υπολογισμοί | ΣΥΝΟΛΟ | ΠΟΣΟ (Υπόλοιπο) | Λογισμικό | ΓΕΝΙΚΑ, | Τύπος συμφωνίας";

Το σχήμα περιγράφει τις ομαδοποιήσεις που σχηματίστηκαν κατά την εκτέλεση του αιτήματος, το επάνω αναφέρεται στην ενότητα ΓΕΝΙΚΑ και το δεύτερο στο πεδίο Τύπος συμφωνίας συμφωνίας αντισυμβαλλομένου.

Αυτός ο μηχανισμός ερωτήματος χρησιμοποιείται για τον υπολογισμό δεικτών για επιλεγμένα πεδία ομαδοποίησης.

Για παράδειγμα, για την επίλυση προβλημάτων: προσδιορίστε το ποσό όλων των πωλήσεων ενός αντισυμβαλλομένου για μια περίοδο, τον μέγιστο ή τον μέσο λογαριασμό.

Γρήγορο πέρασμα

Βασική σύνταξη:

ΕΠΙΛΕΓΩ<ГруппировочныеПоля>, <СУММА(<РасчетноеПоле>)>
ΑΠΟ<Источник>
ΟΜΑΔΑ ΑΠΟ
<ГруппировочныеПоля>

Αποδεικνύεται ότι στην οδηγία GROUP BY, όλα τα πεδία από το SELECT είναι διπλά, εκτός από αυτά για τα οποία εκτελείται ο υπολογισμός. Όταν προσθέτετε ένα πεδίο στον κατασκευαστή, αυτό γίνεται αυτόματα, εάν το παρακολουθείτε χειροκίνητα, διαφορετικά θα εμφανιστεί ένα σφάλμα: "Το πεδίο δεν περιλαμβάνεται στην ομάδα".

Σημειώνω ότι δεν είναι απαραίτητο να προσθέσετε πρωτόγονες τιμές (αριθμός, ημερομηνία, συμβολοσειρά) ή λεπτομέρειες συνδέσμων που υπάρχουν ήδη στην ομαδοποίηση.

Μπορεί επίσης να μην υπάρχουν καθόλου συναρτήσεις συγκεντρωτικών στοιχείων, οπότε το ερώτημα θα λειτουργήσει σαν να χρησιμοποιούσε SELECT DISTINCT.

//Αυτό το αίτημα θα λάβει τον αριθμό των μοναδικών ειδών που έχουν περάσει από κάθε αποθήκη στο σύστημα
ΕΠΙΛΕΓΩ
Υπόλοιπα αποθέματα. Αποθήκη,
ΠΟΣΟΤΗΤΑ (ΠΑΡΑΜΕΝΕΙ ΔΙΑΦΟΡΕΤΙΚΟ ΑΠΟΘΕΜΑ. Ονοματολογία) ΩΣ Ονοματολογία,
1,
DATETIME(2017,1,12),
Υπόλοιπα αποθέματα.Αποθήκη.Όνομα
ΑΠΟ
Μητρώο συσσωρεύσεων Υπόλοιπα ειδών αποθέματος AS Υπόλοιπα ειδών αποθέματος

ΟΜΑΔΑ ΑΠΟ
Υπόλοιπα αποθέματα Αποθήκη

Ομαδοποίηση συναρτήσεων (συγκεντρωτικό)

  • ΑΘΡΟΙΣΜΑ (<Поле>)
  • ΠΟΣΟΤΗΤΑ(<Поле>)
  • ΠΟΣΟΤΗΤΑ (ΔΙΑΦΟΡΕΤΙΚΗ<Поле>)
  • ΑΝΩΤΑΤΟ ΟΡΙΟ (<Поле>)
  • ΕΛΑΧΙΣΤΟ (<Поле>)
  • ΜΕΣΗ ΤΙΜΗ(<Поле>)

Άλλες επιλογές ομαδοποίησης

Επιτρέπεται η χρήση μαθηματικών τελεστών πάνω από τις συναρτήσεις ομαδοποίησης (+,*,/,-), καθώς και την κατασκευή SELECT τόσο στο πάνω μέρος της μονάδας όσο και στο εσωτερικό (ανάλογα με τις ανάγκες)

ΕΠΙΛΕΓΩ
,
SUM(Inventory balances Turnover.SumTurnover) AS AmountTurnover,
SUM (Υπόλοιπα αποθέματοςΚύκλος εργασιών.ΠοσότηταΚύκλος εργασιών) AS QuantityTurnover,
ΕΠΙΛΟΓΗ
WHEN SUM(Inventory balances Turnover.QuantityTurnover) = 0
ΜΕΤΑ 0
ELSE SUM(Υπόλοιπα αποθέματοςΚύκλος εργασιών.ΠοσόΚύκλος εργασιών) / SUM(Υπόλοιπα αποθέματοςΚύκλος εργασιών.ΠοσότηταΚύκλος εργασιών)
ΤΕΛΟΣ ΩΣ ΜέσηΤιμή
ΑΠΟ

ΟΜΑΔΑ ΑΠΟ
Υπόλοιπα αποθεμάτων Κύκλος εργασιών.Ονοματολογία

Παράδειγμα αιτήματος χωρίς συναρτήσεις:
ΕΠΙΛΕΓΩ
Υπόλοιπα αποθεμάτων Κύκλος εργασιών.Ονοματολογία
ΑΠΟ
ΕγγραφήΣυσσωρεύσεις.Υπόλοιπα αποθέματος.Κύκλος εργασιών AS Υπόλοιπα αποθέματοςΚύκλος εργασιών

ΟΜΑΔΑ ΑΠΟ
Υπόλοιπα αποθεμάτων Κύκλος εργασιών.Ονοματολογία

Μπορείτε να χρησιμοποιήσετε συγκεντρωτικά στοιχεία πάνω από τους πίνακες που ενώνονται, αλλά συνιστάται η χρήση της συνάρτησης IsNULL από πάνω

ΕΠΙΛΕΓΩ
ReferenceNomenclature.Link,
ISNULL(SUM(Υπόλοιπα αποθέματοςΚύκλος εργασιών.ΠοσόΚύκλος), 0) AS Amount
ΑΠΟ
Directory.Nomenclature AS RefNomenclature
ΑΡΙΣΤΕΡΗ ΣΥΝΔΕΣΗ ΜητρώοΣυσσωρεύσεις.Υπόλοιπα αποθέματος.Κύκλος εργασιών AS Υπόλοιπα αποθέματοςΚύκλος εργασιών
Λογισμικό (Υπόλοιπα αποθέματοςTurnover.Nomenclature = SprNomenclature.Link)

ΟΜΑΔΑ ΑΠΟ

RefNomenclature.Σύνδεσμος

Ομαδοποίηση στο Query Designer

Παράγεται στην ομώνυμη καρτέλα.

  • Από τα διαθέσιμα πεδία επιλέγονται πεδία ομάδας, καθώς και πεδία αθροίσματος (για καθένα από αυτά επιλέγεται η συνάρτηση άθροισης).
  • Υπάρχουν κουμπιά προσθήκης στη μέση ή μπορείτε να κάνετε drag and drop με το ποντίκι
  • Ο κατασκευαστής συνήθως επιλέγει ο ίδιος τη συνάρτηση (φροντίστε να ελέγξετε τις ενέργειές της)

Ας υποθέσουμε ότι έχουμε το παρακάτω προϊόν στις αποθήκες μας:

Η ενότητα ομαδοποίησης δηλώνεται με τη λέξη-κλειδί ΟΜΑΔΑ ΑΠΟ. Γιατί απαιτείται ομαδοποίηση σε ένα ερώτημα; Απόλυτα σωστό, για το συνδυασμό πανομοιότυπων πεδίων πίνακα σε μια ομάδα και τη λήψη συνοπτικών αποτελεσμάτων για τα υπόλοιπα. Η ομαδοποίηση συμπτύσσει παρόμοια πεδία ερωτήματος σε ένα, μειώνοντας έτσι τον αριθμό των εγγραφών που προκύπτουν. Επιτρέψτε μου να κάνω μια κράτηση αμέσως: εάν χρησιμοποιείται ομαδοποίηση σε ένα αίτημα, τότε όλα τα πεδία θα πρέπει να χωριστούν σε δύο κατηγορίες: αυτά με τα οποία ομαδοποιούμε και αυτά που ομαδοποιούνται. Επιτρέψτε μου να εξηγήσω με ένα παράδειγμα, ας πούμε ότι θέλουμε να μάθουμε πόσα αγαθά έχουμε γενικά, χωρίς να λάβουμε υπόψη τις αποθήκες, τότε θα γράψουμε τον ακόλουθο κωδικό αιτήματος:

Request.Text = "
|ΕΠΙΛΟΓΗ
| Προϊόντα. Προϊόν,
| SUM(Είδη.Ποσότητα) ΩΣ Ποσότητα
|ΑΠΟ
|
|ΟΜΑΔΑ ΑΠΟ
| Προϊόντα.Προϊόν";

Σε αυτήν την περίπτωση, Προϊόν είναι το πεδίο με το οποίο πραγματοποιείται η ομαδοποίηση και Ποσότητα είναι το ομαδοποιημένο πεδίο. Το SUM είναι μια αθροιστική συνάρτηση· υποδεικνύει στο ερώτημα ότι όλα τα δεδομένα σχετικά με τον αριθμό των πανομοιότυπων προϊόντων πρέπει να αθροίζονται. Το αποτέλεσμα αυτού του ερωτήματος θα είναι ένας πίνακας όπως:

Συγκεντρωτικές συναρτήσεις

Πρέπει να εφαρμοστεί μια συγκεντρωτική συνάρτηση στα ομαδοποιημένα πεδία, προαιρετικά SUM, καθώς και MAXIMUM, MINIMUM, AVERAGE, QUANTITY, NUMBER OF DIFFERENT. Ας ρίξουμε μια πιο προσεκτική ματιά στη δράση καθενός από αυτά.

ΑΘΡΟΙΣΜΑ- ισχύει μόνο για αριθμητικά πεδία, προσθέτει τους αριθμούς που μεταβιβάζονται σε αυτό. Το αποτέλεσμά του φαίνεται στο παραπάνω σχήμα.

ΜΕΣΗ ΤΙΜΗ- ισχύει μόνο για αριθμητικά πεδία, υπολογίζει τον μέσο όρο - το άθροισμα των περασμένων παραμέτρων / αριθμός παραμέτρων:

ΑΝΩΤΑΤΟ ΟΡΙΟ- μπορεί να χρησιμοποιηθεί για οποιαδήποτε πεδία, λαμβάνει το μέγιστο των περασμένων παραμέτρων. Ας υποθέσουμε ότι το κείμενο του αιτήματος μοιάζει με αυτό:

Request.Text = "
|ΕΠΙΛΟΓΗ
| Προϊόντα. Προϊόν,
| MAX(Products.Warehouse) AS Warehouse,
| MAXIMUM(Είδη.Ποσότητα) ΩΣ Ποσότητα
|ΑΠΟ
| Directory.Products AS Products
|ΟΜΑΔΑ ΑΠΟ
| Προϊόντα.Προϊόν";

Εκείνοι. Έχουμε πάλι ένα πεδίο ομαδοποίησης Προϊόν και δύο πεδία ομαδοποίησης: Αποθήκη και Ποσότητα. Το αποτέλεσμα αυτού του ερωτήματος θα μοιάζει με αυτό:

ΕΛΑΧΙΣΤΟ -μπορεί να χρησιμοποιηθεί για οποιαδήποτε πεδία, λαμβάνει το ελάχιστο των παραμέτρων που έχουν περάσει:

ΠΟΣΟΤΗΤΑ- μπορεί να χρησιμοποιηθεί για οποιαδήποτε πεδία, λαμβάνει τον αριθμό των περασμένων παραμέτρων:

ΑΡΙΘΜΟΣ ΔΙΑΦΟΡΕΤΙΚΩΝ- μπορεί να χρησιμοποιηθεί για οποιαδήποτε πεδία, παίρνει τον αριθμό των διαφορετικών παραμέτρων. Εκείνοι. αν στη συνάρτηση περάσουν οι παράμετροι (1,1,2,3,3,3,4,4,4,4,4,5), τότε θα επιστρέψει 5 . Η συνάρτηση COUNT θα επέστρεφε 12. Ένα ερώτημα που χρησιμοποιεί τη συνάρτηση COUNT OF DIFFERENT θα μοιάζει με αυτό:

Request.Text = "
|ΕΠΙΛΟΓΗ
| Προϊόντα. Προϊόν,
| ΠΟΣΟΤΗΤΑ (ΔΙΑΦΟΡΕΤΙΚΑ ΠΡΟΪΟΝΤΑ.ΑΠΟΘΗΚΗ) ΩΣ ΑΠΟΘΗΚΗ,
| ΠΟΣΟΤΗΤΑ (ΔΙΑΦΟΡΕΤΙΚΑ Είδη. Ποσότητα) ΩΣ Ποσότητα
|ΑΠΟ
| Directory.Products AS Products
|ΟΜΑΔΑ ΑΠΟ
| Προϊόντα.Προϊόν";

Αποτέλεσμα:

Ας ομαδοποιήσουμε κατά δύο πεδία: Προϊόν και Αποθήκη:

Request.Text = "
|ΕΠΙΛΟΓΗ
| Προϊόντα. Προϊόν,
| Products.Warehouse AS Warehouse,
| <АГРЕГАТНАЯ ФУНКЦИЯ>(Είδη.Ποσότητα) ΩΣ Ποσότητα
|ΑΠΟ
| Directory.Products AS Products
|ΟΜΑΔΑ ΑΠΟ
| Προϊόντα. Προϊόν,
| Προϊόντα.Αποθήκη";

για διάφορες αθροιστικές συναρτήσεις το αποτέλεσμα θα είναι το εξής:

Ας συνοψίσουμε:

Εάν χρησιμοποιείται ομαδοποίηση στο αίτημα, τότε όλα τα πεδία πρέπει να χωριστούν σε ομαδοποιήσιμα (τα οποία θα «συμπτυχθούν») και σε ομαδοποίηση (με τα οποία πραγματοποιείται η ομαδοποίηση - «συμπτυγμένο»). Μία από τις συγκεντρωτικές συναρτήσεις πρέπει να εφαρμοστεί στα πεδία που ομαδοποιούνται, αν και συναρτήσεις όπως το SUM και το AVERAGE μπορούν να εφαρμοστούν μόνο σε αριθμητικά πεδία.


Οι περισσότεροι συζητήθηκαν
1 με διαχείριση εμπορίου επιχειρήσεων 11 1 με διαχείριση εμπορίου επιχειρήσεων 11
Συντομογραφίες και αρκτικόλεξα στα ρωσικά Συντομογραφίες και αρκτικόλεξα στα ρωσικά
Πώς εμφανίστηκε ο ηλίανθος στη Ρωσία Πώς εμφανίστηκε ο ηλίανθος στη Ρωσία


μπλουζα